diff options
| -rw-r--r-- | drivers/s390/cio/ccwgroup.c | 7 | ||||
| -rw-r--r-- | drivers/s390/cio/cmf.c | 11 | ||||
| -rw-r--r-- | drivers/s390/cio/css.c | 10 | ||||
| -rw-r--r-- | drivers/s390/cio/device.c | 17 | ||||
| -rw-r--r-- | drivers/s390/cio/qdio.c | 8 |
5 files changed, 35 insertions, 18 deletions
diff --git a/drivers/s390/cio/ccwgroup.c b/drivers/s390/cio/ccwgroup.c index fe1ad1722158..85b2e51a42ae 100644 --- a/drivers/s390/cio/ccwgroup.c +++ b/drivers/s390/cio/ccwgroup.c | |||
| @@ -318,7 +318,7 @@ ccwgroup_online_store (struct device *dev, struct device_attribute *attr, const | |||
| 318 | { | 318 | { |
| 319 | struct ccwgroup_device *gdev; | 319 | struct ccwgroup_device *gdev; |
| 320 | struct ccwgroup_driver *gdrv; | 320 | struct ccwgroup_driver *gdrv; |
| 321 | unsigned int value; | 321 | unsigned long value; |
| 322 | int ret; | 322 | int ret; |
| 323 | 323 | ||
| 324 | gdev = to_ccwgroupdev(dev); | 324 | gdev = to_ccwgroupdev(dev); |
| @@ -329,7 +329,9 @@ ccwgroup_online_store (struct device *dev, struct device_attribute *attr, const | |||
| 329 | if (!try_module_get(gdrv->owner)) | 329 | if (!try_module_get(gdrv->owner)) |
| 330 | return -EINVAL; | 330 | return -EINVAL; |
| 331 | 331 | ||
| 332 | value = simple_strtoul(buf, NULL, 0); | 332 | ret = strict_strtoul(buf, 0, &value); |
| 333 | if (ret) | ||
| 334 | goto out; | ||
| 333 | ret = count; | 335 | ret = count; |
| 334 | if (value == 1) | 336 | if (value == 1) |
| 335 | ccwgroup_set_online(gdev); | 337 | ccwgroup_set_online(gdev); |
| @@ -337,6 +339,7 @@ ccwgroup_online_store (struct device *dev, struct device_attribute *attr, const | |||
| 337 | ccwgroup_set_offline(gdev); | 339 | ccwgroup_set_offline(gdev); |
| 338 | else | 340 | else |
| 339 | ret = -EINVAL; | 341 | ret = -EINVAL; |
| 342 | out: | ||
| 340 | module_put(gdrv->owner); | 343 | module_put(gdrv->owner); |
| 341 | return ret; | 344 | return ret; |
| 342 | } | 345 | } |
diff --git a/drivers/s390/cio/cmf.c b/drivers/s390/cio/cmf.c index f4c132ab39ed..2808b6833b9e 100644 --- a/drivers/s390/cio/cmf.c +++ b/drivers/s390/cio/cmf.c | |||
| @@ -1219,16 +1219,21 @@ static ssize_t cmb_enable_store(struct device *dev, | |||
| 1219 | { | 1219 | { |
| 1220 | struct ccw_device *cdev; | 1220 | struct ccw_device *cdev; |
| 1221 | int ret; | 1221 | int ret; |
| 1222 | unsigned long val; | ||
| 1223 | |||
| 1224 | ret = strict_strtoul(buf, 16, &val); | ||
| 1225 | if (ret) | ||
| 1226 | return ret; | ||
| 1222 | 1227 | ||
| 1223 | cdev = to_ccwdev(dev); | 1228 | cdev = to_ccwdev(dev); |
| 1224 | 1229 | ||
| 1225 | switch (buf[0]) { | 1230 | switch (val) { |
| 1226 | case '0': | 1231 | case 0: |
| 1227 | ret = disable_cmf(cdev); | 1232 | ret = disable_cmf(cdev); |
| 1228 | if (ret) | 1233 | if (ret) |
| 1229 | dev_info(&cdev->dev, "disable_cmf failed (%d)\n", ret); | 1234 | dev_info(&cdev->dev, "disable_cmf failed (%d)\n", ret); |
| 1230 | break; | 1235 | break; |
| 1231 | case '1': | 1236 | case 1: |
| 1232 | ret = enable_cmf(cdev); | 1237 | ret = enable_cmf(cdev); |
| 1233 | if (ret && ret != -EBUSY) | 1238 | if (ret && ret != -EBUSY) |
| 1234 | dev_info(&cdev->dev, "enable_cmf failed (%d)\n", ret); | 1239 | dev_info(&cdev->dev, "enable_cmf failed (%d)\n", ret); |
diff --git a/drivers/s390/cio/css.c b/drivers/s390/cio/css.c index c1afab5f72d6..595e327d2f76 100644 --- a/drivers/s390/cio/css.c +++ b/drivers/s390/cio/css.c | |||
| @@ -705,13 +705,17 @@ css_cm_enable_store(struct device *dev, struct device_attribute *attr, | |||
| 705 | { | 705 | { |
| 706 | struct channel_subsystem *css = to_css(dev); | 706 | struct channel_subsystem *css = to_css(dev); |
| 707 | int ret; | 707 | int ret; |
| 708 | unsigned long val; | ||
| 708 | 709 | ||
| 710 | ret = strict_strtoul(buf, 16, &val); | ||
| 711 | if (ret) | ||
| 712 | return ret; | ||
| 709 | mutex_lock(&css->mutex); | 713 | mutex_lock(&css->mutex); |
| 710 | switch (buf[0]) { | 714 | switch (val) { |
| 711 | case '0': | 715 | case 0: |
| 712 | ret = css->cm_enabled ? chsc_secm(css, 0) : 0; | 716 | ret = css->cm_enabled ? chsc_secm(css, 0) : 0; |
| 713 | break; | 717 | break; |
| 714 | case '1': | 718 | case 1: |
| 715 | ret = css->cm_enabled ? 0 : chsc_secm(css, 1); | 719 | ret = css->cm_enabled ? 0 : chsc_secm(css, 1); |
| 716 | break; | 720 | break; |
| 717 | default: | 721 | default: |
diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c index e0c7adb8958e..abfd601d237a 100644 --- a/drivers/s390/cio/device.c +++ b/drivers/s390/cio/device.c | |||
| @@ -512,8 +512,8 @@ static ssize_t online_store (struct device *dev, struct device_attribute *attr, | |||
| 512 | const char *buf, size_t count) | 512 | const char *buf, size_t count) |
| 513 | { | 513 | { |
| 514 | struct ccw_device *cdev = to_ccwdev(dev); | 514 | struct ccw_device *cdev = to_ccwdev(dev); |
| 515 | int i, force; | 515 | int force, ret; |
| 516 | char *tmp; | 516 | unsigned long i; |
| 517 | 517 | ||
| 518 | if (atomic_cmpxchg(&cdev->private->onoff, 0, 1) != 0) | 518 | if (atomic_cmpxchg(&cdev->private->onoff, 0, 1) != 0) |
| 519 | return -EAGAIN; | 519 | return -EAGAIN; |
| @@ -525,25 +525,30 @@ static ssize_t online_store (struct device *dev, struct device_attribute *attr, | |||
| 525 | if (!strncmp(buf, "force\n", count)) { | 525 | if (!strncmp(buf, "force\n", count)) { |
| 526 | force = 1; | 526 | force = 1; |
| 527 | i = 1; | 527 | i = 1; |
| 528 | ret = 0; | ||
| 528 | } else { | 529 | } else { |
| 529 | force = 0; | 530 | force = 0; |
| 530 | i = simple_strtoul(buf, &tmp, 16); | 531 | ret = strict_strtoul(buf, 16, &i); |
| 531 | } | 532 | } |
| 532 | 533 | if (ret) | |
| 534 | goto out; | ||
| 533 | switch (i) { | 535 | switch (i) { |
| 534 | case 0: | 536 | case 0: |
| 535 | online_store_handle_offline(cdev); | 537 | online_store_handle_offline(cdev); |
| 538 | ret = count; | ||
| 536 | break; | 539 | break; |
| 537 | case 1: | 540 | case 1: |
| 538 | online_store_handle_online(cdev, force); | 541 | online_store_handle_online(cdev, force); |
| 542 | ret = count; | ||
| 539 | break; | 543 | break; |
| 540 | default: | 544 | default: |
| 541 | count = -EINVAL; | 545 | ret = -EINVAL; |
| 542 | } | 546 | } |
| 547 | out: | ||
| 543 | if (cdev->drv) | 548 | if (cdev->drv) |
| 544 | module_put(cdev->drv->owner); | 549 | module_put(cdev->drv->owner); |
| 545 | atomic_set(&cdev->private->onoff, 0); | 550 | atomic_set(&cdev->private->onoff, 0); |
| 546 | return count; | 551 | return ret; |
| 547 | } | 552 | } |
| 548 | 553 | ||
| 549 | static ssize_t | 554 | static ssize_t |
diff --git a/drivers/s390/cio/qdio.c b/drivers/s390/cio/qdio.c index 43876e287370..445cf364e461 100644 --- a/drivers/s390/cio/qdio.c +++ b/drivers/s390/cio/qdio.c | |||
| @@ -3663,11 +3663,11 @@ qdio_performance_stats_show(struct bus_type *bus, char *buf) | |||
| 3663 | static ssize_t | 3663 | static ssize_t |
| 3664 | qdio_performance_stats_store(struct bus_type *bus, const char *buf, size_t count) | 3664 | qdio_performance_stats_store(struct bus_type *bus, const char *buf, size_t count) |
| 3665 | { | 3665 | { |
| 3666 | char *tmp; | 3666 | unsigned long i; |
| 3667 | int i; | 3667 | int ret; |
| 3668 | 3668 | ||
| 3669 | i = simple_strtoul(buf, &tmp, 16); | 3669 | ret = strict_strtoul(buf, 16, &i); |
| 3670 | if ((i == 0) || (i == 1)) { | 3670 | if (!ret && ((i == 0) || (i == 1))) { |
| 3671 | if (i == qdio_performance_stats) | 3671 | if (i == qdio_performance_stats) |
| 3672 | return count; | 3672 | return count; |
| 3673 | qdio_performance_stats = i; | 3673 | qdio_performance_stats = i; |
