aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390
diff options
context:
space:
mode:
authorSebastian Ott <sebott@linux.vnet.ibm.com>2011-10-30 10:16:34 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2011-10-30 10:16:41 -0400
commit75a1c61b434759bf8f2c0118151713b010b44705 (patch)
tree2fc9367c5120deccac85ab524bcc111ca9e049c1 /drivers/s390
parent017ec18360c9894d11f1a2ba5d69f7786732e07a (diff)
[S390] cio: add message for timeouts on internal I/O
Print a message in case we do not receive an IRQ in time (for internal I/O). Also print the ID of the last used channel path, since it is possible that not the device itself but this specific path might have a defect. Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com> Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390')
-rw-r--r--drivers/s390/cio/ccwreq.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/drivers/s390/cio/ccwreq.c b/drivers/s390/cio/ccwreq.c
index d15f8b4d78b..5156264d0c7 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 */
347void ccw_request_notoper(struct ccw_device *cdev) 364void ccw_request_notoper(struct ccw_device *cdev)
348{ 365{