提交 ed35ba9a 编写于 作者: S Sebastian Ott 提交者: Martin Schwidefsky

s390/cio/chp: cleanup attribute usage

Let the driver core handle device attribute creation and removal. This
will simplify the code and eliminates races between attribute
availability and userspace notification via uevents.
Signed-off-by: NSebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
上级 eb546195
...@@ -362,10 +362,13 @@ static struct attribute *chp_attrs[] = { ...@@ -362,10 +362,13 @@ static struct attribute *chp_attrs[] = {
&dev_attr_shared.attr, &dev_attr_shared.attr,
NULL, NULL,
}; };
static struct attribute_group chp_attr_group = { static struct attribute_group chp_attr_group = {
.attrs = chp_attrs, .attrs = chp_attrs,
}; };
static const struct attribute_group *chp_attr_groups[] = {
&chp_attr_group,
NULL,
};
static void chp_release(struct device *dev) static void chp_release(struct device *dev)
{ {
...@@ -397,6 +400,7 @@ int chp_new(struct chp_id chpid) ...@@ -397,6 +400,7 @@ int chp_new(struct chp_id chpid)
chp->chpid = chpid; chp->chpid = chpid;
chp->state = 1; chp->state = 1;
chp->dev.parent = &channel_subsystems[chpid.cssid]->device; chp->dev.parent = &channel_subsystems[chpid.cssid]->device;
chp->dev.groups = chp_attr_groups;
chp->dev.release = chp_release; chp->dev.release = chp_release;
mutex_init(&chp->lock); mutex_init(&chp->lock);
...@@ -426,16 +430,10 @@ int chp_new(struct chp_id chpid) ...@@ -426,16 +430,10 @@ int chp_new(struct chp_id chpid)
put_device(&chp->dev); put_device(&chp->dev);
goto out; goto out;
} }
ret = sysfs_create_group(&chp->dev.kobj, &chp_attr_group);
if (ret) {
device_unregister(&chp->dev);
goto out;
}
mutex_lock(&channel_subsystems[chpid.cssid]->mutex); mutex_lock(&channel_subsystems[chpid.cssid]->mutex);
if (channel_subsystems[chpid.cssid]->cm_enabled) { if (channel_subsystems[chpid.cssid]->cm_enabled) {
ret = chp_add_cmg_attr(chp); ret = chp_add_cmg_attr(chp);
if (ret) { if (ret) {
sysfs_remove_group(&chp->dev.kobj, &chp_attr_group);
device_unregister(&chp->dev); device_unregister(&chp->dev);
mutex_unlock(&channel_subsystems[chpid.cssid]->mutex); mutex_unlock(&channel_subsystems[chpid.cssid]->mutex);
goto out; goto out;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册