75 lines
1.8 KiB
Diff
75 lines
1.8 KiB
Diff
## Upstream status: In mm-tree.
|
|
|
|
diff -u b/drivers/s390/cio/device.c b/drivers/s390/cio/device.c
|
|
--- b/drivers/s390/cio/device.c
|
|
+++ b/drivers/s390/cio/device.c
|
|
@@ -53,6 +53,22 @@
|
|
return 1;
|
|
}
|
|
|
|
+static ssize_t
|
|
+modalias_print (struct ccw_device *cdev, char *buf, size_t size)
|
|
+{
|
|
+ struct ccw_device_id *id = &(cdev->id);
|
|
+ ssize_t len;
|
|
+
|
|
+ len = snprintf(buf, size, "ccw:t%04Xm%02X",
|
|
+ id->cu_type, id->cu_model);
|
|
+ if (id->dev_type != 0)
|
|
+ len += snprintf(buf + len, size - len, "dt%04Xdm%02X",
|
|
+ id->dev_type, id->dev_model);
|
|
+ else
|
|
+ len += snprintf(buf + len, size - len, "dtdm");
|
|
+ return len;
|
|
+}
|
|
+
|
|
/*
|
|
* Hotplugging interface for ccw devices.
|
|
* Heavily modeled on pci and usb hotplug.
|
|
@@ -63,7 +79,7 @@
|
|
{
|
|
struct ccw_device *cdev = to_ccwdev(dev);
|
|
int i = 0;
|
|
- int length = 0;
|
|
+ int length = 0, tmp_length = 0;
|
|
|
|
if (!cdev)
|
|
return -ENODEV;
|
|
@@ -100,6 +116,14 @@
|
|
cdev->id.dev_model);
|
|
if ((buffer_size - length <= 0) || (i >= num_envp))
|
|
return -ENOMEM;
|
|
+ ++length;
|
|
+ buffer += length;
|
|
+
|
|
+ envp[i++] = buffer;
|
|
+ length += tmp_length = scnprintf(buffer, buffer_size - length, "MODALIAS=");
|
|
+ length += modalias_print(cdev, buffer + tmp_length, buffer_size - length);
|
|
+ if ((buffer_size - length <= 0) || (i >= num_envp))
|
|
+ return -ENOMEM;
|
|
|
|
envp[i] = NULL;
|
|
|
|
@@ -251,17 +275,11 @@
|
|
modalias_show (struct device *dev, struct device_attribute *attr, char *buf)
|
|
{
|
|
struct ccw_device *cdev = to_ccwdev(dev);
|
|
- struct ccw_device_id *id = &(cdev->id);
|
|
- int ret;
|
|
+ ssize_t len;
|
|
|
|
- ret = sprintf(buf, "ccw:t%04Xm%02X",
|
|
- id->cu_type, id->cu_model);
|
|
- if (id->dev_type != 0)
|
|
- ret += sprintf(buf + ret, "dt%04Xdm%02X\n",
|
|
- id->dev_type, id->dev_model);
|
|
- else
|
|
- ret += sprintf(buf + ret, "dtdm\n");
|
|
- return ret;
|
|
+ len = modalias_print(cdev, buf, PAGE_SIZE);
|
|
+ len += snprintf(buf + len, PAGE_SIZE - len, "\n");
|
|
+ return len;
|
|
}
|
|
|
|
static ssize_t
|