• David Brownell's avatar
    [PATCH] USB: Fix machine lockup when unloading HC driver (part 2) · 6d58d234
    David Brownell authored
    Alan Stern wrote:
    > I suggest you just forget about acquiring the lock in status_dequeue() and
    > simply leave it as
    >
    > 	del_timer_sync (&hcd->rh_timer);
    > 	hcd->rh_timer.data = 0;
    
    Hmm, so if some other URB gets queued in that window,
    it'll get trashed?  Unlikely .. the clean fix would be
    making the status endpoint have a real URB queue.
    
    I combined your suggested change with two others:
    (a) protect the status-unlink and control completion
        handlers against IRQs [ the cases Duncan noted]
    (b) use mod_timer to retrigger the timer, instead of the
        heavy weight path.
    6d58d234
hcd.c 42.9 KB