[PATCH] USB UHCI: allow URBs to be unlinked when IRQs don't work
A lot of people with USB controllers made by VIA have been suffering from the fact that these controllers stop working when they receive a babble packet. In particular, they stop generating interrupt requests. Since the UHCI driver relies on IRQs from the controller for proper timing and interlocking of unlink requests, this means that those broken controllers will hang the UHCI driver and drivers for any device connected through it. This patch, written by Herbert Xu, gives the UCHI driver the ability to manage the unlink procedure using timer interrupts as well as controller interrupts. (It also fixes a race in the UHCI irq handler.) Although it won't prevent the VIA controllers from flaking out when they encounter babble, at least now users will be able to rmmod the uhci-hcd driver and then reload it, restoring their systems back to normal operation (until the next babble!). P.S.: Herbert, there's one loose end I still want to tie up. When the controller isn't running (i.e., is suspended) the frame number won't change, but unlinks still need to work. It's a small point, not too likely to come up in normal usage. I'll fix it later on when I update the state-changing part of the driver.
Showing
Please register or sign in to comment