• Sebastian Andrzej Siewior's avatar
    libertas_tf: use irqsave() in USB's complete callback · fc75122f
    Sebastian Andrzej Siewior authored
    The USB completion callback does not disable interrupts while acquiring
    the lock. We want to remove the local_irq_disable() invocation from
    __usb_hcd_giveback_urb() and therefore it is required for the callback
    handler to disable the interrupts while acquiring the lock.
    The callback may be invoked either in IRQ or BH context depending on the
    USB host controller.
    Use the _irqsave() variant of the locking primitives.
    
    I am removing the
    	BUG_ON(!in_interrupt());
    
    check because it serves no purpose. Running the completion callback in
    BH context makes in_interrupt() still return true but the interrupts
    could be enabled. The important part is that ->driver_lock is acquired
    with disabled interrupts which is the case now.
    
    Cc: Kalle Valo <kvalo@codeaurora.org>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: linux-wireless@vger.kernel.org
    Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
    Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
    fc75122f
if_usb.c 22.6 KB