|
@@ -1,10 +1,13 @@
|
|
|
/*
|
|
|
* Handling of internal CCW device requests.
|
|
|
*
|
|
|
- * Copyright IBM Corp. 2009
|
|
|
+ * Copyright IBM Corp. 2009, 2011
|
|
|
* Author(s): Peter Oberparleiter <peter.oberparleiter@de.ibm.com>
|
|
|
*/
|
|
|
|
|
|
+#define KMSG_COMPONENT "cio"
|
|
|
+#define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
|
|
|
+
|
|
|
#include <linux/types.h>
|
|
|
#include <linux/err.h>
|
|
|
#include <asm/ccwdev.h>
|
|
@@ -323,7 +326,21 @@ void ccw_request_timeout(struct ccw_device *cdev)
|
|
|
{
|
|
|
struct subchannel *sch = to_subchannel(cdev->dev.parent);
|
|
|
struct ccw_request *req = &cdev->private->req;
|
|
|
- int rc;
|
|
|
+ int rc = -ENODEV, chp;
|
|
|
+
|
|
|
+ if (cio_update_schib(sch))
|
|
|
+ goto err;
|
|
|
+
|
|
|
+ for (chp = 0; chp < 8; chp++) {
|
|
|
+ if ((0x80 >> chp) & sch->schib.pmcw.lpum)
|
|
|
+ pr_warning("%s: No interrupt was received within %lus "
|
|
|
+ "(CS=%02x, DS=%02x, CHPID=%x.%02x)\n",
|
|
|
+ dev_name(&cdev->dev), req->timeout / HZ,
|
|
|
+ scsw_cstat(&sch->schib.scsw),
|
|
|
+ scsw_dstat(&sch->schib.scsw),
|
|
|
+ sch->schid.cssid,
|
|
|
+ sch->schib.pmcw.chpid[chp]);
|
|
|
+ }
|
|
|
|
|
|
if (!ccwreq_next_path(cdev)) {
|
|
|
/* set the final return code for this request */
|
|
@@ -342,7 +359,7 @@ err:
|
|
|
* ccw_request_notoper - notoper handler for I/O request procedure
|
|
|
* @cdev: ccw device
|
|
|
*
|
|
|
- * Handle timeout during I/O request procedure.
|
|
|
+ * Handle notoper during I/O request procedure.
|
|
|
*/
|
|
|
void ccw_request_notoper(struct ccw_device *cdev)
|
|
|
{
|