This commit was manufactured by cvs2svn to create tag
[linux-2.6.git] / drivers / s390 / cio / device_pgid.c
index 7a80801..35ceeac 100644 (file)
@@ -143,14 +143,15 @@ ccw_device_sense_pgid_irq(struct ccw_device *cdev, enum dev_event dev_event)
        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)
@@ -309,11 +310,13 @@ ccw_device_verify_irq(struct ccw_device *cdev, enum dev_event dev_event)
        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)
@@ -394,13 +397,10 @@ ccw_device_disband_irq(struct ccw_device *cdev, enum dev_event dev_event)
        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);