diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/s390/cio/device_fsm.c | 2 | ||||
| -rw-r--r-- | drivers/s390/cio/device_ops.c | 3 | ||||
| -rw-r--r-- | drivers/s390/cio/device_pgid.c | 8 |
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) | |||
| 554 | void | 559 | void |
| 555 | ccw_device_disband_start(struct ccw_device *cdev) | 560 | ccw_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; |
