aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/s390/cio/device_fsm.c2
-rw-r--r--drivers/s390/cio/device_ops.c3
-rw-r--r--drivers/s390/cio/device_pgid.c8
3 files changed, 13 insertions, 0 deletions
diff --git a/drivers/s390/cio/device_fsm.c b/drivers/s390/cio/device_fsm.c
index dace46fc32e8..b67620208f36 100644
--- a/drivers/s390/cio/device_fsm.c
+++ b/drivers/s390/cio/device_fsm.c
@@ -349,6 +349,8 @@ ccw_device_done(struct ccw_device *cdev, int state)
349 349
350 sch = to_subchannel(cdev->dev.parent); 350 sch = to_subchannel(cdev->dev.parent);
351 351
352 ccw_device_set_timeout(cdev, 0);
353
352 if (state != DEV_STATE_ONLINE) 354 if (state != DEV_STATE_ONLINE)
353 cio_disable_subchannel(sch); 355 cio_disable_subchannel(sch);
354 356
diff --git a/drivers/s390/cio/device_ops.c b/drivers/s390/cio/device_ops.c
index 93a897eebfff..e7eeaf1c1826 100644
--- a/drivers/s390/cio/device_ops.c
+++ b/drivers/s390/cio/device_ops.c
@@ -216,6 +216,9 @@ ccw_device_call_handler(struct ccw_device *cdev)
216 (stctl & SCSW_STCTL_PRIM_STATUS))) 216 (stctl & SCSW_STCTL_PRIM_STATUS)))
217 return 0; 217 return 0;
218 218
219 /* Clear pending timers for device driver initiated I/O. */
220 if (ending_status)
221 ccw_device_set_timeout(cdev, 0);
219 /* 222 /*
220 * Now we are ready to call the device driver interrupt handler. 223 * Now we are ready to call the device driver interrupt handler.
221 */ 224 */
diff --git a/drivers/s390/cio/device_pgid.c b/drivers/s390/cio/device_pgid.c
index 8ca2d078848c..84917b39de45 100644
--- a/drivers/s390/cio/device_pgid.c
+++ b/drivers/s390/cio/device_pgid.c
@@ -96,6 +96,9 @@ ccw_device_sense_pgid_start(struct ccw_device *cdev)
96{ 96{
97 int ret; 97 int ret;
98 98
99 /* Set a timeout of 60s */
100 ccw_device_set_timeout(cdev, 60*HZ);
101
99 cdev->private->state = DEV_STATE_SENSE_PGID; 102 cdev->private->state = DEV_STATE_SENSE_PGID;
100 cdev->private->imask = 0x80; 103 cdev->private->imask = 0x80;
101 cdev->private->iretry = 5; 104 cdev->private->iretry = 5;
@@ -480,6 +483,8 @@ ccw_device_verify_start(struct ccw_device *cdev)
480 ccw_device_verify_done(cdev, -ENODEV); 483 ccw_device_verify_done(cdev, -ENODEV);
481 return; 484 return;
482 } 485 }
486 /* After 60s path verification is considered to have failed. */
487 ccw_device_set_timeout(cdev, 60*HZ);
483 __ccw_device_verify_start(cdev); 488 __ccw_device_verify_start(cdev);
484} 489}
485 490
@@ -554,6 +559,9 @@ ccw_device_disband_irq(struct ccw_device *cdev, enum dev_event dev_event)
554void 559void
555ccw_device_disband_start(struct ccw_device *cdev) 560ccw_device_disband_start(struct ccw_device *cdev)
556{ 561{
562 /* After 60s disbanding is considered to have failed. */
563 ccw_device_set_timeout(cdev, 60*HZ);
564
557 cdev->private->flags.pgid_single = 0; 565 cdev->private->flags.pgid_single = 0;
558 cdev->private->iretry = 5; 566 cdev->private->iretry = 5;
559 cdev->private->imask = 0x80; 567 cdev->private->imask = 0x80;