diff options
-rw-r--r-- | drivers/usb/serial/cyberjack.c | 2 | ||||
-rw-r--r-- | drivers/usb/serial/cypress_m8.c | 2 | ||||
-rw-r--r-- | drivers/usb/serial/empeg.c | 2 | ||||
-rw-r--r-- | drivers/usb/serial/ftdi_sio.c | 2 | ||||
-rw-r--r-- | drivers/usb/serial/garmin_gps.c | 2 | ||||
-rw-r--r-- | drivers/usb/serial/generic.c | 4 | ||||
-rw-r--r-- | drivers/usb/serial/ipaq.c | 2 | ||||
-rw-r--r-- | drivers/usb/serial/ipw.c | 2 | ||||
-rw-r--r-- | drivers/usb/serial/ir-usb.c | 2 | ||||
-rw-r--r-- | drivers/usb/serial/keyspan.c | 2 | ||||
-rw-r--r-- | drivers/usb/serial/kl5kusb105.c | 3 | ||||
-rw-r--r-- | drivers/usb/serial/omninet.c | 2 | ||||
-rw-r--r-- | drivers/usb/serial/option.c | 3 | ||||
-rw-r--r-- | drivers/usb/serial/pl2303.c | 2 | ||||
-rw-r--r-- | drivers/usb/serial/usb-serial.c | 14 | ||||
-rw-r--r-- | drivers/usb/serial/usb-serial.h | 2 | ||||
-rw-r--r-- | drivers/usb/serial/visor.c | 2 | ||||
-rw-r--r-- | drivers/usb/serial/whiteheat.c | 4 |
18 files changed, 29 insertions, 25 deletions
diff --git a/drivers/usb/serial/cyberjack.c b/drivers/usb/serial/cyberjack.c index 2357b1d102d7..1fd5c5a9f2ef 100644 --- a/drivers/usb/serial/cyberjack.c +++ b/drivers/usb/serial/cyberjack.c | |||
@@ -469,7 +469,7 @@ static void cyberjack_write_bulk_callback (struct urb *urb, struct pt_regs *regs | |||
469 | 469 | ||
470 | exit: | 470 | exit: |
471 | spin_unlock(&priv->lock); | 471 | spin_unlock(&priv->lock); |
472 | schedule_work(&port->work); | 472 | usb_serial_port_softint(port); |
473 | } | 473 | } |
474 | 474 | ||
475 | static int __init cyberjack_init (void) | 475 | static int __init cyberjack_init (void) |
diff --git a/drivers/usb/serial/cypress_m8.c b/drivers/usb/serial/cypress_m8.c index 7212fbe3b6f2..5de76efe1b37 100644 --- a/drivers/usb/serial/cypress_m8.c +++ b/drivers/usb/serial/cypress_m8.c | |||
@@ -824,7 +824,7 @@ send: | |||
824 | priv->bytes_out += count; /* do not count the line control and size bytes */ | 824 | priv->bytes_out += count; /* do not count the line control and size bytes */ |
825 | spin_unlock_irqrestore(&priv->lock, flags); | 825 | spin_unlock_irqrestore(&priv->lock, flags); |
826 | 826 | ||
827 | schedule_work(&port->work); | 827 | usb_serial_port_softint(port); |
828 | } /* cypress_send */ | 828 | } /* cypress_send */ |
829 | 829 | ||
830 | 830 | ||
diff --git a/drivers/usb/serial/empeg.c b/drivers/usb/serial/empeg.c index 63f7c78a1152..afca1eae5fb5 100644 --- a/drivers/usb/serial/empeg.c +++ b/drivers/usb/serial/empeg.c | |||
@@ -335,7 +335,7 @@ static void empeg_write_bulk_callback (struct urb *urb, struct pt_regs *regs) | |||
335 | return; | 335 | return; |
336 | } | 336 | } |
337 | 337 | ||
338 | schedule_work(&port->work); | 338 | usb_serial_port_softint(port); |
339 | } | 339 | } |
340 | 340 | ||
341 | 341 | ||
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index 1122a0da41c1..590c7ec851db 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c | |||
@@ -1472,7 +1472,7 @@ static void ftdi_write_bulk_callback (struct urb *urb, struct pt_regs *regs) | |||
1472 | return; | 1472 | return; |
1473 | } | 1473 | } |
1474 | 1474 | ||
1475 | schedule_work(&port->work); | 1475 | usb_serial_port_softint(port); |
1476 | } /* ftdi_write_bulk_callback */ | 1476 | } /* ftdi_write_bulk_callback */ |
1477 | 1477 | ||
1478 | 1478 | ||
diff --git a/drivers/usb/serial/garmin_gps.c b/drivers/usb/serial/garmin_gps.c index 5ec9bf5bac8d..04767759cf8a 100644 --- a/drivers/usb/serial/garmin_gps.c +++ b/drivers/usb/serial/garmin_gps.c | |||
@@ -1012,7 +1012,7 @@ static void garmin_write_bulk_callback (struct urb *urb, struct pt_regs *regs) | |||
1012 | garmin_data_p->flags |= CLEAR_HALT_REQUIRED; | 1012 | garmin_data_p->flags |= CLEAR_HALT_REQUIRED; |
1013 | } | 1013 | } |
1014 | 1014 | ||
1015 | schedule_work(&port->work); | 1015 | usb_serial_port_softint(port); |
1016 | } | 1016 | } |
1017 | 1017 | ||
1018 | 1018 | ||
diff --git a/drivers/usb/serial/generic.c b/drivers/usb/serial/generic.c index c62cc2876519..07a478c59fb2 100644 --- a/drivers/usb/serial/generic.c +++ b/drivers/usb/serial/generic.c | |||
@@ -299,9 +299,7 @@ void usb_serial_generic_write_bulk_callback (struct urb *urb, struct pt_regs *re | |||
299 | return; | 299 | return; |
300 | } | 300 | } |
301 | 301 | ||
302 | usb_serial_port_softint((void *)port); | 302 | usb_serial_port_softint(port); |
303 | |||
304 | schedule_work(&port->work); | ||
305 | } | 303 | } |
306 | EXPORT_SYMBOL_GPL(usb_serial_generic_write_bulk_callback); | 304 | EXPORT_SYMBOL_GPL(usb_serial_generic_write_bulk_callback); |
307 | 305 | ||
diff --git a/drivers/usb/serial/ipaq.c b/drivers/usb/serial/ipaq.c index 9a5c97989562..9da6d2a8f2b0 100644 --- a/drivers/usb/serial/ipaq.c +++ b/drivers/usb/serial/ipaq.c | |||
@@ -870,7 +870,7 @@ static void ipaq_write_bulk_callback(struct urb *urb, struct pt_regs *regs) | |||
870 | spin_unlock_irqrestore(&write_list_lock, flags); | 870 | spin_unlock_irqrestore(&write_list_lock, flags); |
871 | } | 871 | } |
872 | 872 | ||
873 | schedule_work(&port->work); | 873 | usb_serial_port_softint(port); |
874 | } | 874 | } |
875 | 875 | ||
876 | static int ipaq_write_room(struct usb_serial_port *port) | 876 | static int ipaq_write_room(struct usb_serial_port *port) |
diff --git a/drivers/usb/serial/ipw.c b/drivers/usb/serial/ipw.c index e760a70242c1..a4a0bfeaab00 100644 --- a/drivers/usb/serial/ipw.c +++ b/drivers/usb/serial/ipw.c | |||
@@ -376,7 +376,7 @@ static void ipw_write_bulk_callback(struct urb *urb, struct pt_regs *regs) | |||
376 | if (urb->status) | 376 | if (urb->status) |
377 | dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, urb->status); | 377 | dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, urb->status); |
378 | 378 | ||
379 | schedule_work(&port->work); | 379 | usb_serial_port_softint(port); |
380 | } | 380 | } |
381 | 381 | ||
382 | static int ipw_write(struct usb_serial_port *port, const unsigned char *buf, int count) | 382 | static int ipw_write(struct usb_serial_port *port, const unsigned char *buf, int count) |
diff --git a/drivers/usb/serial/ir-usb.c b/drivers/usb/serial/ir-usb.c index 426182ddc42a..9432c7302275 100644 --- a/drivers/usb/serial/ir-usb.c +++ b/drivers/usb/serial/ir-usb.c | |||
@@ -408,7 +408,7 @@ static void ir_write_bulk_callback (struct urb *urb, struct pt_regs *regs) | |||
408 | urb->actual_length, | 408 | urb->actual_length, |
409 | urb->transfer_buffer); | 409 | urb->transfer_buffer); |
410 | 410 | ||
411 | schedule_work(&port->work); | 411 | usb_serial_port_softint(port); |
412 | } | 412 | } |
413 | 413 | ||
414 | static void ir_read_bulk_callback (struct urb *urb, struct pt_regs *regs) | 414 | static void ir_read_bulk_callback (struct urb *urb, struct pt_regs *regs) |
diff --git a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c index 052b735c4fbd..2cf6ade704e4 100644 --- a/drivers/usb/serial/keyspan.c +++ b/drivers/usb/serial/keyspan.c | |||
@@ -481,7 +481,7 @@ static void usa2x_outdat_callback(struct urb *urb, struct pt_regs *regs) | |||
481 | dbg ("%s - urb %d", __FUNCTION__, urb == p_priv->out_urbs[1]); | 481 | dbg ("%s - urb %d", __FUNCTION__, urb == p_priv->out_urbs[1]); |
482 | 482 | ||
483 | if (port->open_count) | 483 | if (port->open_count) |
484 | schedule_work(&port->work); | 484 | usb_serial_port_softint(port); |
485 | } | 485 | } |
486 | 486 | ||
487 | static void usa26_inack_callback(struct urb *urb, struct pt_regs *regs) | 487 | static void usa26_inack_callback(struct urb *urb, struct pt_regs *regs) |
diff --git a/drivers/usb/serial/kl5kusb105.c b/drivers/usb/serial/kl5kusb105.c index 78335a5f7743..65d79f630fa4 100644 --- a/drivers/usb/serial/kl5kusb105.c +++ b/drivers/usb/serial/kl5kusb105.c | |||
@@ -569,8 +569,7 @@ static void klsi_105_write_bulk_callback ( struct urb *urb, struct pt_regs *regs | |||
569 | return; | 569 | return; |
570 | } | 570 | } |
571 | 571 | ||
572 | /* from generic_write_bulk_callback */ | 572 | usb_serial_port_softint(port); |
573 | schedule_work(&port->work); | ||
574 | } /* klsi_105_write_bulk_completion_callback */ | 573 | } /* klsi_105_write_bulk_completion_callback */ |
575 | 574 | ||
576 | 575 | ||
diff --git a/drivers/usb/serial/omninet.c b/drivers/usb/serial/omninet.c index 238033a87092..6dcdb5f598b8 100644 --- a/drivers/usb/serial/omninet.c +++ b/drivers/usb/serial/omninet.c | |||
@@ -320,7 +320,7 @@ static void omninet_write_bulk_callback (struct urb *urb, struct pt_regs *regs) | |||
320 | return; | 320 | return; |
321 | } | 321 | } |
322 | 322 | ||
323 | schedule_work(&port->work); | 323 | usb_serial_port_softint(port); |
324 | } | 324 | } |
325 | 325 | ||
326 | 326 | ||
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index 5cf2b80add7a..759d36087184 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c | |||
@@ -365,8 +365,7 @@ static void option_outdat_callback(struct urb *urb, struct pt_regs *regs) | |||
365 | 365 | ||
366 | port = (struct usb_serial_port *) urb->context; | 366 | port = (struct usb_serial_port *) urb->context; |
367 | 367 | ||
368 | if (port->open_count) | 368 | usb_serial_port_softint(port); |
369 | schedule_work(&port->work); | ||
370 | } | 369 | } |
371 | 370 | ||
372 | static void option_instat_callback(struct urb *urb, struct pt_regs *regs) | 371 | static void option_instat_callback(struct urb *urb, struct pt_regs *regs) |
diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c index c96714bb1cb8..2ca6dd94796f 100644 --- a/drivers/usb/serial/pl2303.c +++ b/drivers/usb/serial/pl2303.c | |||
@@ -314,7 +314,7 @@ static void pl2303_send(struct usb_serial_port *port) | |||
314 | // TODO: reschedule pl2303_send | 314 | // TODO: reschedule pl2303_send |
315 | } | 315 | } |
316 | 316 | ||
317 | schedule_work(&port->work); | 317 | usb_serial_port_softint(port); |
318 | } | 318 | } |
319 | 319 | ||
320 | static int pl2303_write_room(struct usb_serial_port *port) | 320 | static int pl2303_write_room(struct usb_serial_port *port) |
diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c index 92200f05b531..7a1cc1b04979 100644 --- a/drivers/usb/serial/usb-serial.c +++ b/drivers/usb/serial/usb-serial.c | |||
@@ -531,7 +531,17 @@ exit: | |||
531 | return -EINVAL; | 531 | return -EINVAL; |
532 | } | 532 | } |
533 | 533 | ||
534 | void usb_serial_port_softint(void *private) | 534 | /* |
535 | * We would be calling tty_wakeup here, but unfortunately some line | ||
536 | * disciplines have an annoying habit of calling tty->write from | ||
537 | * the write wakeup callback (e.g. n_hdlc.c). | ||
538 | */ | ||
539 | void usb_serial_port_softint(struct usb_serial_port *port) | ||
540 | { | ||
541 | schedule_work(&port->work); | ||
542 | } | ||
543 | |||
544 | static void usb_serial_port_work(void *private) | ||
535 | { | 545 | { |
536 | struct usb_serial_port *port = private; | 546 | struct usb_serial_port *port = private; |
537 | struct tty_struct *tty; | 547 | struct tty_struct *tty; |
@@ -794,7 +804,7 @@ int usb_serial_probe(struct usb_interface *interface, | |||
794 | port->serial = serial; | 804 | port->serial = serial; |
795 | spin_lock_init(&port->lock); | 805 | spin_lock_init(&port->lock); |
796 | mutex_init(&port->mutex); | 806 | mutex_init(&port->mutex); |
797 | INIT_WORK(&port->work, usb_serial_port_softint, port); | 807 | INIT_WORK(&port->work, usb_serial_port_work, port); |
798 | serial->port[i] = port; | 808 | serial->port[i] = port; |
799 | } | 809 | } |
800 | 810 | ||
diff --git a/drivers/usb/serial/usb-serial.h b/drivers/usb/serial/usb-serial.h index c07ece3fef1d..d53ea9b11e81 100644 --- a/drivers/usb/serial/usb-serial.h +++ b/drivers/usb/serial/usb-serial.h | |||
@@ -236,7 +236,7 @@ struct usb_serial_driver { | |||
236 | 236 | ||
237 | extern int usb_serial_register(struct usb_serial_driver *driver); | 237 | extern int usb_serial_register(struct usb_serial_driver *driver); |
238 | extern void usb_serial_deregister(struct usb_serial_driver *driver); | 238 | extern void usb_serial_deregister(struct usb_serial_driver *driver); |
239 | extern void usb_serial_port_softint(void *private); | 239 | extern void usb_serial_port_softint(struct usb_serial_port *port); |
240 | 240 | ||
241 | extern int usb_serial_probe(struct usb_interface *iface, const struct usb_device_id *id); | 241 | extern int usb_serial_probe(struct usb_interface *iface, const struct usb_device_id *id); |
242 | extern void usb_serial_disconnect(struct usb_interface *iface); | 242 | extern void usb_serial_disconnect(struct usb_interface *iface); |
diff --git a/drivers/usb/serial/visor.c b/drivers/usb/serial/visor.c index f5c3841d4843..9e89b8d54f72 100644 --- a/drivers/usb/serial/visor.c +++ b/drivers/usb/serial/visor.c | |||
@@ -480,7 +480,7 @@ static void visor_write_bulk_callback (struct urb *urb, struct pt_regs *regs) | |||
480 | --priv->outstanding_urbs; | 480 | --priv->outstanding_urbs; |
481 | spin_unlock_irqrestore(&priv->lock, flags); | 481 | spin_unlock_irqrestore(&priv->lock, flags); |
482 | 482 | ||
483 | schedule_work(&port->work); | 483 | usb_serial_port_softint(port); |
484 | } | 484 | } |
485 | 485 | ||
486 | 486 | ||
diff --git a/drivers/usb/serial/whiteheat.c b/drivers/usb/serial/whiteheat.c index f806553cd9a4..582860ac8764 100644 --- a/drivers/usb/serial/whiteheat.c +++ b/drivers/usb/serial/whiteheat.c | |||
@@ -1089,9 +1089,7 @@ static void whiteheat_write_callback(struct urb *urb, struct pt_regs *regs) | |||
1089 | return; | 1089 | return; |
1090 | } | 1090 | } |
1091 | 1091 | ||
1092 | usb_serial_port_softint((void *)port); | 1092 | usb_serial_port_softint(port); |
1093 | |||
1094 | schedule_work(&port->work); | ||
1095 | } | 1093 | } |
1096 | 1094 | ||
1097 | 1095 | ||