int ret;
irb = (struct irb *) __LC_IRB;
- /* Retry sense pgid for cc=1. */
+ /*
+ * Unsolicited interrupts may pertain to an earlier status pending or
+ * busy condition on the subchannel. Retry sense pgid.
+ */
if (irb->scsw.stctl ==
(SCSW_STCTL_STATUS_PEND | SCSW_STCTL_ALERT_STATUS)) {
- if (irb->scsw.cc == 1) {
- ret = __ccw_device_sense_pgid_start(cdev);
- if (ret && ret != -EBUSY)
- ccw_device_sense_pgid_done(cdev, ret);
- }
+ ret = __ccw_device_sense_pgid_start(cdev);
+ if (ret && ret != -EBUSY)
+ ccw_device_sense_pgid_done(cdev, ret);
return;
}
if (ccw_device_accumulate_and_sense(cdev, irb) != 0)
struct irb *irb;
irb = (struct irb *) __LC_IRB;
- /* Retry set pgid for cc=1. */
+ /*
+ * Unsolicited interrupts may pertain to an earlier status pending or
+ * busy condition on the subchannel. Restart path verification.
+ */
if (irb->scsw.stctl ==
(SCSW_STCTL_STATUS_PEND | SCSW_STCTL_ALERT_STATUS)) {
- if (irb->scsw.cc == 1)
- __ccw_device_verify_start(cdev);
+ __ccw_device_verify_start(cdev);
return;
}
if (ccw_device_accumulate_and_sense(cdev, irb) != 0)
int ret;
irb = (struct irb *) __LC_IRB;
- /* Retry set pgid for cc=1. */
+ /* Ignore unsolicited interrupts. */
if (irb->scsw.stctl ==
- (SCSW_STCTL_STATUS_PEND | SCSW_STCTL_ALERT_STATUS)) {
- if (irb->scsw.cc == 1)
- __ccw_device_disband_start(cdev);
+ (SCSW_STCTL_STATUS_PEND | SCSW_STCTL_ALERT_STATUS))
return;
- }
if (ccw_device_accumulate_and_sense(cdev, irb) != 0)
return;
sch = to_subchannel(cdev->dev.parent);