2005-02-24 12:09:26

by Alexander V. Lukyanov

[permalink] [raw]
Subject: [2.6.10] cdc-acm.c patches

Hello!

I have ZyXEL UNO modem which has usb acm interface. Starting with kernel
version 2.6.8 the driver cdc-acm began to hand when the modem connection
was dropped due to being idle. After the hang, no data could be read from
the device /dev/usb/ttyACM0, but writting was ok. The led "data" was lit
on the modem all the time after the disconnect (which indicates that modem
has data to be read).

I tracked down the problem to this: acm_read_bulk was called from
usb_submit_urb(acm->readurb), _inside_ acm_tty_open, and that time acm->used
was 0 which led to acm_rx_tasklet being not called, and acm_read_bulk was
never called again.

The problem was caused by patch in 2.6.8, which moved incrementing of
acm->used to bottom of acm_tty_open. My patch to fix it is attached.

When debugging the problem I noticed that debug messages sometimes have
double \n and the second one is not KERN_DEBUG level, which causes it to
be emitted to display. A second patch to normalize newlines in debug
output is attached.

--
Alexander.


Attachments:
(No filename) (1.00 kB)
cdc-acm-hang-fix.diff (590.00 B)
cdc-acm-dbg-fix.diff (2.20 kB)
Download all attachments

2005-02-24 12:22:47

by Oliver Neukum

[permalink] [raw]
Subject: Re: [2.6.10] cdc-acm.c patches


> The problem was caused by patch in 2.6.8, which moved incrementing of
> acm->used to bottom of acm_tty_open. My patch to fix it is attached.

Your patch has been integrated into the USB tree which is regularly
pushed up into the mainline.

Regards
Oliver