• Alan Stern's avatar
    [PATCH] USB UHCI: allow URBs to be unlinked when IRQs don't work · 0c4391c9
    Alan Stern authored
    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.
    0c4391c9
uhci-hcd.c 63.4 KB