diff options
-rw-r--r-- | drivers/s390/cio/ccwreq.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/drivers/s390/cio/ccwreq.c b/drivers/s390/cio/ccwreq.c index d15f8b4d78bd..5156264d0c74 100644 --- a/drivers/s390/cio/ccwreq.c +++ b/drivers/s390/cio/ccwreq.c | |||
@@ -1,10 +1,13 @@ | |||
1 | /* | 1 | /* |
2 | * Handling of internal CCW device requests. | 2 | * Handling of internal CCW device requests. |
3 | * | 3 | * |
4 | * Copyright IBM Corp. 2009 | 4 | * Copyright IBM Corp. 2009, 2011 |
5 | * Author(s): Peter Oberparleiter <peter.oberparleiter@de.ibm.com> | 5 | * Author(s): Peter Oberparleiter <peter.oberparleiter@de.ibm.com> |
6 | */ | 6 | */ |
7 | 7 | ||
8 | #define KMSG_COMPONENT "cio" | ||
9 | #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt | ||
10 | |||
8 | #include <linux/types.h> | 11 | #include <linux/types.h> |
9 | #include <linux/err.h> | 12 | #include <linux/err.h> |
10 | #include <asm/ccwdev.h> | 13 | #include <asm/ccwdev.h> |
@@ -323,7 +326,21 @@ void ccw_request_timeout(struct ccw_device *cdev) | |||
323 | { | 326 | { |
324 | struct subchannel *sch = to_subchannel(cdev->dev.parent); | 327 | struct subchannel *sch = to_subchannel(cdev->dev.parent); |
325 | struct ccw_request *req = &cdev->private->req; | 328 | struct ccw_request *req = &cdev->private->req; |
326 | int rc; | 329 | int rc = -ENODEV, chp; |
330 | |||
331 | if (cio_update_schib(sch)) | ||
332 | goto err; | ||
333 | |||
334 | for (chp = 0; chp < 8; chp++) { | ||
335 | if ((0x80 >> chp) & sch->schib.pmcw.lpum) | ||
336 | pr_warning("%s: No interrupt was received within %lus " | ||
337 | "(CS=%02x, DS=%02x, CHPID=%x.%02x)\n", | ||
338 | dev_name(&cdev->dev), req->timeout / HZ, | ||
339 | scsw_cstat(&sch->schib.scsw), | ||
340 | scsw_dstat(&sch->schib.scsw), | ||
341 | sch->schid.cssid, | ||
342 | sch->schib.pmcw.chpid[chp]); | ||
343 | } | ||
327 | 344 | ||
328 | if (!ccwreq_next_path(cdev)) { | 345 | if (!ccwreq_next_path(cdev)) { |
329 | /* set the final return code for this request */ | 346 | /* set the final return code for this request */ |
@@ -342,7 +359,7 @@ err: | |||
342 | * ccw_request_notoper - notoper handler for I/O request procedure | 359 | * ccw_request_notoper - notoper handler for I/O request procedure |
343 | * @cdev: ccw device | 360 | * @cdev: ccw device |
344 | * | 361 | * |
345 | * Handle timeout during I/O request procedure. | 362 | * Handle notoper during I/O request procedure. |
346 | */ | 363 | */ |
347 | void ccw_request_notoper(struct ccw_device *cdev) | 364 | void ccw_request_notoper(struct ccw_device *cdev) |
348 | { | 365 | { |