I'm going to throw schedule_work away, it's retarded. But for starters,
let's have it encapsulated.

Also, generic and whiteheat were both calling usb_serial_port_softint
and scheduled work. Only one was necessary.

Signed-off-by: Pete Zaitcev <[EMAIL PROTECTED]>

---

The double-calling looks like a thinko, or an attempt to achieve
lower latency (in which case, a misguided one, IMHO).

diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/cyberjack.c 
linux-2.6.17-rc2-lem/drivers/usb/serial/cyberjack.c
--- linux-2.6.17-rc2/drivers/usb/serial/cyberjack.c     2006-03-27 
07:45:23.000000000 -0800
+++ linux-2.6.17-rc2-lem/drivers/usb/serial/cyberjack.c 2006-05-22 
21:17:16.000000000 -0700
@@ -469,7 +469,7 @@ static void cyberjack_write_bulk_callbac
 
 exit:
        spin_unlock(&priv->lock);
-       schedule_work(&port->work);
+       usb_serial_port_softint(port);
 }
 
 static int __init cyberjack_init (void)
diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/cypress_m8.c 
linux-2.6.17-rc2-lem/drivers/usb/serial/cypress_m8.c
--- linux-2.6.17-rc2/drivers/usb/serial/cypress_m8.c    2006-04-23 
21:06:18.000000000 -0700
+++ linux-2.6.17-rc2-lem/drivers/usb/serial/cypress_m8.c        2006-05-22 
21:26:24.000000000 -0700
@@ -824,7 +824,7 @@ send:
        priv->bytes_out += count; /* do not count the line control and size 
bytes */
        spin_unlock_irqrestore(&priv->lock, flags);
 
-       schedule_work(&port->work);
+       usb_serial_port_softint(port);
 } /* cypress_send */
 
 
diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/empeg.c 
linux-2.6.17-rc2-lem/drivers/usb/serial/empeg.c
--- linux-2.6.17-rc2/drivers/usb/serial/empeg.c 2006-03-27 07:45:23.000000000 
-0800
+++ linux-2.6.17-rc2-lem/drivers/usb/serial/empeg.c     2006-05-22 
21:26:46.000000000 -0700
@@ -335,7 +335,7 @@ static void empeg_write_bulk_callback (s
                return;
        }
 
-       schedule_work(&port->work);
+       usb_serial_port_softint(port);
 }
 
 
diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/ftdi_sio.c 
linux-2.6.17-rc2-lem/drivers/usb/serial/ftdi_sio.c
--- linux-2.6.17-rc2/drivers/usb/serial/ftdi_sio.c      2006-04-23 
21:06:18.000000000 -0700
+++ linux-2.6.17-rc2-lem/drivers/usb/serial/ftdi_sio.c  2006-05-22 
21:27:04.000000000 -0700
@@ -1467,7 +1467,7 @@ static void ftdi_write_bulk_callback (st
                return;
        }
 
-       schedule_work(&port->work);
+       usb_serial_port_softint(port);
 } /* ftdi_write_bulk_callback */
 
 
diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/garmin_gps.c 
linux-2.6.17-rc2-lem/drivers/usb/serial/garmin_gps.c
--- linux-2.6.17-rc2/drivers/usb/serial/garmin_gps.c    2006-04-23 
21:06:18.000000000 -0700
+++ linux-2.6.17-rc2-lem/drivers/usb/serial/garmin_gps.c        2006-05-22 
21:32:38.000000000 -0700
@@ -1012,7 +1012,7 @@ static void garmin_write_bulk_callback (
                garmin_data_p->flags |= CLEAR_HALT_REQUIRED;
        }
 
-       schedule_work(&port->work);
+       usb_serial_port_softint(port);
 }
 
 
diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/generic.c 
linux-2.6.17-rc2-lem/drivers/usb/serial/generic.c
--- linux-2.6.17-rc2/drivers/usb/serial/generic.c       2006-03-27 
07:45:23.000000000 -0800
+++ linux-2.6.17-rc2-lem/drivers/usb/serial/generic.c   2006-05-22 
21:27:20.000000000 -0700
@@ -298,9 +298,7 @@ void usb_serial_generic_write_bulk_callb
                return;
        }
 
-       usb_serial_port_softint((void *)port);
-
-       schedule_work(&port->work);
+       usb_serial_port_softint(port);
 }
 EXPORT_SYMBOL_GPL(usb_serial_generic_write_bulk_callback);
 
diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/ipaq.c 
linux-2.6.17-rc2-lem/drivers/usb/serial/ipaq.c
--- linux-2.6.17-rc2/drivers/usb/serial/ipaq.c  2006-03-27 07:45:23.000000000 
-0800
+++ linux-2.6.17-rc2-lem/drivers/usb/serial/ipaq.c      2006-05-22 
21:27:34.000000000 -0700
@@ -870,7 +870,7 @@ static void ipaq_write_bulk_callback(str
                spin_unlock_irqrestore(&write_list_lock, flags);
        }
 
-       schedule_work(&port->work);
+       usb_serial_port_softint(port);
 }
 
 static int ipaq_write_room(struct usb_serial_port *port)
diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/ipw.c 
linux-2.6.17-rc2-lem/drivers/usb/serial/ipw.c
--- linux-2.6.17-rc2/drivers/usb/serial/ipw.c   2006-03-27 07:45:23.000000000 
-0800
+++ linux-2.6.17-rc2-lem/drivers/usb/serial/ipw.c       2006-05-22 
21:27:46.000000000 -0700
@@ -376,7 +376,7 @@ static void ipw_write_bulk_callback(stru
        if (urb->status)
                dbg("%s - nonzero write bulk status received: %d", 
__FUNCTION__, urb->status);
 
-       schedule_work(&port->work);
+       usb_serial_port_softint(port);
 }
 
 static int ipw_write(struct usb_serial_port *port, const unsigned char *buf, 
int count)
diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/ir-usb.c 
linux-2.6.17-rc2-lem/drivers/usb/serial/ir-usb.c
--- linux-2.6.17-rc2/drivers/usb/serial/ir-usb.c        2006-04-23 
21:06:18.000000000 -0700
+++ linux-2.6.17-rc2-lem/drivers/usb/serial/ir-usb.c    2006-05-22 
21:28:09.000000000 -0700
@@ -408,7 +408,7 @@ static void ir_write_bulk_callback (stru
                urb->actual_length,
                urb->transfer_buffer);
 
-       schedule_work(&port->work);
+       usb_serial_port_softint(port);
 }
 
 static void ir_read_bulk_callback (struct urb *urb, struct pt_regs *regs)
diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/keyspan.c 
linux-2.6.17-rc2-lem/drivers/usb/serial/keyspan.c
--- linux-2.6.17-rc2/drivers/usb/serial/keyspan.c       2006-04-23 
21:06:18.000000000 -0700
+++ linux-2.6.17-rc2-lem/drivers/usb/serial/keyspan.c   2006-05-22 
21:29:09.000000000 -0700
@@ -481,7 +481,7 @@ static void usa2x_outdat_callback(struct
        dbg ("%s - urb %d", __FUNCTION__, urb == p_priv->out_urbs[1]); 
 
        if (port->open_count)
-               schedule_work(&port->work);
+               usb_serial_port_softint(port);
 }
 
 static void    usa26_inack_callback(struct urb *urb, struct pt_regs *regs)
diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/kl5kusb105.c 
linux-2.6.17-rc2-lem/drivers/usb/serial/kl5kusb105.c
--- linux-2.6.17-rc2/drivers/usb/serial/kl5kusb105.c    2006-03-27 
07:45:23.000000000 -0800
+++ linux-2.6.17-rc2-lem/drivers/usb/serial/kl5kusb105.c        2006-05-22 
21:29:57.000000000 -0700
@@ -569,8 +569,7 @@ static void klsi_105_write_bulk_callback
                return;
        }
 
-       /* from generic_write_bulk_callback */
-       schedule_work(&port->work);
+       usb_serial_port_softint(port);
 } /* klsi_105_write_bulk_completion_callback */
 
 
diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/omninet.c 
linux-2.6.17-rc2-lem/drivers/usb/serial/omninet.c
--- linux-2.6.17-rc2/drivers/usb/serial/omninet.c       2006-04-23 
21:06:18.000000000 -0700
+++ linux-2.6.17-rc2-lem/drivers/usb/serial/omninet.c   2006-05-22 
21:30:20.000000000 -0700
@@ -320,7 +320,7 @@ static void omninet_write_bulk_callback 
                return;
        }
 
-       schedule_work(&port->work);
+       usb_serial_port_softint(port);
 }
 
 
diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/option.c 
linux-2.6.17-rc2-lem/drivers/usb/serial/option.c
--- linux-2.6.17-rc2/drivers/usb/serial/option.c        2006-04-23 
21:06:18.000000000 -0700
+++ linux-2.6.17-rc2-lem/drivers/usb/serial/option.c    2006-05-22 
21:30:59.000000000 -0700
@@ -365,8 +365,7 @@ static void option_outdat_callback(struc
 
        port = (struct usb_serial_port *) urb->context;
 
-       if (port->open_count)
-               schedule_work(&port->work);
+       usb_serial_port_softint(port);
 }
 
 static void option_instat_callback(struct urb *urb, struct pt_regs *regs)
diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/pl2303.c 
linux-2.6.17-rc2-lem/drivers/usb/serial/pl2303.c
--- linux-2.6.17-rc2/drivers/usb/serial/pl2303.c        2006-04-23 
21:06:18.000000000 -0700
+++ linux-2.6.17-rc2-lem/drivers/usb/serial/pl2303.c    2006-05-22 
21:31:15.000000000 -0700
@@ -313,7 +313,7 @@ static void pl2303_send(struct usb_seria
                // TODO: reschedule pl2303_send
        }
 
-       schedule_work(&port->work);
+       usb_serial_port_softint(port);
 }
 
 static int pl2303_write_room(struct usb_serial_port *port)
diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/usb-serial.c 
linux-2.6.17-rc2-lem/drivers/usb/serial/usb-serial.c
--- linux-2.6.17-rc2/drivers/usb/serial/usb-serial.c    2006-04-23 
21:06:18.000000000 -0700
+++ linux-2.6.17-rc2-lem/drivers/usb/serial/usb-serial.c        2006-05-22 
21:23:29.000000000 -0700
@@ -521,7 +523,17 @@ exit:
        return -EINVAL;
 }
 
-void usb_serial_port_softint(void *private)
+/*
+ * We would be calling tty_wakeup here, but unfortunately some line
+ * disciplines have an annoying habit of calling tty->write from
+ * the write wakeup callback (e.g. n_hdlc.c).
+ */
+void usb_serial_port_softint(struct usb_serial_port *port)
+{
+       schedule_work(&port->work);
+}
+
+static void usb_serial_port_work(void *private)
 {
        struct usb_serial_port *port = private;
        struct tty_struct *tty;
@@ -784,7 +796,7 @@ int usb_serial_probe(struct usb_interfac
                port->serial = serial;
                spin_lock_init(&port->lock);
                mutex_init(&port->mutex);
-               INIT_WORK(&port->work, usb_serial_port_softint, port);
+               INIT_WORK(&port->work, usb_serial_port_work, port);
                serial->port[i] = port;
        }
 
diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/usb-serial.h 
linux-2.6.17-rc2-lem/drivers/usb/serial/usb-serial.h
--- linux-2.6.17-rc2/drivers/usb/serial/usb-serial.h    2006-04-23 
21:06:18.000000000 -0700
+++ linux-2.6.17-rc2-lem/drivers/usb/serial/usb-serial.h        2006-05-22 
21:18:47.000000000 -0700
@@ -236,7 +236,7 @@ struct usb_serial_driver {
 
 extern int  usb_serial_register(struct usb_serial_driver *driver);
 extern void usb_serial_deregister(struct usb_serial_driver *driver);
-extern void usb_serial_port_softint(void *private);
+extern void usb_serial_port_softint(struct usb_serial_port *port);
 
 extern int usb_serial_probe(struct usb_interface *iface, const struct 
usb_device_id *id);
 extern void usb_serial_disconnect(struct usb_interface *iface);
diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/visor.c 
linux-2.6.17-rc2-lem/drivers/usb/serial/visor.c
--- linux-2.6.17-rc2/drivers/usb/serial/visor.c 2006-04-23 21:06:18.000000000 
-0700
+++ linux-2.6.17-rc2-lem/drivers/usb/serial/visor.c     2006-05-22 
21:31:35.000000000 -0700
@@ -480,7 +480,7 @@ static void visor_write_bulk_callback (s
        --priv->outstanding_urbs;
        spin_unlock_irqrestore(&priv->lock, flags);
 
-       schedule_work(&port->work);
+       usb_serial_port_softint(port);
 }
 
 
diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/serial/whiteheat.c 
linux-2.6.17-rc2-lem/drivers/usb/serial/whiteheat.c
--- linux-2.6.17-rc2/drivers/usb/serial/whiteheat.c     2006-03-27 
07:45:23.000000000 -0800
+++ linux-2.6.17-rc2-lem/drivers/usb/serial/whiteheat.c 2006-05-22 
21:31:59.000000000 -0700
@@ -1088,9 +1088,7 @@ static void whiteheat_write_callback(str
                return;
        }
 
-       usb_serial_port_softint((void *)port);
-
-       schedule_work(&port->work);
+       usb_serial_port_softint(port);
 }
 
 


-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to