From c3ebe25c197b6070b402781b7329d2169481634c Mon Sep 17 00:00:00 2001 From: Mathias Nyman Date: Tue, 10 Jun 2014 11:27:41 +0300 Subject: [PATCH] xhci: Fix sleeping with IRQs disabled in xhci_stop_device() xhci_stop_device() allocates and issues stop commands for each active endpoint. This is done with spinlock held and interrupt disabled so we can't sleep during memory allocation. Use GFP_NOWAIT instead Regression from commit 4f15cb6acb569738e7dc2cd01022c3d6982ade6e "xhci: Use command structures when queuing commands on the command ring" for 3.16-rc1 Fixes: 4f15cb6acb56 ("xhci: Use command structures when queuing commands") Reported-by: Dan Williams Reported-by: Johannes Berg Signed-off-by: Mathias Nyman Signed-off-by: Greg Kroah-Hartman --- drivers/usb/host/xhci-hub.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c index 6231ce6aa0c3b..2b998c60faf23 100644 --- a/drivers/usb/host/xhci-hub.c +++ b/drivers/usb/host/xhci-hub.c @@ -287,7 +287,7 @@ static int xhci_stop_device(struct xhci_hcd *xhci, int slot_id, int suspend) if (virt_dev->eps[i].ring && virt_dev->eps[i].ring->dequeue) { struct xhci_command *command; command = xhci_alloc_command(xhci, false, false, - GFP_NOIO); + GFP_NOWAIT); if (!command) { spin_unlock_irqrestore(&xhci->lock, flags); xhci_free_command(xhci, cmd); -- 2.39.5