* [PATCH v2 1/2] hso: remove unused workqueue @ 2014-07-14 10:08 Olivier Sobrie 2014-07-14 10:08 ` [PATCH v2 2/2] hso: fix deadlock when receiving bursts of data Olivier Sobrie 2014-07-15 2:27 ` [PATCH v2 1/2] hso: remove unused workqueue David Miller 0 siblings, 2 replies; 5+ messages in thread From: Olivier Sobrie @ 2014-07-14 10:08 UTC (permalink / raw) To: linux-usb, netdev; +Cc: linux-kernel, Olivier Sobrie The workqueue "retry_unthrottle_workqueue" is not scheduled anywhere in the code. So, remove it. Signed-off-by: Olivier Sobrie <olivier@sobrie.be> --- drivers/net/usb/hso.c | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c index a3a0586..9ca2b41 100644 --- a/drivers/net/usb/hso.c +++ b/drivers/net/usb/hso.c @@ -261,7 +261,6 @@ struct hso_serial { u16 curr_rx_urb_offset; u8 rx_urb_filled[MAX_RX_URBS]; struct tasklet_struct unthrottle_tasklet; - struct work_struct retry_unthrottle_workqueue; }; struct hso_device { @@ -1252,14 +1251,6 @@ static void hso_unthrottle(struct tty_struct *tty) tasklet_hi_schedule(&serial->unthrottle_tasklet); } -static void hso_unthrottle_workfunc(struct work_struct *work) -{ - struct hso_serial *serial = - container_of(work, struct hso_serial, - retry_unthrottle_workqueue); - hso_unthrottle_tasklet(serial); -} - /* open the requested serial port */ static int hso_serial_open(struct tty_struct *tty, struct file *filp) { @@ -1295,8 +1286,6 @@ static int hso_serial_open(struct tty_struct *tty, struct file *filp) tasklet_init(&serial->unthrottle_tasklet, (void (*)(unsigned long))hso_unthrottle_tasklet, (unsigned long)serial); - INIT_WORK(&serial->retry_unthrottle_workqueue, - hso_unthrottle_workfunc); result = hso_start_serial_device(serial->parent, GFP_KERNEL); if (result) { hso_stop_serial_device(serial->parent); @@ -1345,7 +1334,6 @@ static void hso_serial_close(struct tty_struct *tty, struct file *filp) if (!usb_gone) hso_stop_serial_device(serial->parent); tasklet_kill(&serial->unthrottle_tasklet); - cancel_work_sync(&serial->retry_unthrottle_workqueue); } if (!usb_gone) -- 1.7.9.5 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v2 2/2] hso: fix deadlock when receiving bursts of data 2014-07-14 10:08 [PATCH v2 1/2] hso: remove unused workqueue Olivier Sobrie @ 2014-07-14 10:08 ` Olivier Sobrie [not found] ` <1405332530-2507-2-git-send-email-olivier-Ui3EtX6WB9GzQB+pC5nmwQ@public.gmane.org> 2014-07-15 2:27 ` [PATCH v2 1/2] hso: remove unused workqueue David Miller 1 sibling, 1 reply; 5+ messages in thread From: Olivier Sobrie @ 2014-07-14 10:08 UTC (permalink / raw) To: linux-usb, netdev Cc: linux-kernel, Olivier Sobrie, David Miller, David Laight, One Thousand Gnomes, Dan Williams, Jan Dumon When the module sends bursts of data, sometimes a deadlock happens in the hso driver when the tty buffer doesn't get the chance to be flushed quickly enough. Remove the endless while loop in function put_rxbuf_data() which is called by the urb completion handler. If there isn't enough room in the tty buffer, discards all the data received in the URB. Cc: David Miller <davem@davemloft.net> Cc: David Laight <David.Laight@ACULAB.COM> Cc: One Thousand Gnomes <gnomes@lxorguk.ukuu.org.uk> Cc: Dan Williams <dcbw@redhat.com> Cc: Jan Dumon <j.dumon@option.com> Signed-off-by: Olivier Sobrie <olivier@sobrie.be> --- Changes in v2: - remove the unthrottle timer added in the previous patch version - drop entire rx urb data if there is not enough space in tty buffer - remove variable curr_rx_urb_offset from hso_serial structure drivers/net/usb/hso.c | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c index 9ca2b41..a4272ed 100644 --- a/drivers/net/usb/hso.c +++ b/drivers/net/usb/hso.c @@ -258,7 +258,6 @@ struct hso_serial { * so as not to drop characters on the floor. */ int curr_rx_urb_idx; - u16 curr_rx_urb_offset; u8 rx_urb_filled[MAX_RX_URBS]; struct tasklet_struct unthrottle_tasklet; }; @@ -2001,8 +2000,7 @@ static void ctrl_callback(struct urb *urb) static int put_rxbuf_data(struct urb *urb, struct hso_serial *serial) { struct tty_struct *tty; - int write_length_remaining = 0; - int curr_write_len; + int count; /* Sanity check */ if (urb == NULL || serial == NULL) { @@ -2012,29 +2010,28 @@ static int put_rxbuf_data(struct urb *urb, struct hso_serial *serial) tty = tty_port_tty_get(&serial->port); + if (tty && test_bit(TTY_THROTTLED, &tty->flags)) { + tty_kref_put(tty); + return -1; + } + /* Push data to tty */ - write_length_remaining = urb->actual_length - - serial->curr_rx_urb_offset; D1("data to push to tty"); - while (write_length_remaining) { - if (tty && test_bit(TTY_THROTTLED, &tty->flags)) { - tty_kref_put(tty); - return -1; - } - curr_write_len = tty_insert_flip_string(&serial->port, - urb->transfer_buffer + serial->curr_rx_urb_offset, - write_length_remaining); - serial->curr_rx_urb_offset += curr_write_len; - write_length_remaining -= curr_write_len; + count = tty_buffer_request_room(&serial->port, urb->actual_length); + if (count >= urb->actual_length) { + tty_insert_flip_string(&serial->port, urb->transfer_buffer, + urb->actual_length); tty_flip_buffer_push(&serial->port); + } else { + dev_warn(&serial->parent->usb->dev, + "dropping data, %d bytes lost\n", urb->actual_length); } + tty_kref_put(tty); - if (write_length_remaining == 0) { - serial->curr_rx_urb_offset = 0; - serial->rx_urb_filled[hso_urb_to_index(serial, urb)] = 0; - } - return write_length_remaining; + serial->rx_urb_filled[hso_urb_to_index(serial, urb)] = 0; + + return 0; } @@ -2205,7 +2202,6 @@ static int hso_stop_serial_device(struct hso_device *hso_dev) } } serial->curr_rx_urb_idx = 0; - serial->curr_rx_urb_offset = 0; if (serial->tx_urb) usb_kill_urb(serial->tx_urb); -- 1.7.9.5 ^ permalink raw reply related [flat|nested] 5+ messages in thread
[parent not found: <1405332530-2507-2-git-send-email-olivier-Ui3EtX6WB9GzQB+pC5nmwQ@public.gmane.org>]
* Re: [PATCH v2 2/2] hso: fix deadlock when receiving bursts of data [not found] ` <1405332530-2507-2-git-send-email-olivier-Ui3EtX6WB9GzQB+pC5nmwQ@public.gmane.org> @ 2014-07-14 13:27 ` One Thousand Gnomes 2014-07-15 2:27 ` David Miller 1 sibling, 0 replies; 5+ messages in thread From: One Thousand Gnomes @ 2014-07-14 13:27 UTC (permalink / raw) To: Olivier Sobrie Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA, netdev-u79uwXL29TY76Z2rM5mHXA, linux-kernel-u79uwXL29TY76Z2rM5mHXA, David Miller, David Laight, Dan Williams, Jan Dumon On Mon, 14 Jul 2014 12:08:50 +0200 Olivier Sobrie <olivier-Ui3EtX6WB9GzQB+pC5nmwQ@public.gmane.org> wrote: > When the module sends bursts of data, sometimes a deadlock happens in > the hso driver when the tty buffer doesn't get the chance to be flushed > quickly enough. > > Remove the endless while loop in function put_rxbuf_data() which is > called by the urb completion handler. > If there isn't enough room in the tty buffer, discards all the data > received in the URB. > > Cc: David Miller <davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org> > Cc: David Laight <David.Laight-ZS65k/vG3HxXrIkS9f7CXA@public.gmane.org> > Cc: One Thousand Gnomes <gnomes-qBU/x9rampVanCEyBjwyrvXRex20P6io@public.gmane.org> > Cc: Dan Williams <dcbw-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> > Cc: Jan Dumon <j.dumon-x9gZzRpC1QbQT0dZR+AlfA@public.gmane.org> > Signed-off-by: Olivier Sobrie <olivier-Ui3EtX6WB9GzQB+pC5nmwQ@public.gmane.org> Acked-by: Alan Cox <alan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org> -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2 2/2] hso: fix deadlock when receiving bursts of data [not found] ` <1405332530-2507-2-git-send-email-olivier-Ui3EtX6WB9GzQB+pC5nmwQ@public.gmane.org> 2014-07-14 13:27 ` One Thousand Gnomes @ 2014-07-15 2:27 ` David Miller 1 sibling, 0 replies; 5+ messages in thread From: David Miller @ 2014-07-15 2:27 UTC (permalink / raw) To: olivier-Ui3EtX6WB9GzQB+pC5nmwQ Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA, netdev-u79uwXL29TY76Z2rM5mHXA, linux-kernel-u79uwXL29TY76Z2rM5mHXA, David.Laight-ZS65k/vG3HxXrIkS9f7CXA, gnomes-qBU/x9rampVanCEyBjwyrvXRex20P6io, dcbw-H+wXaHxf7aLQT0dZR+AlfA, j.dumon-x9gZzRpC1QbQT0dZR+AlfA From: Olivier Sobrie <olivier-Ui3EtX6WB9GzQB+pC5nmwQ@public.gmane.org> Date: Mon, 14 Jul 2014 12:08:50 +0200 > When the module sends bursts of data, sometimes a deadlock happens in > the hso driver when the tty buffer doesn't get the chance to be flushed > quickly enough. > > Remove the endless while loop in function put_rxbuf_data() which is > called by the urb completion handler. > If there isn't enough room in the tty buffer, discards all the data > received in the URB. > > Cc: David Miller <davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org> > Cc: David Laight <David.Laight-ZS65k/vG3HxXrIkS9f7CXA@public.gmane.org> > Cc: One Thousand Gnomes <gnomes-qBU/x9rampVanCEyBjwyrvXRex20P6io@public.gmane.org> > Cc: Dan Williams <dcbw-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> > Cc: Jan Dumon <j.dumon-x9gZzRpC1QbQT0dZR+AlfA@public.gmane.org> > Signed-off-by: Olivier Sobrie <olivier-Ui3EtX6WB9GzQB+pC5nmwQ@public.gmane.org> > --- > Changes in v2: > - remove the unthrottle timer added in the previous patch version > - drop entire rx urb data if there is not enough space in tty buffer > - remove variable curr_rx_urb_offset from hso_serial structure Applied, thanks. -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2 1/2] hso: remove unused workqueue 2014-07-14 10:08 [PATCH v2 1/2] hso: remove unused workqueue Olivier Sobrie 2014-07-14 10:08 ` [PATCH v2 2/2] hso: fix deadlock when receiving bursts of data Olivier Sobrie @ 2014-07-15 2:27 ` David Miller 1 sibling, 0 replies; 5+ messages in thread From: David Miller @ 2014-07-15 2:27 UTC (permalink / raw) To: olivier; +Cc: linux-usb, netdev, linux-kernel From: Olivier Sobrie <olivier@sobrie.be> Date: Mon, 14 Jul 2014 12:08:49 +0200 > The workqueue "retry_unthrottle_workqueue" is not scheduled anywhere > in the code. So, remove it. > > Signed-off-by: Olivier Sobrie <olivier@sobrie.be> Applied. ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2014-07-15 2:27 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-07-14 10:08 [PATCH v2 1/2] hso: remove unused workqueue Olivier Sobrie 2014-07-14 10:08 ` [PATCH v2 2/2] hso: fix deadlock when receiving bursts of data Olivier Sobrie [not found] ` <1405332530-2507-2-git-send-email-olivier-Ui3EtX6WB9GzQB+pC5nmwQ@public.gmane.org> 2014-07-14 13:27 ` One Thousand Gnomes 2014-07-15 2:27 ` David Miller 2014-07-15 2:27 ` [PATCH v2 1/2] hso: remove unused workqueue David Miller
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).