Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=2c7fea992104b5ca2b510d585a27b3ba018b795f
Commit:     2c7fea992104b5ca2b510d585a27b3ba018b795f
Parent:     875b206b5f4971cc990a12e891f5519f0f6772a9
Author:     Jiri Slaby <[EMAIL PROTECTED]>
AuthorDate: Tue May 8 00:36:51 2007 -0700
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Tue May 8 11:15:25 2007 -0700

    Char: cyclades, remove sleep_on
    
    convert to wait_* and completion
    
    Signed-off-by: Jiri Slaby <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 drivers/char/cyclades.c  |   45 ++++++++++++++++-----------------------------
 include/linux/cyclades.h |    2 +-
 2 files changed, 17 insertions(+), 30 deletions(-)

diff --git a/drivers/char/cyclades.c b/drivers/char/cyclades.c
index 9bec4ef..c236e9f 100644
--- a/drivers/char/cyclades.c
+++ b/drivers/char/cyclades.c
@@ -947,7 +947,7 @@ do_softint(struct work_struct *work)
        tty_wakeup(tty);
 #ifdef Z_WAKE
        if (test_and_clear_bit(Cy_EVENT_SHUTDOWN_WAKEUP, &info->event))
-               wake_up_interruptible(&info->shutdown_wait);
+               complete(&info->shutdown_wait);
 #endif
 } /* do_softint */
 
@@ -2324,9 +2324,8 @@ block_til_ready(struct tty_struct *tty, struct file *filp,
         * until it's done, and then try again.
         */
        if (tty_hung_up_p(filp) || (info->flags & ASYNC_CLOSING)) {
-               if (info->flags & ASYNC_CLOSING) {
-                       interruptible_sleep_on(&info->close_wait);
-               }
+               wait_event_interruptible(info->close_wait,
+                               !(info->flags & ASYNC_CLOSING));
                return (info->flags & ASYNC_HUP_NOTIFY) ? -EAGAIN: -ERESTARTSYS;
        }
 
@@ -2597,8 +2596,8 @@ static int cy_open(struct tty_struct *tty, struct file 
*filp)
         * If the port is the middle of closing, bail out now
         */
        if (tty_hung_up_p(filp) || (info->flags & ASYNC_CLOSING)) {
-               if (info->flags & ASYNC_CLOSING)
-                       interruptible_sleep_on(&info->close_wait);
+               wait_event_interruptible(info->close_wait,
+                               !(info->flags & ASYNC_CLOSING));
                return (info->flags & ASYNC_HUP_NOTIFY) ? -EAGAIN: -ERESTARTSYS;
        }
 
@@ -2805,7 +2804,7 @@ static void cy_close(struct tty_struct *tty, struct file 
*filp)
                                        "ttyC%d was %x\n", info->line, retval);
                        }
                        CY_UNLOCK(info, flags);
-                       interruptible_sleep_on(&info->shutdown_wait);
+                       wait_for_completion_interruptible(&info->shutdown_wait);
                        CY_LOCK(info, flags);
                }
 #endif
@@ -4091,32 +4090,20 @@ cy_ioctl(struct tty_struct *tty, struct file *file,
        case TIOCMIWAIT:
                CY_LOCK(info, flags);
                /* note the counters on entry */
-               cprev = info->icount;
+               cnow = info->icount;
                CY_UNLOCK(info, flags);
-               while (1) {
-                       interruptible_sleep_on(&info->delta_msr_wait);
-                       /* see if a signal did it */
-                       if (signal_pending(current)) {
-                               return -ERESTARTSYS;
-                       }
-
+               ret_val = wait_event_interruptible(info->delta_msr_wait, ({
+                       cprev = cnow;
                        CY_LOCK(info, flags);
                        cnow = info->icount;    /* atomic copy */
                        CY_UNLOCK(info, flags);
 
-                       if (cnow.rng == cprev.rng && cnow.dsr == cprev.dsr &&
-                           cnow.dcd == cprev.dcd && cnow.cts == cprev.cts) {
-                               return -EIO;    /* no change => error */
-                       }
-                       if (((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) ||
-                           ((arg & TIOCM_DSR) && (cnow.dsr != cprev.dsr)) ||
-                           ((arg & TIOCM_CD) && (cnow.dcd != cprev.dcd)) ||
-                           ((arg & TIOCM_CTS) && (cnow.cts != cprev.cts))) {
-                               return 0;
-                       }
-                       cprev = cnow;
-               }
-               /* NOTREACHED */
+                       ((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) ||
+                       ((arg & TIOCM_DSR) && (cnow.dsr != cprev.dsr)) ||
+                       ((arg & TIOCM_CD)  && (cnow.dcd != cprev.dcd)) ||
+                       ((arg & TIOCM_CTS) && (cnow.cts != cprev.cts));
+               }));
+               break;
 
                /*
                 * Get counter of input serial line interrupts (DCD,RI,DSR,CTS)
@@ -4534,7 +4521,7 @@ static void __devinit cy_init_card(struct cyclades_card 
*cinfo)
                INIT_WORK(&info->tqueue, do_softint);
                init_waitqueue_head(&info->open_wait);
                init_waitqueue_head(&info->close_wait);
-               init_waitqueue_head(&info->shutdown_wait);
+               init_completion(&info->shutdown_wait);
                init_waitqueue_head(&info->delta_msr_wait);
 
                if (IS_CYC_Z(*cinfo)) {
diff --git a/include/linux/cyclades.h b/include/linux/cyclades.h
index 121d64c..cdd7739 100644
--- a/include/linux/cyclades.h
+++ b/include/linux/cyclades.h
@@ -588,7 +588,7 @@ struct cyclades_port {
        struct work_struct      tqueue;
        wait_queue_head_t       open_wait;
        wait_queue_head_t       close_wait;
-       wait_queue_head_t       shutdown_wait;
+       struct completion       shutdown_wait;
        wait_queue_head_t       delta_msr_wait;
        int throttle;
 };
-
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