To avoid deadlock, do not call blocking functions with spinlocks held.

Replace GFP_KERNEL with GFP_ATOMIC, as the latter will fail if the pile
doesn't have enough free pages but will not sleep and hence deadlock can
be avoided.

Found by Coccinelle.

Signed-off-by: Tapasweni Pathak <tapaswenipat...@gmail.com>
---
Is there any other way this can be fixed as it is better to avoid GFP_ATOMIC?

 drivers/staging/emxx_udc/emxx_udc.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/emxx_udc/emxx_udc.c 
b/drivers/staging/emxx_udc/emxx_udc.c
index 4be646c..6c1de27 100644
--- a/drivers/staging/emxx_udc/emxx_udc.c
+++ b/drivers/staging/emxx_udc/emxx_udc.c
@@ -2794,7 +2794,7 @@ static int nbu2ss_ep_queue(
                if (ep->virt_buf == NULL)
                        ep->virt_buf = (u8 *)dma_alloc_coherent(
                                NULL, PAGE_SIZE,
-                               &ep->phys_buf, GFP_KERNEL | GFP_DMA);
+                               &ep->phys_buf, GFP_ATOMIC | GFP_DMA);
                if (ep->epnum > 0)  {
                        if (ep->direct == USB_DIR_IN)
                                memcpy(ep->virt_buf, req->req.buf,
--
1.7.9.5

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to