Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/drivers/pci/hotplug/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 2 kB image not shown  

Quelle  rpadlpar_sysfs.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0+
/*
 * Interface for Dynamic Logical Partitioning of I/O Slots on
 * RPA-compliant PPC64 platform.
 *
 * John Rose <johnrose@austin.ibm.com>
 * October 2003
 *
 * Copyright (C) 2003 IBM.
 */

#include <linux/kobject.h>
#include <linux/string.h>
#include <linux/pci.h>
#include <linux/pci_hotplug.h>
#include "rpaphp.h"
#include "rpadlpar.h"
#include "../pci.h"

#define DLPAR_KOBJ_NAME       "control"

/* Those two have no quotes because they are passed to __ATTR() which
 * stringifies the argument (yuck !)
 */

#define ADD_SLOT_ATTR_NAME    add_slot
#define REMOVE_SLOT_ATTR_NAME remove_slot

static ssize_t add_slot_store(struct kobject *kobj, struct kobj_attribute *attr,
         const char *buf, size_t nbytes)
{
 char drc_name[MAX_DRC_NAME_LEN];
 char *end;
 int rc;

 if (nbytes >= MAX_DRC_NAME_LEN)
  return 0;

 strscpy(drc_name, buf, nbytes + 1);

 end = strchr(drc_name, '\n');
 if (end)
  *end = '\0';

 rc = dlpar_add_slot(drc_name);
 if (rc)
  return rc;

 return nbytes;
}

static ssize_t add_slot_show(struct kobject *kobj,
        struct kobj_attribute *attr, char *buf)
{
 return sysfs_emit(buf, "0\n");
}

static ssize_t remove_slot_store(struct kobject *kobj,
     struct kobj_attribute *attr,
     const char *buf, size_t nbytes)
{
 char drc_name[MAX_DRC_NAME_LEN];
 int rc;
 char *end;

 if (nbytes >= MAX_DRC_NAME_LEN)
  return 0;

 strscpy(drc_name, buf, nbytes + 1);

 end = strchr(drc_name, '\n');
 if (end)
  *end = '\0';

 rc = dlpar_remove_slot(drc_name);
 if (rc)
  return rc;

 return nbytes;
}

static ssize_t remove_slot_show(struct kobject *kobj,
    struct kobj_attribute *attr, char *buf)
{
 return sysfs_emit(buf, "0\n");
}

static struct kobj_attribute add_slot_attr =
 __ATTR(ADD_SLOT_ATTR_NAME, 0644, add_slot_show, add_slot_store);

static struct kobj_attribute remove_slot_attr =
 __ATTR(REMOVE_SLOT_ATTR_NAME, 0644, remove_slot_show, remove_slot_store);

static struct attribute *default_attrs[] = {
 &add_slot_attr.attr,
 &remove_slot_attr.attr,
 NULL,
};

static const struct attribute_group dlpar_attr_group = {
 .attrs = default_attrs,
};

static struct kobject *dlpar_kobj;

int dlpar_sysfs_init(void)
{
 int error;

 dlpar_kobj = kobject_create_and_add(DLPAR_KOBJ_NAME,
         &pci_slots_kset->kobj);
 if (!dlpar_kobj)
  return -EINVAL;

 error = sysfs_create_group(dlpar_kobj, &dlpar_attr_group);
 if (error)
  kobject_put(dlpar_kobj);
 return error;
}

void dlpar_sysfs_exit(void)
{
 sysfs_remove_group(dlpar_kobj, &dlpar_attr_group);
 kobject_put(dlpar_kobj);
}

Messung V0.5
C=94 H=89 G=91

¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.