usb: xhci: dbc: Don't free all memory with spinlock held
authorMathias Nyman <mathias.nyman@linux.intel.com>
Fri, 22 Mar 2019 15:50:16 +0000 (17:50 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 22 Mar 2019 16:16:05 +0000 (17:16 +0100)
The xhci debug capability (DbC) feature did its memory cleanup with
spinlock held. dma_free_coherent() warns if called with interrupts
disabled

move the memory cleanup outside the spinlock

Cc: stable <stable@vger.kernel.org>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/host/xhci-dbgcap.c

index c78be57..d932cc3 100644 (file)
@@ -516,7 +516,6 @@ static int xhci_do_dbc_stop(struct xhci_hcd *xhci)
                return -1;
 
        writel(0, &dbc->regs->control);
-       xhci_dbc_mem_cleanup(xhci);
        dbc->state = DS_DISABLED;
 
        return 0;
@@ -562,8 +561,10 @@ static void xhci_dbc_stop(struct xhci_hcd *xhci)
        ret = xhci_do_dbc_stop(xhci);
        spin_unlock_irqrestore(&dbc->lock, flags);
 
-       if (!ret)
+       if (!ret) {
+               xhci_dbc_mem_cleanup(xhci);
                pm_runtime_put_sync(xhci_to_hcd(xhci)->self.controller);
+       }
 }
 
 static void