]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/s390/cio/qdio.c
[S390] qdio: FCP/SCSI write I/O stagnates on LPAR
[linux-2.6-omap-h63xx.git] / drivers / s390 / cio / qdio.c
index e2a781b6b21db091af54b3ba5b8fd691a33b0740..2b5bfb7c69e5c81d6d8ab74c6fd011dcb6fad7bb 100644 (file)
@@ -32,7 +32,7 @@
 
 #include <linux/module.h>
 #include <linux/init.h>
-
+#include <linux/delay.h>
 #include <linux/slab.h>
 #include <linux/kernel.h>
 #include <linux/proc_fs.h>
@@ -1215,9 +1215,6 @@ tiqdio_is_inbound_q_done(struct qdio_q *q)
 
        if (!no_used)
                return 1;
-       if (!q->siga_sync && !irq->is_qebsm)
-               /* we'll check for more primed buffers in qeth_stop_polling */
-               return 0;
        if (irq->is_qebsm) {
                count = 1;
                start_buf = q->first_to_check;
@@ -3189,13 +3186,11 @@ qdio_establish(struct qdio_initialize *init_data)
        spin_lock_irqsave(get_ccwdev_lock(cdev),saveflags);
 
        ccw_device_set_options_mask(cdev, 0);
-       result=ccw_device_start_timeout(cdev,&irq_ptr->ccw,
-                                       QDIO_DOING_ESTABLISH,0, 0,
-                                       QDIO_ESTABLISH_TIMEOUT);
+       result = ccw_device_start(cdev, &irq_ptr->ccw,
+                               QDIO_DOING_ESTABLISH, 0, 0);
        if (result) {
-               result2=ccw_device_start_timeout(cdev,&irq_ptr->ccw,
-                                                QDIO_DOING_ESTABLISH,0,0,
-                                                QDIO_ESTABLISH_TIMEOUT);
+               result2 = ccw_device_start(cdev, &irq_ptr->ccw,
+                                       QDIO_DOING_ESTABLISH, 0, 0);
                sprintf(dbf_text,"eq:io%4x",result);
                QDIO_DBF_TEXT2(1,setup,dbf_text);
                if (result2) {
@@ -3219,10 +3214,10 @@ qdio_establish(struct qdio_initialize *init_data)
                return result;
        }
        
-       /* Timeout is cared for already by using ccw_device_start_timeout(). */
-       wait_event_interruptible(cdev->private->wait_q,
-                irq_ptr->state == QDIO_IRQ_STATE_ESTABLISHED ||
-                irq_ptr->state == QDIO_IRQ_STATE_ERR);
+       wait_event_interruptible_timeout(cdev->private->wait_q,
+               irq_ptr->state == QDIO_IRQ_STATE_ESTABLISHED ||
+               irq_ptr->state == QDIO_IRQ_STATE_ERR,
+               QDIO_ESTABLISH_TIMEOUT);
 
        if (irq_ptr->state == QDIO_IRQ_STATE_ESTABLISHED)
                result = 0;
@@ -3334,13 +3329,7 @@ qdio_activate(struct ccw_device *cdev, int flags)
                }
        }
 
-       wait_event_interruptible_timeout(cdev->private->wait_q,
-                                        ((irq_ptr->state ==
-                                         QDIO_IRQ_STATE_STOPPED) ||
-                                         (irq_ptr->state ==
-                                          QDIO_IRQ_STATE_ERR)),
-                                        QDIO_ACTIVATE_TIMEOUT);
-
+       msleep(QDIO_ACTIVATE_TIMEOUT);
        switch (irq_ptr->state) {
        case QDIO_IRQ_STATE_STOPPED:
        case QDIO_IRQ_STATE_ERR: