Regression in 2.6.13 in USB generic serial driver
Subsystems (2)
PATCH 1/1 Regression in 2.6.13 in USB generic serial driver
Kernel version 2.6.13 introduced a regression (vs. 2.6.12.6) in the generic USB serial converter driver. The regression manifests, as far as I can tell, whenever you attempt to write to the device. The symptom is that the write never completes (write() returns 0, or blocks). I'm pretty sure this will happen with all hardware, but I only have my hardware to test with (amd64 host interfacing to a custom-built USB device based on an Atmel AT91SAM7X256 arm7tdmi chip's built-in USB transceiver).
The patch (vs. vanilla 2.6.13.4) is rather straightforward:
===================================================================
drivers/usb/serial/generic.c +1 -1
@@ -223,7 +223,7 @@dbg ("%s - port %d" , __FUNCTION__, port->number);if (serial->num_bulk_out) { -if (port->write_urb_busy) +if (!(port->write_urb_busy)) room = port->bulk_out_size; }
===================================================================
Please let me know if I'm missing something. Otherwise, do I need to do anything in particular to get a maintainer to accept the patch? (I'm a long-time user, first-time patcher, so forgive my ignorance about procedures.)
Signature · 1 line
Randall
Quoted 4 lines · * Randall Nortman ([email protected]) wrote:
Please let me know if I'm missing something. Otherwise, do I need to do anything in particular to get a maintainer to accept the patch? (I'm a long-time user, first-time patcher, so forgive my ignorance about procedures.)
Take a look at Documentation/SubmittingPatches in the kernel tree. You'll find info on MAINTAINERS, patch formats, and signing off on your changes.
thanks,
-chris
PATCH 1/1 usbserial: Regression in USB generic serial driver
Kernel version 2.6.13 introduced a regression in the generic USB serial converter driver (usbserial.o, drivers/usb/serial/generic.c). The bug manifests, as far as I can tell, whenever you attempt to write to the device -- the write will never complete (write() returns 0, or blocks).
---
I'm sending this a second time, after reading up on the right way to submit a patch (much thanks to Chris Wright). Now we see if I'm capable of following instructions properly.
drivers/usb/serial/generic.c +1 -1
@@ -223,7 +223,7 @@ int usb_serial_generic_write_room (strucdbg ("%s - port %d" , __FUNCTION__, port->number);if (serial->num_bulk_out) { -if (port->write_urb_busy) +if (!(port->write_urb_busy)) room = port->bulk_out_size; }