If qdio_cancel_ccw() times out (or is interrupted) before the interrupt
for the {halt,clear} action arrives, report this back to the caller as
an error.
Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
Reviewed-by: Benjamin Block <bblock@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
static int qdio_cancel_ccw(struct qdio_irq *irq, int how)
{
struct ccw_device *cdev = irq->cdev;
+ long timeout;
int rc;
spin_lock_irq(get_ccwdev_lock(cdev));
return rc;
}
- wait_event_interruptible_timeout(cdev->private->wait_q,
- irq->state == QDIO_IRQ_STATE_INACTIVE ||
- irq->state == QDIO_IRQ_STATE_ERR,
- 10 * HZ);
+ timeout = wait_event_interruptible_timeout(cdev->private->wait_q,
+ irq->state == QDIO_IRQ_STATE_INACTIVE ||
+ irq->state == QDIO_IRQ_STATE_ERR,
+ 10 * HZ);
+ if (timeout <= 0)
+ rc = (timeout == -ERESTARTSYS) ? -EINTR : -ETIME;
- return 0;
+ return rc;
}
/**