here's the patch updating all serial drivers to correctly use GFP_ATOMIC
where necessary. in many cases, GFP_KERNEL was being used with kmalloc() in
functions which could be called in bh context. this has also been fixed.
a couple of points:
1.      some drivers, especially io_edgeport make use of helper functions which
        actually call usb_submit_urb(). even if one of the callers is bh/irq
        context callable, the helper function must use GFP_ATOMIC.
2.      digi_accelport submits most urbs under a spinlock, hence probably
        uses more GFP_ATOMIC than actually necessary.

ganesh

# This is a BitKeeper generated patch for the following project:
# Project Name: greg k-h's linux 2.5 USB kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
#                  ChangeSet    1.382   -> 1.383  
#       drivers/usb/serial/visor.c      1.21    -> 1.22   
#       drivers/usb/serial/pl2303.c     1.11    -> 1.12   
#       drivers/usb/serial/keyspan_pda.c        1.12    -> 1.13   
#       drivers/usb/serial/empeg.c      1.15    -> 1.16   
#       drivers/usb/serial/cyberjack.c  1.14    -> 1.15   
#       drivers/usb/serial/omninet.c    1.13    -> 1.14   
#       drivers/usb/serial/kl5kusb105.c 1.7     -> 1.8    
#       drivers/usb/serial/ftdi_sio.c   1.17    -> 1.18   
#       drivers/usb/serial/ir-usb.c     1.15    -> 1.16   
#       drivers/usb/serial/usbserial.c  1.21    -> 1.22   
#       drivers/usb/serial/io_edgeport.c        1.16    -> 1.17   
#       drivers/usb/serial/keyspan.c    1.19    -> 1.20   
#       drivers/usb/serial/digi_acceleport.c    1.11    -> 1.12   
#       drivers/usb/serial/mct_u232.c   1.15    -> 1.16   
#       drivers/usb/serial/ipaq.c       1.7     -> 1.8    
#       drivers/usb/serial/whiteheat.c  1.15    -> 1.16   
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/03/15      [EMAIL PROTECTED]       1.383
# Several functions in the serial drivers can be called from bottom
# half or interrupt context. They must use the GFP_ATOMIC flag for
# calls to kmalloc() and usb_submit_urb().
# 
# Functions which must use GFP_ATOMIC:
# 1. All *_callback() functions.
# 2. Any code which is inside a spinlock.
# 3. write(), throttle(), unthrottle(), which may be called by
#    the line discipline in bottom half context.
# 
# Functions which can use GFP_KERNEL:
# 1. open(), close(), startup(), shutdown(), set_termios().
# --------------------------------------------
#
diff -Nru a/drivers/usb/serial/cyberjack.c b/drivers/usb/serial/cyberjack.c
--- a/drivers/usb/serial/cyberjack.c    Fri Mar 15 01:35:34 2002
+++ b/drivers/usb/serial/cyberjack.c    Fri Mar 15 01:35:34 2002
@@ -262,7 +262,7 @@
                              port);
 
                /* send the data out the bulk port */
