Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b32ecdb7257821e5e42d9b9b2a427b02c89f85e7
Commit:     b32ecdb7257821e5e42d9b9b2a427b02c89f85e7
Parent:     591bb4f637e48950d35e2ca01e6b962c519d96e5
Author:     Heiko Carstens <[EMAIL PROTECTED]>
AuthorDate: Tue Feb 19 15:29:30 2008 +0100
Committer:  Martin Schwidefsky <[EMAIL PROTECTED]>
CommitDate: Tue Feb 19 15:29:34 2008 +0100

    [S390] qdio: fix qdio_activate timeout handling.
    
    Current code in qdio_activate waits for at least 5 seconds
    until it returns. It may return earlier if an error occurs,
    but not if everything is ok. This large timeout value
    became visible with commit dfa77f611ff295598e218aa0eb6efa73a5cf26d0
    "qdio: set QDIO_ACTIVATE_TIMEOUT to 5s", which intended to
    fix the timeout value which was zero. In turn setting an
    FCP adapter online took 5 seconds.
    
    In practice waiting for 5ms before continuing is sufficient
    as pointed out by Utz Bacher and Cornelia Huck.
    
    Cc: Utz Bacher <[EMAIL PROTECTED]>
    Cc: Jan Glauber <[EMAIL PROTECTED]>
    Cc: Ursula Braun <[EMAIL PROTECTED]>
    Cc: Martin Peschke <[EMAIL PROTECTED]>
    Acked-by: Cornelia Huck <[EMAIL PROTECTED]>
    Signed-off-by: Heiko Carstens <[EMAIL PROTECTED]>
    Signed-off-by: Martin Schwidefsky <[EMAIL PROTECTED]>
---
 drivers/s390/cio/qdio.c |   10 ++--------
 drivers/s390/cio/qdio.h |    2 +-
 2 files changed, 3 insertions(+), 9 deletions(-)

diff --git a/drivers/s390/cio/qdio.c b/drivers/s390/cio/qdio.c
index 097fc09..cd9cfc1 100644
--- a/drivers/s390/cio/qdio.c
+++ b/drivers/s390/cio/qdio.c
@@ -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>
@@ -3332,13 +3332,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:
diff --git a/drivers/s390/cio/qdio.h b/drivers/s390/cio/qdio.h
index 37870e4..da8a272 100644
--- a/drivers/s390/cio/qdio.h
+++ b/drivers/s390/cio/qdio.h
@@ -57,10 +57,10 @@
                                            of the queue to 0 */
 
 #define QDIO_ESTABLISH_TIMEOUT (1*HZ)
-#define QDIO_ACTIVATE_TIMEOUT (5*HZ)
 #define QDIO_CLEANUP_CLEAR_TIMEOUT (20*HZ)
 #define QDIO_CLEANUP_HALT_TIMEOUT (10*HZ)
 #define QDIO_FORCE_CHECK_TIMEOUT (10*HZ)
+#define QDIO_ACTIVATE_TIMEOUT (5) /* 5 ms */
 
 enum qdio_irq_states {
        QDIO_IRQ_STATE_INACTIVE,
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to