From 9bd7839d9fd2929c930e9af79953806e0a347d9d Mon Sep 17 00:00:00 2001 From: Cornelia Huck Date: Fri, 24 Mar 2006 03:15:12 -0800 Subject: [PATCH] --- yaml --- r: 23363 b: refs/heads/master c: 3ba1998e90239ed0d7af918998bc866fa77303eb h: refs/heads/master i: 23361: d7bd5b447ea40e6fbe70ef6b5bb4de48f1bb730b 23359: 2e1d20dfe89a905bd01b7432ca3fba9a58dc9dd8 v: v3 --- [refs] | 2 +- trunk/drivers/s390/cio/device_fsm.c | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index f8e695c31511..c27afd66438e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3d1712c91df01d2573b934e972e231e8edb102c7 +refs/heads/master: 3ba1998e90239ed0d7af918998bc866fa77303eb diff --git a/trunk/drivers/s390/cio/device_fsm.c b/trunk/drivers/s390/cio/device_fsm.c index b302779e7cff..180b3bf8b90d 100644 --- a/trunk/drivers/s390/cio/device_fsm.c +++ b/trunk/drivers/s390/cio/device_fsm.c @@ -827,6 +827,17 @@ ccw_device_w4sense(struct ccw_device *cdev, enum dev_event dev_event) } return; } + /* + * Check if a halt or clear has been issued in the meanwhile. If yes, + * only deliver the halt/clear interrupt to the device driver as if it + * had killed the original request. + */ + if (irb->scsw.fctl & (SCSW_FCTL_CLEAR_FUNC | SCSW_FCTL_HALT_FUNC)) { + cdev->private->flags.dosense = 0; + memset(&cdev->private->irb, 0, sizeof(struct irb)); + ccw_device_accumulate_irb(cdev, irb); + goto call_handler; + } /* Add basic sense info to irb. */ ccw_device_accumulate_basic_sense(cdev, irb); if (cdev->private->flags.dosense) { @@ -834,6 +845,7 @@ ccw_device_w4sense(struct ccw_device *cdev, enum dev_event dev_event) ccw_device_do_sense(cdev, irb); return; } +call_handler: cdev->private->state = DEV_STATE_ONLINE; /* Call the handler. */ if (ccw_device_call_handler(cdev) && cdev->private->flags.doverify)