Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 75a1c61b authored by Sebastian Ott's avatar Sebastian Ott Committed by Martin Schwidefsky
Browse files

[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: default avatarSebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 017ec183
Loading
Loading
Loading
Loading
+20 −3
Original line number Diff line number Diff line
/*
 *  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 @@ void ccw_request_timeout(struct ccw_device *cdev)
 * 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)
{