Skip to content

Commit

Permalink
[S390] Add timeouts during sense PGID, path verification and disband …
Browse files Browse the repository at this point in the history
…PGID.

While the machine owns us an interrupt in these cases (and we should get
one), reality isn't always like that...

Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
  • Loading branch information
Cornelia Huck authored and Martin Schwidefsky committed Oct 4, 2006
1 parent b05e370 commit f1ee328
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 0 deletions.
2 changes: 2 additions & 0 deletions drivers/s390/cio/device_fsm.c
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,8 @@ ccw_device_done(struct ccw_device *cdev, int state)

sch = to_subchannel(cdev->dev.parent);

ccw_device_set_timeout(cdev, 0);

if (state != DEV_STATE_ONLINE)
cio_disable_subchannel(sch);

Expand Down
3 changes: 3 additions & 0 deletions drivers/s390/cio/device_ops.c
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,9 @@ ccw_device_call_handler(struct ccw_device *cdev)
(stctl & SCSW_STCTL_PRIM_STATUS)))
return 0;

/* Clear pending timers for device driver initiated I/O. */
if (ending_status)
ccw_device_set_timeout(cdev, 0);
/*
* Now we are ready to call the device driver interrupt handler.
*/
Expand Down
8 changes: 8 additions & 0 deletions drivers/s390/cio/device_pgid.c
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,9 @@ ccw_device_sense_pgid_start(struct ccw_device *cdev)
{
int ret;

/* Set a timeout of 60s */
ccw_device_set_timeout(cdev, 60*HZ);

cdev->private->state = DEV_STATE_SENSE_PGID;
cdev->private->imask = 0x80;
cdev->private->iretry = 5;
Expand Down Expand Up @@ -480,6 +483,8 @@ ccw_device_verify_start(struct ccw_device *cdev)
ccw_device_verify_done(cdev, -ENODEV);
return;
}
/* After 60s path verification is considered to have failed. */
ccw_device_set_timeout(cdev, 60*HZ);
__ccw_device_verify_start(cdev);
}

Expand Down Expand Up @@ -554,6 +559,9 @@ ccw_device_disband_irq(struct ccw_device *cdev, enum dev_event dev_event)
void
ccw_device_disband_start(struct ccw_device *cdev)
{
/* After 60s disbanding is considered to have failed. */
ccw_device_set_timeout(cdev, 60*HZ);

cdev->private->flags.pgid_single = 0;
cdev->private->iretry = 5;
cdev->private->imask = 0x80;
Expand Down

0 comments on commit f1ee328

Please sign in to comment.