Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ed35ba9a authored by Sebastian Ott's avatar Sebastian Ott Committed by Martin Schwidefsky
Browse files

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: default avatarSebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent eb546195
Loading
Loading
Loading
Loading
+5 −7
Original line number Original line Diff line number Diff line
@@ -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)
	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)
		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;