-               result = usb_submit_urb(port->write_urb, GFP_KERNEL);
+               result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
                if (result) {
                        err(__FUNCTION__ " - failed submitting write urb, error %d", 
result);
                        /* Throw away data. No better idea what to do with it. */
@@ -331,7 +331,7 @@
 
                if( !old_rdtodo ) {
                        port->read_urb->dev = port->serial->dev;
-                       result = usb_submit_urb(port->read_urb, GFP_KERNEL);
+                       result = usb_submit_urb(port->read_urb, GFP_ATOMIC);
                        if( result )
                                err(__FUNCTION__ " - failed resubmitting read urb, 
error %d", result);
                        dbg(__FUNCTION__ " - usb_submit_urb(read urb)");
@@ -387,7 +387,7 @@
        /* Continue to read if we have still urbs to do. */
        if( priv->rdtodo /* || (urb->actual_length==port->bulk_in_endpointAddress)*/ ) 
{
                port->read_urb->dev = port->serial->dev;
-               result = usb_submit_urb(port->read_urb, GFP_KERNEL);
+               result = usb_submit_urb(port->read_urb, GFP_ATOMIC);
                if (result)
                        err(__FUNCTION__ " - failed resubmitting read urb, error %d", 
result);
                dbg(__FUNCTION__ " - usb_submit_urb(read urb)");
@@ -440,7 +440,7 @@
                              port);
 
                /* send the data out the bulk port */
-               result = usb_submit_urb(port->write_urb, GFP_KERNEL);
+               result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
                if (result) {
                        err(__FUNCTION__ " - failed submitting write urb, error %d", 
result);
                        /* Throw away data. No better idea what to do with it. */
diff -Nru a/drivers/usb/serial/digi_acceleport.c b/drivers/usb/serial/digi_acceleport.c
--- a/drivers/usb/serial/digi_acceleport.c      Fri Mar 15 01:35:34 2002
+++ b/drivers/usb/serial/digi_acceleport.c      Fri Mar 15 01:35:34 2002
@@ -676,7 +676,7 @@
                oob_port->write_urb->transfer_buffer_length = len;
                oob_port->write_urb->dev = port->serial->dev;
 
-               if( (ret=usb_submit_urb(oob_port->write_urb, GFP_KERNEL)) == 0 ) {
+               if( (ret=usb_submit_urb(oob_port->write_urb, GFP_ATOMIC)) == 0 ) {
                        oob_priv->dp_write_urb_in_use = 1;
                        count -= len;
                        buf += len;
@@ -764,7 +764,7 @@
                }
                port->write_urb->dev = port->serial->dev;
 
-               if( (ret=usb_submit_urb(port->write_urb, GFP_KERNEL)) == 0 ) {
+               if( (ret=usb_submit_urb(port->write_urb, GFP_ATOMIC)) == 0 ) {
                        priv->dp_write_urb_in_use = 1;
                        priv->dp_out_buf_len = 0;
                        count -= len;
@@ -841,7 +841,7 @@
        oob_port->write_urb->transfer_buffer_length = 8;
        oob_port->write_urb->dev = port->serial->dev;
 
-       if( (ret=usb_submit_urb(oob_port->write_urb, GFP_KERNEL)) == 0 ) {
+       if( (ret=usb_submit_urb(oob_port->write_urb, GFP_ATOMIC)) == 0 ) {
                oob_priv->dp_write_urb_in_use = 1;
                port_priv->dp_modem_signals =
                        (port_priv->dp_modem_signals&~(TIOCM_DTR|TIOCM_RTS))
@@ -962,7 +962,7 @@
        /* restart read chain */
        if( priv->dp_throttle_restart ) {
                port->read_urb->dev = port->serial->dev;
-               ret = usb_submit_urb( port->read_urb, GFP_KERNEL );
+               ret = usb_submit_urb( port->read_urb, GFP_ATOMIC );
        }
 
        /* turn throttle off */
@@ -1323,7 +1323,7 @@
        /* copy in new data */
        memcpy( data, from_user ? user_buf : buf, new_len );
 
-       if( (ret=usb_submit_urb(port->write_urb, GFP_KERNEL)) == 0 ) {
+       if( (ret=usb_submit_urb(port->write_urb, GFP_ATOMIC)) == 0 ) {
                priv->dp_write_urb_in_use = 1;
                ret = new_len;
                priv->dp_out_buf_len = 0;
@@ -1399,7 +1399,7 @@
                memcpy( port->write_urb->transfer_buffer+2, priv->dp_out_buf,
                        priv->dp_out_buf_len );
 
-               if( (ret=usb_submit_urb(port->write_urb, GFP_KERNEL)) == 0 ) {
+               if( (ret=usb_submit_urb(port->write_urb, GFP_ATOMIC)) == 0 ) {
                        priv->dp_write_urb_in_use = 1;
                        priv->dp_out_buf_len = 0;
                }
@@ -1837,7 +1837,7 @@
 
        /* continue read */
        urb->dev = port->serial->dev;
-       if( (ret=usb_submit_urb(urb, GFP_KERNEL)) != 0 ) {
+       if( (ret=usb_submit_urb(urb, GFP_ATOMIC)) != 0 ) {
                err( __FUNCTION__ ": failed resubmitting urb, ret=%d, port=%d",
                        ret, priv->dp_port_num );
        }
diff -Nru a/drivers/usb/serial/empeg.c b/drivers/usb/serial/empeg.c
--- a/drivers/usb/serial/empeg.c        Fri Mar 15 01:35:34 2002
+++ b/drivers/usb/serial/empeg.c        Fri Mar 15 01:35:34 2002
@@ -256,7 +256,7 @@
                }
 
                if (urb->transfer_buffer == NULL) {
-                       urb->transfer_buffer = kmalloc (URB_TRANSFER_BUFFER_SIZE, 
GFP_KERNEL);
+                       urb->transfer_buffer = kmalloc (URB_TRANSFER_BUFFER_SIZE, 
+GFP_ATOMIC);
                        if (urb->transfer_buffer == NULL) {
                                err(__FUNCTION__" no more kernel memory...");
                                goto exit;
@@ -288,7 +288,7 @@
                urb->transfer_flags |= USB_QUEUE_BULK;
 
                /* send it down the pipe */
-               status = usb_submit_urb(urb, GFP_KERNEL);
+               status = usb_submit_urb(urb, GFP_ATOMIC);
                if (status) {
                        err(__FUNCTION__ " - usb_submit_urb(write bulk) failed with 
status = %d", status);
                        bytes_sent = status;
@@ -441,7 +441,7 @@
 
        port->read_urb->transfer_flags |= USB_QUEUE_BULK;
 
-       result = usb_submit_urb(port->read_urb, GFP_KERNEL);
+       result = usb_submit_urb(port->read_urb, GFP_ATOMIC);
 
        if (result)
                err(__FUNCTION__ " - failed resubmitting read urb, error %d", result);
@@ -466,7 +466,7 @@
 
        port->read_urb->dev = port->serial->dev;
 
-       result = usb_submit_urb(port->read_urb, GFP_KERNEL);
+       result = usb_submit_urb(port->read_urb, GFP_ATOMIC);
 
        if (result)
                err(__FUNCTION__ " - failed submitting read urb, error %d", result);
diff -Nru a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
--- a/drivers/usb/serial/ftdi_sio.c     Fri Mar 15 01:35:34 2002
+++ b/drivers/usb/serial/ftdi_sio.c     Fri Mar 15 01:35:34 2002
@@ -469,7 +469,7 @@
                      port->write_urb->transfer_buffer, count,
                      ftdi_sio_write_bulk_callback, port);
                
-       result = usb_submit_urb(port->write_urb, GFP_KERNEL);
+       result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
        if (result) {
                err(__FUNCTION__ " - failed submitting write urb, error %d", result);
                return 0;
@@ -631,7 +631,7 @@
                      port->read_urb->transfer_buffer, 
port->read_urb->transfer_buffer_length,
                      ftdi_sio_read_bulk_callback, port);
 
-       result = usb_submit_urb(port->read_urb, GFP_KERNEL);
+       result = usb_submit_urb(port->read_urb, GFP_ATOMIC);
        if (result)
                err(__FUNCTION__ " - failed resubmitting read urb, error %d", result);
 
diff -Nru a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c
--- a/drivers/usb/serial/io_edgeport.c  Fri Mar 15 01:35:34 2002
+++ b/drivers/usb/serial/io_edgeport.c  Fri Mar 15 01:35:34 2002
@@ -790,7 +790,7 @@
 
                                        /* we have pending bytes on the bulk in pipe, 
send a request */
                                        edge_serial->read_urb->dev = 
edge_serial->serial->dev;
-                                       result = usb_submit_urb(edge_serial->read_urb, 
GFP_KERNEL);
+                                       result = usb_submit_urb(edge_serial->read_urb, 
+GFP_ATOMIC);
                                        if (result) {
                                                dbg(__FUNCTION__" - 
usb_submit_urb(read bulk) failed with result = %d", result);
                                        }
@@ -867,7 +867,7 @@
 
                        /* there is, so resubmit our urb */
                        edge_serial->read_urb->dev = edge_serial->serial->dev;
-                       status = usb_submit_urb(edge_serial->read_urb, GFP_KERNEL);
+                       status = usb_submit_urb(edge_serial->read_urb, GFP_ATOMIC);
                        if (status) {
                                err(__FUNCTION__" - usb_submit_urb(read bulk) failed, 
status = %d", status);
                        }
@@ -1435,7 +1435,7 @@
 
        /* build the data header for the buffer and port that we are about to send out 
*/
        count = fifo->count;
-       buffer = kmalloc (count+2, GFP_KERNEL);
+       buffer = kmalloc (count+2, GFP_ATOMIC);
        if (buffer == NULL) {
                err(__FUNCTION__" - no more kernel memory...");
                edge_port->write_in_progress = FALSE;
@@ -1474,7 +1474,7 @@
        urb->transfer_flags |= USB_QUEUE_BULK;
 
        urb->dev = edge_serial->serial->dev;
-       status = usb_submit_urb(urb, GFP_KERNEL);
+       status = usb_submit_urb(urb, GFP_ATOMIC);
        if (status) {
                /* something went wrong */
                dbg(__FUNCTION__" - usb_submit_urb(write bulk) failed");
@@ -2431,7 +2431,7 @@
 
        dbg(__FUNCTION__" - %d, %d", command, param);
 
-       buffer =  kmalloc (10, GFP_KERNEL);
+       buffer =  kmalloc (10, GFP_ATOMIC);
        if (!buffer) {
                err(__FUNCTION__" - kmalloc(%d) failed.\n", 10);
                return -ENOMEM;
@@ -2467,7 +2467,7 @@
        usb_serial_debug_data (__FILE__, __FUNCTION__, length, buffer);
 
        /* Allocate our next urb */
-       urb = usb_alloc_urb (0, GFP_KERNEL);
+       urb = usb_alloc_urb (0, GFP_ATOMIC);
        if (!urb)
                return -ENOMEM;
 
@@ -2482,7 +2482,7 @@
        urb->transfer_flags |= USB_QUEUE_BULK;
 
        edge_port->commandPending = TRUE;
-       status = usb_submit_urb(urb, GFP_KERNEL);
+       status = usb_submit_urb(urb, GFP_ATOMIC);
 
        if (status) {
                /* something went wrong */
@@ -2532,7 +2532,7 @@
        }
 
        // Alloc memory for the string of commands.
-       cmdBuffer =  kmalloc (0x100, GFP_KERNEL);
+       cmdBuffer =  kmalloc (0x100, GFP_ATOMIC);
        if (!cmdBuffer) {
                err(__FUNCTION__" - kmalloc(%d) failed.\n", 0x100);
                return -ENOMEM;
@@ -2618,7 +2618,7 @@
        dbg (__FUNCTION__" - write to %s register 0x%02x", (regNum == MCR) ? "MCR" : 
"LCR", regValue);
 
        // Alloc memory for the string of commands.
-       cmdBuffer = kmalloc (0x10, GFP_KERNEL);
+       cmdBuffer = kmalloc (0x10, GFP_ATOMIC);
        if (cmdBuffer == NULL ) {
                return -ENOMEM;
        }
diff -Nru a/drivers/usb/serial/ipaq.c b/drivers/usb/serial/ipaq.c
--- a/drivers/usb/serial/ipaq.c Fri Mar 15 01:35:34 2002
+++ b/drivers/usb/serial/ipaq.c Fri Mar 15 01:35:34 2002
@@ -297,7 +297,7 @@
                      usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress),
                      port->read_urb->transfer_buffer, 
port->read_urb->transfer_buffer_length,
                      ipaq_read_bulk_callback, port);
-       result = usb_submit_urb(port->read_urb, GFP_KERNEL);
+       result = usb_submit_urb(port->read_urb, GFP_ATOMIC);
        if (result)
                err(__FUNCTION__ " - failed resubmitting read urb, error %d", result);
        return;
@@ -412,7 +412,7 @@
                      usb_sndbulkpipe(serial->dev, port->bulk_out_endpointAddress),
                      port->write_urb->transfer_buffer, count, 
ipaq_write_bulk_callback,
                      port);
-       result = usb_submit_urb(urb, GFP_KERNEL);
+       result = usb_submit_urb(urb, GFP_ATOMIC);
        if (result) {
                err(__FUNCTION__ " - failed submitting write urb, error %d", result);
        }
diff -Nru a/drivers/usb/serial/ir-usb.c b/drivers/usb/serial/ir-usb.c
--- a/drivers/usb/serial/ir-usb.c       Fri Mar 15 01:35:34 2002
+++ b/drivers/usb/serial/ir-usb.c       Fri Mar 15 01:35:34 2002
@@ -405,7 +405,7 @@
                = USB_QUEUE_BULK
                | USB_ZERO_PACKET;
 
-       result = usb_submit_urb (port->write_urb, GFP_KERNEL);
+       result = usb_submit_urb (port->write_urb, GFP_ATOMIC);
        if (result)
                err("%s - failed submitting write urb, error %d", __FUNCTION__, 
result);
        else
@@ -515,7 +515,7 @@
 
                        port->read_urb->transfer_flags = USB_QUEUE_BULK;
 
-                       result = usb_submit_urb(port->read_urb, GFP_KERNEL);
+                       result = usb_submit_urb(port->read_urb, GFP_ATOMIC);
 
                        if (result)
                                err("%s - failed resubmitting read urb, error %d",
diff -Nru a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c
--- a/drivers/usb/serial/keyspan.c      Fri Mar 15 01:35:34 2002
+++ b/drivers/usb/serial/keyspan.c      Fri Mar 15 01:35:34 2002
@@ -378,7 +378,7 @@
 
                this_urb->transfer_flags &= ~USB_ASYNC_UNLINK;
                this_urb->dev = port->serial->dev;
-               if ((err = usb_submit_urb(this_urb, GFP_KERNEL)) != 0) {
+               if ((err = usb_submit_urb(this_urb, GFP_ATOMIC)) != 0) {
                        dbg("usb_submit_urb(write bulk) failed (%d)\n", err);
                }
                p_priv->tx_start_time[flip] = jiffies;
@@ -436,7 +436,7 @@
                                
                /* Resubmit urb so we continue receiving */
        urb->dev = port->serial->dev;
-       if ((err = usb_submit_urb(urb, GFP_KERNEL)) != 0) {
+       if ((err = usb_submit_urb(urb, GFP_ATOMIC)) != 0) {
                dbg(__FUNCTION__ "resubmit read urb failed. (%d)\n", err);
        }
        return;
@@ -535,7 +535,7 @@
 exit:
        /* Resubmit urb so we continue receiving */
        urb->dev = serial->dev;
-       if ((err = usb_submit_urb(urb, GFP_KERNEL)) != 0) {
+       if ((err = usb_submit_urb(urb, GFP_ATOMIC)) != 0) {
                dbg(__FUNCTION__ "resubmit read urb failed. (%d)\n", err);
        }
 }
@@ -586,7 +586,7 @@
 
                /* Resubmit urb so we continue receiving */
                urb->dev = port->serial->dev;
-               if ((err = usb_submit_urb(urb, GFP_KERNEL)) != 0) {
+               if ((err = usb_submit_urb(urb, GFP_ATOMIC)) != 0) {
                        dbg(__FUNCTION__ "resubmit read urb failed. (%d)\n",
 err);
                }
@@ -671,7 +671,7 @@
 exit:  
                /* Resubmit urb so we continue receiving */
        urb->dev = serial->dev;
-       if ((err = usb_submit_urb(urb, GFP_KERNEL)) != 0) {
+       if ((err = usb_submit_urb(urb, GFP_ATOMIC)) != 0) {
                dbg(__FUNCTION__ "resubmit read urb failed. (%d)\n", err);
        }
 }
@@ -764,7 +764,7 @@
                /* Resubmit urb so we continue receiving */
        urb->dev = serial->dev;
 
-       if ((err = usb_submit_urb(urb, GFP_KERNEL)) != 0) {
+       if ((err = usb_submit_urb(urb, GFP_ATOMIC)) != 0) {
                dbg(__FUNCTION__ "resubmit read urb failed. (%d)\n", err);
        }
 }
@@ -819,7 +819,7 @@
                                
                /* Resubmit urb so we continue receiving */
        urb->dev = port->serial->dev;
-       if ((err = usb_submit_urb(urb, GFP_KERNEL)) != 0) {
+       if ((err = usb_submit_urb(urb, GFP_ATOMIC)) != 0) {
                dbg(__FUNCTION__ "resubmit read urb failed. (%d)\n", err);
        }
 }
diff -Nru a/drivers/usb/serial/keyspan_pda.c b/drivers/usb/serial/keyspan_pda.c
--- a/drivers/usb/serial/keyspan_pda.c  Fri Mar 15 01:35:34 2002
+++ b/drivers/usb/serial/keyspan_pda.c  Fri Mar 15 01:35:34 2002
@@ -292,7 +292,7 @@
        /* just restart the receive interrupt URB */
        dbg("keyspan_pda_rx_unthrottle port %d", port->number);
        port->interrupt_in_urb->dev = port->serial->dev;
-       if (usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL))
+       if (usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC))
                dbg(" usb_submit_urb(read urb) failed");
        return;
 }
@@ -584,7 +584,7 @@
                priv->tx_room -= count;
 
                port->write_urb->dev = port->serial->dev;
-               rc = usb_submit_urb(port->write_urb, GFP_KERNEL);
+               rc = usb_submit_urb(port->write_urb, GFP_ATOMIC);
                if (rc) {
                        dbg(" usb_submit_urb(write bulk) failed");
                        goto exit;
diff -Nru a/drivers/usb/serial/kl5kusb105.c b/drivers/usb/serial/kl5kusb105.c
--- a/drivers/usb/serial/kl5kusb105.c   Fri Mar 15 01:35:34 2002
+++ b/drivers/usb/serial/kl5kusb105.c   Fri Mar 15 01:35:34 2002
@@ -519,7 +519,7 @@
                }
 
                if (urb->transfer_buffer == NULL) {
-                       urb->transfer_buffer = kmalloc (URB_TRANSFER_BUFFER_SIZE, 
GFP_KERNEL);
+                       urb->transfer_buffer = kmalloc (URB_TRANSFER_BUFFER_SIZE, 
+GFP_ATOMIC);
                        if (urb->transfer_buffer == NULL) {
                                err(__FUNCTION__ " - no more kernel memory...");
                                goto exit;
@@ -555,7 +555,7 @@
 
 
                /* send the data out the bulk port */
-               result = usb_submit_urb(urb, GFP_KERNEL);
+               result = usb_submit_urb(urb, GFP_ATOMIC);
                if (result) {
                        err(__FUNCTION__
                            " - failed submitting write urb, error %d", result);
@@ -721,7 +721,7 @@
                      port->read_urb->transfer_buffer_length,
                      klsi_105_read_bulk_callback,
                      port);
-       rc = usb_submit_urb(port->read_urb, GFP_KERNEL);
+       rc = usb_submit_urb(port->read_urb, GFP_ATOMIC);
        if (rc)
                err(__FUNCTION__ 
                    " - failed resubmitting read urb, error %d", rc);
@@ -1019,7 +1019,7 @@
        dbg(__FUNCTION__ " - port %d", port->number);
 
        port->read_urb->dev = port->serial->dev;
-       result = usb_submit_urb(port->read_urb, GFP_KERNEL);
+       result = usb_submit_urb(port->read_urb, GFP_ATOMIC);
        if (result)
                err(__FUNCTION__ " - failed submitting read urb, error %d",
                    result);
diff -Nru a/drivers/usb/serial/mct_u232.c b/drivers/usb/serial/mct_u232.c
--- a/drivers/usb/serial/mct_u232.c     Fri Mar 15 01:35:34 2002
+++ b/drivers/usb/serial/mct_u232.c     Fri Mar 15 01:35:34 2002
@@ -470,7 +470,7 @@
                              port);
                
                /* send the data out the bulk port */
-               result = usb_submit_urb(port->write_urb, GFP_KERNEL);
+               result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
                if (result) {
                        err(__FUNCTION__
                            " - failed submitting write urb, error %d", result);
diff -Nru a/drivers/usb/serial/omninet.c b/drivers/usb/serial/omninet.c
--- a/drivers/usb/serial/omninet.c      Fri Mar 15 01:35:34 2002
+++ b/drivers/usb/serial/omninet.c      Fri Mar 15 01:35:34 2002
@@ -265,7 +265,7 @@
                      usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress),
                      urb->transfer_buffer, urb->transfer_buffer_length,
                      omninet_read_bulk_callback, port);
-       result = usb_submit_urb(urb, GFP_KERNEL);
+       result = usb_submit_urb(urb, GFP_ATOMIC);
        if (result)
                err(__FUNCTION__ " - failed resubmitting read urb, error %d", result);
 
@@ -316,7 +316,7 @@
        wport->write_urb->transfer_buffer_length = 64;
 
        wport->write_urb->dev = serial->dev;
-       result = usb_submit_urb(wport->write_urb, GFP_KERNEL);
+       result = usb_submit_urb(wport->write_urb, GFP_ATOMIC);
        if (result)
                err(__FUNCTION__ " - failed submitting write urb, error %d", result);
        else
diff -Nru a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
--- a/drivers/usb/serial/pl2303.c       Fri Mar 15 01:35:34 2002
+++ b/drivers/usb/serial/pl2303.c       Fri Mar 15 01:35:34 2002
@@ -195,7 +195,7 @@
 
        port->write_urb->transfer_buffer_length = count;
        port->write_urb->dev = port->serial->dev;
-       result = usb_submit_urb (port->write_urb, GFP_KERNEL);
+       result = usb_submit_urb (port->write_urb, GFP_ATOMIC);
        if (result)
                err(__FUNCTION__ " - failed submitting write urb, error %d", result);
        else
@@ -643,7 +643,7 @@
                        dbg (__FUNCTION__ " - caught -EPROTO, resubmitting the urb");
                        urb->status = 0;
                        urb->dev = serial->dev;
-                       result = usb_submit_urb(urb, GFP_KERNEL);
+                       result = usb_submit_urb(urb, GFP_ATOMIC);
                        if (result)
                                err(__FUNCTION__ " - failed resubmitting read urb, 
error %d", result);
                        return;
@@ -668,7 +668,7 @@
        /* Schedule the next read _if_ we are still open */
        if (port->open_count) {
                urb->dev = serial->dev;
-               result = usb_submit_urb(urb, GFP_KERNEL);
+               result = usb_submit_urb(urb, GFP_ATOMIC);
                if (result)
                        err(__FUNCTION__ " - failed resubmitting read urb, error %d", 
result);
        }
@@ -697,7 +697,7 @@
                dbg (__FUNCTION__ " - nonzero write bulk status received: %d", 
urb->status);
                port->write_urb->transfer_buffer_length = 1;
                port->write_urb->dev = port->serial->dev;
-               result = usb_submit_urb (port->write_urb, GFP_KERNEL);
+               result = usb_submit_urb (port->write_urb, GFP_ATOMIC);
                if (result)
                        err(__FUNCTION__ " - failed resubmitting write urb, error %d", 
result);
 
diff -Nru a/drivers/usb/serial/usbserial.c b/drivers/usb/serial/usbserial.c
--- a/drivers/usb/serial/usbserial.c    Fri Mar 15 01:35:34 2002
+++ b/drivers/usb/serial/usbserial.c    Fri Mar 15 01:35:34 2002
@@ -899,7 +899,7 @@
                                     generic_write_bulk_callback), port);
 
                /* send the data out the bulk port */
-               result = usb_submit_urb(port->write_urb, GFP_KERNEL);
+               result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
                if (result)
                        err(__FUNCTION__ " - failed submitting write urb, error %d", 
result);
                else
@@ -989,7 +989,7 @@
                           ((serial->type->read_bulk_callback) ? 
                             serial->type->read_bulk_callback : 
                             generic_read_bulk_callback), port);
-       result = usb_submit_urb(port->read_urb, GFP_KERNEL);
+       result = usb_submit_urb(port->read_urb, GFP_ATOMIC);
        if (result)
                err(__FUNCTION__ " - failed resubmitting read urb, error %d", result);
 }
diff -Nru a/drivers/usb/serial/visor.c b/drivers/usb/serial/visor.c
--- a/drivers/usb/serial/visor.c        Fri Mar 15 01:35:34 2002
+++ b/drivers/usb/serial/visor.c        Fri Mar 15 01:35:34 2002
@@ -344,13 +344,13 @@
 
        dbg(__FUNCTION__ " - port %d", port->number);
 
-       buffer = kmalloc (count, GFP_KERNEL);
+       buffer = kmalloc (count, GFP_ATOMIC);
        if (!buffer) {
                err ("out of memory");
                return -ENOMEM;
        }
 
-       urb = usb_alloc_urb(0, GFP_KERNEL);
+       urb = usb_alloc_urb(0, GFP_ATOMIC);
        if (!urb) {
                err ("no more free urbs");
                kfree (buffer);
@@ -377,7 +377,7 @@
        urb->transfer_flags |= USB_QUEUE_BULK;
 
        /* send it down the pipe */
-       status = usb_submit_urb(urb, GFP_KERNEL);
+       status = usb_submit_urb(urb, GFP_ATOMIC);
        if (status) {
                err(__FUNCTION__ " - usb_submit_urb(write bulk) failed with status = 
%d", status);
                count = status;
@@ -491,7 +491,7 @@
                           port->read_urb->transfer_buffer,
                           port->read_urb->transfer_buffer_length,
                           visor_read_bulk_callback, port);
-       result = usb_submit_urb(port->read_urb, GFP_KERNEL);
+       result = usb_submit_urb(port->read_urb, GFP_ATOMIC);
        if (result)
                err(__FUNCTION__ " - failed resubmitting read urb, error %d", result);
        return;
@@ -512,7 +512,7 @@
        dbg(__FUNCTION__ " - port %d", port->number);
 
        port->read_urb->dev = port->serial->dev;
-       result = usb_submit_urb(port->read_urb, GFP_KERNEL);
+       result = usb_submit_urb(port->read_urb, GFP_ATOMIC);
        if (result)
                err(__FUNCTION__ " - failed submitting read urb, error %d", result);
 }
diff -Nru a/drivers/usb/serial/whiteheat.c b/drivers/usb/serial/whiteheat.c
--- a/drivers/usb/serial/whiteheat.c    Fri Mar 15 01:35:34 2002
+++ b/drivers/usb/serial/whiteheat.c    Fri Mar 15 01:35:34 2002
@@ -240,7 +240,7 @@
                      usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress),
                      port->read_urb->transfer_buffer, 
port->read_urb->transfer_buffer_length,
                      command_port_read_callback, port);
-       result = usb_submit_urb(port->read_urb, GFP_KERNEL);
+       result = usb_submit_urb(port->read_urb, GFP_ATOMIC);
        if (result)
                dbg(__FUNCTION__ " - failed resubmitting read urb, error %d", result);
 }
This BitKeeper patch contains the following changesets:
+
## Wrapped with gzip_uu ##


begin 664 bkpatch1570
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
M*&YLK@V07:DR'DUZO3WI5S7/2$^[VQY[[EMAIL PROTECTED]=@=&S(C#/!UO*=IK.ZDP
M6\S*%[0]T'7U0$6/<4K4T4JYHILY-Y,2W!ZDE[VBE6]=3::&5'.ABXY1GDZ?
M-3U*2L[T4$U[X31ZTQ84?R>X/:N@VF%KVAC:&&EH:5:59W,C<U0YW,2^-&O?
MN#JKX)`.5[7O<\2:S\U!JB,!`\NRVE8K[XB5WFJRRZ"@0^Z1$\5%$]NZT`[8
MKH\DC7%[Y$FI`7"WCT77H1WG#B$*N13_*+K4BB[JN/@P=-<;:X-=YBGSJ$F5
MXJ.+"UA+&W;E."TZLOLJ,U?)O<-T:J+('CY[6'#M_S2Q9.$I*339MYP]/(2K
MXU37L1:C66^R8N%1%7)K8L5BORW0ISK'VH-C#IW,;4+CA&EE%Z@Z85IYM)-Z
MZYZ;1],G;\9V06^N50U%ZJA+$07!3E>T7N4HG;4M1*63KM9)77S-PS.=,&QZ
M+(Q1?&SSAP&$6YT>:_Q6G1[B#!$900/RG/"K.V`.XW>SLW8E"WVVY?X-9UOK
MGCECX!W9RF>`N^V^O37LJKX]3\/.^6$V:XF`ZF<\#+OUQMH=$7LZV]R7"G2E
MN(RHP$63G0,?K.#ZU.9GC-;C>@\-P+K5:%C#*G?9&<Y;G]L!B6[`/(S5IWVU
M@2J1NMHD3\I:A:/.'#79D[5V#76)CK/)7@O=,=+%JOZDR<Z1AV3?H2V+3?>V
ML<(LCFTL-]"91:N+?*,VE!/=!T1/4IMG9^)5=_UAM:EMK8WF2'TN+E?'XI;'
M(1!O*B[2X$SEN&K/JE/>&+U'->\;(+?9J;]&+1:$R3.@EJ,!?TZH52\P'`;M
M:E>MBCR.RL`TV76NT(I(N`J@->FJ\;=+_!#*ZF(2/K+`[TA]-BY/.!OGA.OZ
M*3^W/M5:N(UUZNCN<@.]:K>2;SP"Q&3\1Z[94?VO6NP/*U=M:ZW"?MU(J<EY
MC[951WX%N[_C+8'^Z6\)8(^X5$!:`)DLI@J"/QHTZ@A4+T\8'$"I3;6R[CH:
MUL2VL4@;3V>_\30_;ZHUX1^#W>-?$C`I,K??"-C4F`41XG30/K?\4[\H85!B
MKFVM#72Y/N30Y(Q=>ISKDR3N'9U:4A6):+*G5KVSB0/K):VHI2]X^I\.PG$<
5WA>+Z0T5`@+P(.C_!:C&RCAS00``
`
end

_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to