Changeset 2293

Timestamp:
Mar 15, 2013, 9:58:22 AM (6 years ago)
Author:
matthijs
Message:

ra_usb: Fix lockup on 2.0n due to IRQ overload on USB bulk NAKs.

It appears that sometimes (for split transactions to USB 1.1 devices)
USB devices reply to bulk transfers with NAK replies. This caused the
dwc_otg driver to retry the bulk transfer immediately, resulting in
another NAK, resulting in a retry, etc. This would result in an
interrupt for every NAK received, causing the CPU to be busy with
servicing interrupts only, locking up the rest of the system (eventually
causing a "soft lockup detected" and a reboot).

This patch changes NAK handling so that after a NAK, a bulk packet is
not retried until the next (non-micro) frame, which lowers the interrupt
rate in this case.

This patch is based on the implementation of the "nak_holdoff_enable"
option in the dwc_otg drive in the Raspberry Pi linux kernel tree. See:

https://github.com/raspberrypi/linux/commit/a8afdd5fbccb49a1e4cce13fd93346a8ef0cc462#L1R1317

This bug has been spotted when connecting a Huawei E220 3G dongle to the
2.0n through an USB hub. With this patch, this setup works succesfully.
It is expected to help for other USB 1.1 3G dongles as well.

References: #857

File:
1 added

Note: See TracChangeset for help on using the changeset viewer.