ChangeSet 1.2020.1.34, 2005/03/07 22:53:26-08:00, [EMAIL PROTECTED]

[PATCH] usb/io_edgeport: remove interruptible_sleep_on_timeout() usage

On Tue, Feb 01, 2005 at 11:43:08AM -0800, Nishanth Aravamudan wrote:
> This should fix the behavior of the previous patch (probably not noticed yet).
> The wake_up*() was not matched properly in the first patch (fixed below). 
> Please
> consider reverting the previous patch and applying this one instead.

Directly use wait-queues to remove remaining callers of
interruptible_sleep_on_timeout(). Signals are not checked (except in one
case) in the current code, so interruptible should not be necessary.
Modify the wake_up*() calls to match the wait-queue usage. There were
some naming conflicts, which I tried to resolve appropriately. The final
replacement is within a #if 0 / #endif section of code, but in case that
code is ever used again, I would prefer it had the correct interface :)

Signed-off-by: Nishanth Aravamudan <[EMAIL PROTECTED]>
Signed-off-by: Greg Kroah-Hartman <[EMAIL PROTECTED]>


 drivers/usb/serial/io_edgeport.c |   42 ++++++++++++++++++++++-----------------
 1 files changed, 24 insertions(+), 18 deletions(-)


diff -Nru a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c
--- a/drivers/usb/serial/io_edgeport.c  2005-03-08 16:53:05 -08:00
+++ b/drivers/usb/serial/io_edgeport.c  2005-03-08 16:53:05 -08:00
@@ -972,7 +972,7 @@
 
        /* we have completed the command */
        edge_port->commandPending = FALSE;
-       wake_up_interruptible(&edge_port->wait_command);
+       wake_up(&edge_port->wait_command);
 }
 
 
@@ -1125,9 +1125,10 @@
  ************************************************************************/
 static void block_until_chase_response(struct edgeport_port *edge_port)
 {
+       DEFINE_WAIT(wait);
        __u16 lastCredits;
        int timeout = 1*HZ;
-       int wait = 10;
+       int loop = 10;
 
        while (1) {
                // Save Last credits
@@ -1145,12 +1146,14 @@
                }
 
                // Block the thread for a while
-               interruptible_sleep_on_timeout (&edge_port->wait_chase, 
timeout);
+               prepare_to_wait(&edge_port->wait_chase, &wait, 
TASK_UNINTERRUPTIBLE);
+               schedule_timeout(timeout);
+               finish_wait(&edge_port->wait_chase, &wait);
 
                if (lastCredits == edge_port->txCredits) {
                        // No activity.. count down.
-                       wait--;
-                       if (wait == 0) {
+                       loop--;
+                       if (loop == 0) {
                                edge_port->chaseResponsePending = FALSE;
                                dbg("%s - Chase TIMEOUT", __FUNCTION__);
                                return;
@@ -1158,7 +1161,7 @@
                } else {
                        // Reset timout value back to 10 seconds
                        dbg("%s - Last %d, Current %d", __FUNCTION__, 
lastCredits, edge_port->txCredits);
-                       wait = 10;
+                       loop = 10;
                }
        }
 }
@@ -1176,10 +1179,11 @@
  ************************************************************************/
 static void block_until_tx_empty (struct edgeport_port *edge_port)
 {
+       DEFINE_WAIT(wait);
        struct TxFifo *fifo = &edge_port->txfifo;
        __u32 lastCount;
        int timeout = HZ/10;
-       int wait = 30;
+       int loop = 30;
 
        while (1) {
                // Save Last count
@@ -1192,20 +1196,22 @@
                }
 
                // Block the thread for a while
-               interruptible_sleep_on_timeout (&edge_port->wait_chase, 
timeout);
+               prepare_to_wait (&edge_port->wait_chase, &wait, 
TASK_UNINTERRUPTIBLE);
+               schedule_timeout(timeout);
+               finish_wait(&edge_port->wait_chase, &wait);
 
                dbg("%s wait", __FUNCTION__);
 
                if (lastCount == fifo->count) {
                        // No activity.. count down.
-                       wait--;
-                       if (wait == 0) {
+                       loop--;
+                       if (loop == 0) {
                                dbg("%s - TIMEOUT", __FUNCTION__);
                                return;
                        }
                } else {
                        // Reset timout value back to seconds
-                       wait = 30;
+                       loop = 30;
                }
        }
 }
@@ -1833,12 +1839,12 @@
  *****************************************************************************/
 static int edge_ioctl (struct usb_serial_port *port, struct file *file, 
unsigned int cmd, unsigned long arg)
 {
+       DEFINE_WAIT(wait);
        struct edgeport_port *edge_port = usb_get_serial_port_data(port);
        struct async_icount cnow;
        struct async_icount cprev;
        struct serial_icounter_struct icount;
 
-
        dbg("%s - port %d, cmd = 0x%x", __FUNCTION__, port->number, cmd);
 
        switch (cmd) {
@@ -1865,7 +1871,9 @@
                        dbg("%s (%d) TIOCMIWAIT", __FUNCTION__,  port->number);
                        cprev = edge_port->icount;
                        while (1) {
-                               
interruptible_sleep_on(&edge_port->delta_msr_wait);
+                               prepare_to_wait(&edge_port->delta_msr_wait, 
&wait, TASK_INTERRUPTIBLE);
+                               schedule();
+                               finish_wait(&edge_port->delta_msr_wait, &wait);
                                /* see if a signal did it */
                                if (signal_pending(current))
                                        return -ERESTARTSYS;
@@ -2105,7 +2113,7 @@
                                // We could choose to do something else when 
Byte3 says Timeout on Chase from Edgeport,
                                // like wait longer in 
block_until_chase_response, but for now we don't. 
                                edge_port->chaseResponsePending = FALSE;
-                               wake_up_interruptible (&edge_port->wait_chase);
+                               wake_up (&edge_port->wait_chase);
                                return;
 
                        case IOSP_EXT_STATUS_RX_CHECK_RSP:
@@ -2128,7 +2136,7 @@
                /* we have completed the open */
                edge_port->openPending = FALSE;
                edge_port->open = TRUE;
-               wake_up_interruptible(&edge_port->wait_open);
+               wake_up(&edge_port->wait_open);
                return;
        }
 
@@ -2497,9 +2505,7 @@
        // wait for command to finish
        timeout = COMMAND_TIMEOUT;
 #if 0
-       while (timeout && edge_port->commandPending == TRUE) {
-               timeout = interruptible_sleep_on_timeout 
(&edge_port->wait_command, timeout);
-       }
+       wait_event (&edge_port->wait_command, (edge_port->commandPending == 
FALSE));
 
        if (edge_port->commandPending == TRUE) {
                /* command timed out */



-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_ide95&alloc_id396&op=click
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to