Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 75786
b: refs/heads/master
c: f55842f
h: refs/heads/master
v: v3
  • Loading branch information
Greg Kroah-Hartman committed Jan 25, 2008
1 parent 4db1e33 commit 6ee65af
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 70 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2fb9113b974c3c7c43e76647bd5077238e274e1c
refs/heads/master: f55842f2329f4b3a3a6bb98b005bca3cc851d38a
112 changes: 43 additions & 69 deletions trunk/drivers/pci/hotplug/rpadlpar_sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,44 +23,13 @@

#define MAX_DRC_NAME_LEN 64

/* Store return code of dlpar operation in attribute struct */
struct dlpar_io_attr {
int rc;
struct attribute attr;
ssize_t (*store)(struct dlpar_io_attr *dlpar_attr, const char *buf,
size_t nbytes);
};

/* Common show callback for all attrs, display the return code
* of the dlpar op */
static ssize_t
dlpar_attr_show(struct kobject * kobj, struct attribute * attr, char * buf)
{
struct dlpar_io_attr *dlpar_attr = container_of(attr,
struct dlpar_io_attr, attr);
return sprintf(buf, "%d\n", dlpar_attr->rc);
}

static ssize_t
dlpar_attr_store(struct kobject * kobj, struct attribute * attr,
const char *buf, size_t nbytes)
{
struct dlpar_io_attr *dlpar_attr = container_of(attr,
struct dlpar_io_attr, attr);
return dlpar_attr->store ?
dlpar_attr->store(dlpar_attr, buf, nbytes) : -EIO;
}

static struct sysfs_ops dlpar_attr_sysfs_ops = {
.show = dlpar_attr_show,
.store = dlpar_attr_store,
};

static ssize_t add_slot_store(struct dlpar_io_attr *dlpar_attr,
const char *buf, size_t nbytes)
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;
Expand All @@ -72,15 +41,25 @@ static ssize_t add_slot_store(struct dlpar_io_attr *dlpar_attr,
end = &drc_name[nbytes];
*end = '\0';

dlpar_attr->rc = dlpar_add_slot(drc_name);
rc = dlpar_add_slot(drc_name);
if (rc)
return rc;

return nbytes;
}

static ssize_t remove_slot_store(struct dlpar_io_attr *dlpar_attr,
const char *buf, size_t nbytes)
static ssize_t add_slot_show(struct kobject *kobj,
struct kobj_attribute *attr, char *buf)
{
return sprintf(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)
Expand All @@ -93,59 +72,54 @@ static ssize_t remove_slot_store(struct dlpar_io_attr *dlpar_attr,
end = &drc_name[nbytes];
*end = '\0';

dlpar_attr->rc = dlpar_remove_slot(drc_name);
rc = dlpar_remove_slot(drc_name);
if (rc)
return rc;

return nbytes;
}

static struct dlpar_io_attr add_slot_attr = {
.rc = 0,
.attr = { .name = ADD_SLOT_ATTR_NAME, .mode = 0644, },
.store = add_slot_store,
};
static ssize_t remove_slot_show(struct kobject *kobj,
struct kobj_attribute *attr, char *buf)
{
return sprintf(buf, "0\n");
}

static struct dlpar_io_attr remove_slot_attr = {
.rc = 0,
.attr = { .name = REMOVE_SLOT_ATTR_NAME, .mode = 0644},
.store = remove_slot_store,
};
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 void dlpar_io_release(struct kobject *kobj)
{
/* noop */
return;
}

struct kobj_type ktype_dlpar_io = {
.release = dlpar_io_release,
.sysfs_ops = &dlpar_attr_sysfs_ops,
.default_attrs = default_attrs,
static struct attribute_group dlpar_attr_group = {
.attrs = default_attrs,
};

struct kset dlpar_io_kset = {
.kobj = {.ktype = &ktype_dlpar_io,
.parent = &pci_hotplug_slots_kset->kobj},
};
static struct kobject *dlpar_kobj;

int dlpar_sysfs_init(void)
{
kobject_set_name(&dlpar_io_kset.kobj, DLPAR_KOBJ_NAME);
if (kset_register(&dlpar_io_kset)) {
printk(KERN_ERR "rpadlpar_io: cannot register kset for %s\n",
kobject_name(&dlpar_io_kset.kobj));
int error;

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

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

void dlpar_sysfs_exit(void)
{
kset_unregister(&dlpar_io_kset);
sysfs_remove_group(dlpar_kobj, &dlpar_attr_group);
kobject_unregister(dlpar_kobj);
}

0 comments on commit 6ee65af

Please sign in to comment.