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

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

s390/cio: cleanup cmb_enable sysfs attr



Ensure that we hold the ccwlock when accessing private data. Return errors
that occur during measurement enabling to userspace. Apply some cleanups
while at it.

Signed-off-by: default avatarSebastian Ott <sebott@linux.vnet.ibm.com>
Reviewed-by: default avatarCornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 3c4aac86
Loading
Loading
Loading
Loading
+14 −8
Original line number Diff line number Diff line
@@ -1171,23 +1171,28 @@ static ssize_t cmb_enable_show(struct device *dev,
			       struct device_attribute *attr,
			       char *buf)
{
	return sprintf(buf, "%d\n", to_ccwdev(dev)->private->cmb ? 1 : 0);
	struct ccw_device *cdev = to_ccwdev(dev);
	int enabled;

	spin_lock_irq(cdev->ccwlock);
	enabled = !!cdev->private->cmb;
	spin_unlock_irq(cdev->ccwlock);

	return sprintf(buf, "%d\n", enabled);
}

static ssize_t cmb_enable_store(struct device *dev,
				struct device_attribute *attr, const char *buf,
				size_t c)
{
	struct ccw_device *cdev;
	int ret;
	struct ccw_device *cdev = to_ccwdev(dev);
	unsigned long val;
	int ret;

	ret = kstrtoul(buf, 16, &val);
	if (ret)
		return ret;

	cdev = to_ccwdev(dev);

	switch (val) {
	case 0:
		ret = disable_cmf(cdev);
@@ -1195,12 +1200,13 @@ static ssize_t cmb_enable_store(struct device *dev,
	case 1:
		ret = enable_cmf(cdev);
		break;
	default:
		ret = -EINVAL;
	}

	return c;
	return ret ? ret : c;
}

DEVICE_ATTR(cmb_enable, 0644, cmb_enable_show, cmb_enable_store);
DEVICE_ATTR_RW(cmb_enable);

int ccw_set_cmf(struct ccw_device *cdev, int enable)
{