All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Revert "USB: serial: ch341: fix character loss at high transfer rates"
@ 2021-08-24 12:19 Johan Hovold
  2021-08-24 12:32 ` Willy Tarreau
  0 siblings, 1 reply; 4+ messages in thread
From: Johan Hovold @ 2021-08-24 12:19 UTC (permalink / raw)
  To: Johan Hovold
  Cc: linux-usb, linux-kernel, Paul Größel, stable, Willy Tarreau

This reverts commit 3c18e9baee0ef97510dcda78c82285f52626764b.

These devices do not appear to send a zero-length packet when the
transfer size is a multiple of the bulk-endpoint max-packet size. This
means that incoming data may not be processed by the driver until a
short packet is received or the receive buffer is full.

Revert back to using endpoint-sized receive buffers to avoid stalled
reads.

Reported-by: Paul Größel <pb.g@gmx.de>
Link: https://bugzilla.kernel.org/show_bug.cgi?id=214131
Fixes: 3c18e9baee0e ("USB: serial: ch341: fix character loss at high transfer rates")
Cc: stable@vger.kernel.org
Cc: Willy Tarreau <w@1wt.eu>
Signed-off-by: Johan Hovold <johan@kernel.org>
---
 drivers/usb/serial/ch341.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/usb/serial/ch341.c b/drivers/usb/serial/ch341.c
index 8a521b5ea769..2db917eab799 100644
--- a/drivers/usb/serial/ch341.c
+++ b/drivers/usb/serial/ch341.c
@@ -851,7 +851,6 @@ static struct usb_serial_driver ch341_device = {
 		.owner	= THIS_MODULE,
 		.name	= "ch341-uart",
 	},
-	.bulk_in_size      = 512,
 	.id_table          = id_table,
 	.num_ports         = 1,
 	.open              = ch341_open,
-- 
2.31.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] Revert "USB: serial: ch341: fix character loss at high transfer rates"
  2021-08-24 12:19 [PATCH] Revert "USB: serial: ch341: fix character loss at high transfer rates" Johan Hovold
@ 2021-08-24 12:32 ` Willy Tarreau
  2021-08-24 13:25   ` Johan Hovold
  0 siblings, 1 reply; 4+ messages in thread
From: Willy Tarreau @ 2021-08-24 12:32 UTC (permalink / raw)
  To: Johan Hovold; +Cc: linux-usb, linux-kernel, Paul Größel, stable

On Tue, Aug 24, 2021 at 02:19:26PM +0200, Johan Hovold wrote:
> This reverts commit 3c18e9baee0ef97510dcda78c82285f52626764b.
> 
> These devices do not appear to send a zero-length packet when the
> transfer size is a multiple of the bulk-endpoint max-packet size. This
> means that incoming data may not be processed by the driver until a
> short packet is received or the receive buffer is full.
> 
> Revert back to using endpoint-sized receive buffers to avoid stalled
> reads.

Sorry for this, I didn't notice any issue here (aside for the chip
working where it used not to). I have no idea what these zero-length
packets correspond to, nor why they're affected by the transfer size.
Do you have any idea what I should look for ? Because without that
patch, the device is unusable for me :-/

Thanks!
Willy

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] Revert "USB: serial: ch341: fix character loss at high transfer rates"
  2021-08-24 12:32 ` Willy Tarreau
@ 2021-08-24 13:25   ` Johan Hovold
  2021-08-24 15:06     ` Willy Tarreau
  0 siblings, 1 reply; 4+ messages in thread
From: Johan Hovold @ 2021-08-24 13:25 UTC (permalink / raw)
  To: Willy Tarreau; +Cc: linux-usb, linux-kernel, Paul Größel, stable

On Tue, Aug 24, 2021 at 02:32:32PM +0200, Willy Tarreau wrote:
> On Tue, Aug 24, 2021 at 02:19:26PM +0200, Johan Hovold wrote:
> > This reverts commit 3c18e9baee0ef97510dcda78c82285f52626764b.
> > 
> > These devices do not appear to send a zero-length packet when the
> > transfer size is a multiple of the bulk-endpoint max-packet size. This
> > means that incoming data may not be processed by the driver until a
> > short packet is received or the receive buffer is full.
> > 
> > Revert back to using endpoint-sized receive buffers to avoid stalled
> > reads.
> 
> Sorry for this, I didn't notice any issue here (aside for the chip
> working where it used not to). I have no idea what these zero-length
> packets correspond to, nor why they're affected by the transfer size.
> Do you have any idea what I should look for ? Because without that
> patch, the device is unusable for me :-/

Zero-length packets are used to indicate completion of bulk transfers
that are multiples of the endpoint max-packet size (as per the USB
spec). Without those the host controller driver doesn't now that the
transfer is complete and that it should call the driver completion
callback (and instead waits for the other completion conditions).

It may be possible to configure the device to send ZLPs somehow but
since there's no public documentation for the protocol that may require
some reverse engineering.

Johan

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] Revert "USB: serial: ch341: fix character loss at high transfer rates"
  2021-08-24 13:25   ` Johan Hovold
@ 2021-08-24 15:06     ` Willy Tarreau
  0 siblings, 0 replies; 4+ messages in thread
From: Willy Tarreau @ 2021-08-24 15:06 UTC (permalink / raw)
  To: Johan Hovold; +Cc: linux-usb, linux-kernel, Paul Größel

[ removed Cc stable for the rest of the discussion ]

On Tue, Aug 24, 2021 at 03:25:16PM +0200, Johan Hovold wrote:
> Zero-length packets are used to indicate completion of bulk transfers
> that are multiples of the endpoint max-packet size (as per the USB
> spec). Without those the host controller driver doesn't now that the
> transfer is complete and that it should call the driver completion
> callback (and instead waits for the other completion conditions).

Thanks for the explanation. I guess that in my case, given that the
serial port would emit lots of continuous data (e.g. "find /" or "dmesg"),
there's always something pending and the risk that it ends exactly on a
64-byte boundary remained low and never happened in practice.

> It may be possible to configure the device to send ZLPs somehow but
> since there's no public documentation for the protocol that may require
> some reverse engineering.

I totally understand. I'll drop my CH34x adapters and try to figure more
suitable ones (i.e. some which work *by default* under Linux). Their
small footprint was nice but without doc they're only usable for low
speeds :-/

Thanks!
Willy

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-08-24 15:07 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-24 12:19 [PATCH] Revert "USB: serial: ch341: fix character loss at high transfer rates" Johan Hovold
2021-08-24 12:32 ` Willy Tarreau
2021-08-24 13:25   ` Johan Hovold
2021-08-24 15:06     ` Willy Tarreau

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.