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