staging: serqt_usb2: don't use sleep_on
authorArnd Bergmann <arnd@arndb.de>
Thu, 2 Jan 2014 12:07:33 +0000 (13:07 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 9 Jan 2014 18:41:44 +0000 (10:41 -0800)
sleep_on and related functions are going away and should not be used
in this driver any more.

This removes the call to interruptible_sleep_on for a wait queue that
is never woken up, and replaces an interruptible_sleep_on_timeout
call with the equivalent wait_event_interruptible_timeout() to
avoid a small race.

Both call sites still look fishy and need more work.

Signed-off-by: Arnd Bergmann <arndb.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: devel@driverdev.osuosl.org
Cc: Bill Pemberton <wfp5p@virginia.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/serqt_usb2/serqt_usb2.c

index 4293c90..f0fcbf7 100644 (file)
@@ -969,17 +969,11 @@ static void qt_block_until_empty(struct tty_struct *tty,
 {
        int timeout = HZ / 10;
        int wait = 30;
-       int count;
-
-       while (1) {
-
-               count = qt_chars_in_buffer(tty);
-
-               if (count <= 0)
-                       return;
-
-               interruptible_sleep_on_timeout(&qt_port->wait, timeout);
 
+       /* returns if we get a signal, an error, or the buffer is empty */
+       while (wait_event_interruptible_timeout(qt_port->wait,
+                                       qt_chars_in_buffer(tty) <= 0,
+                                       timeout) == 0) {
                wait--;
                if (wait == 0) {
                        dev_dbg(&qt_port->port->dev, "%s - TIMEOUT", __func__);
@@ -1136,7 +1130,10 @@ static int qt_ioctl(struct tty_struct *tty,
 
        if (cmd == TIOCMIWAIT) {
                while (qt_port != NULL) {
+#if 0
+                       /* this never wakes up */
                        interruptible_sleep_on(&qt_port->msr_wait);
+#endif
                        if (signal_pending(current))
                                return -ERESTARTSYS;
                        else {