提交 75a1c61b 编写于 作者: S Sebastian Ott 提交者: Martin Schwidefsky

[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: NSebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
上级 017ec183
/* /*
* Handling of internal CCW device requests. * Handling of internal CCW device requests.
* *
* Copyright IBM Corp. 2009 * Copyright IBM Corp. 2009, 2011
* Author(s): Peter Oberparleiter <peter.oberparleiter@de.ibm.com> * 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/types.h>
#include <linux/err.h> #include <linux/err.h>
#include <asm/ccwdev.h> #include <asm/ccwdev.h>
...@@ -323,7 +326,21 @@ void ccw_request_timeout(struct ccw_device *cdev) ...@@ -323,7 +326,21 @@ void ccw_request_timeout(struct ccw_device *cdev)
{ {
struct subchannel *sch = to_subchannel(cdev->dev.parent); struct subchannel *sch = to_subchannel(cdev->dev.parent);
struct ccw_request *req = &cdev->private->req; 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)) { if (!ccwreq_next_path(cdev)) {
/* set the final return code for this request */ /* set the final return code for this request */
...@@ -342,7 +359,7 @@ void ccw_request_timeout(struct ccw_device *cdev) ...@@ -342,7 +359,7 @@ void ccw_request_timeout(struct ccw_device *cdev)
* ccw_request_notoper - notoper handler for I/O request procedure * ccw_request_notoper - notoper handler for I/O request procedure
* @cdev: ccw device * @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) void ccw_request_notoper(struct ccw_device *cdev)
{ {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册