Message ID | 20190510124248.2430-1-alexandre.belloni@bootlin.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | usb: gadget: udc: lpc32xx: allocate descriptor with GFP_ATOMIC | expand |
On Fri, 2019-05-10 at 14:42 +0200, Alexandre Belloni wrote: > Gadget drivers may queue request in interrupt context. This would lead to > a descriptor allocation in that context. In that case we would hit > BUG_ON(in_interrupt()) in __get_vm_area_node. [] > diff --git a/drivers/usb/gadget/udc/lpc32xx_udc.c b/drivers/usb/gadget/udc/lpc32xx_udc.c [] > @@ -938,7 +938,7 @@ static struct lpc32xx_usbd_dd_gad *udc_dd_alloc(struct lpc32xx_udc *udc) > struct lpc32xx_usbd_dd_gad *dd; > > dd = (struct lpc32xx_usbd_dd_gad *) dma_pool_alloc( > - udc->dd_cache, (GFP_KERNEL | GFP_DMA), &dma); > + udc->dd_cache, (GFP_ATOMIC | GFP_DMA), &dma); trivia: This could fit nicely on a single line without the unnecessary cast and the unnecessary parentheses around the GFP_ types.
Tested with a board containing LPC3250 SOC and STOTG04 PHY by using serial gadget. Needed patch series starting with "[PATCH 0/5] usb: gadget: udc: lpc32xx: add stotg04 phy support" also. Tested-by: James Grant <jamesg@zaltys.org> Regards, James Grant. On 11/05/2019 00:42, Alexandre Belloni wrote: > Gadget drivers may queue request in interrupt context. This would lead to > a descriptor allocation in that context. In that case we would hit > BUG_ON(in_interrupt()) in __get_vm_area_node. > > Signed-off-by: Alexandre Belloni<alexandre.belloni@bootlin.com> > --- > drivers/usb/gadget/udc/lpc32xx_udc.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/usb/gadget/udc/lpc32xx_udc.c b/drivers/usb/gadget/udc/lpc32xx_udc.c > index d8f1c60793ed..b706d9c85a35 100644 > --- a/drivers/usb/gadget/udc/lpc32xx_udc.c > +++ b/drivers/usb/gadget/udc/lpc32xx_udc.c > @@ -938,7 +938,7 @@ static struct lpc32xx_usbd_dd_gad *udc_dd_alloc(struct lpc32xx_udc *udc) > struct lpc32xx_usbd_dd_gad *dd; > > dd = (struct lpc32xx_usbd_dd_gad *) dma_pool_alloc( > - udc->dd_cache, (GFP_KERNEL | GFP_DMA), &dma); > + udc->dd_cache, (GFP_ATOMIC | GFP_DMA), &dma); > if (dd) > dd->this_dma = dma; >
Alexandre Belloni <alexandre.belloni@bootlin.com> writes: > Gadget drivers may queue request in interrupt context. This would lead to > a descriptor allocation in that context. In that case we would hit > BUG_ON(in_interrupt()) in __get_vm_area_node. > > Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> > --- > drivers/usb/gadget/udc/lpc32xx_udc.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/usb/gadget/udc/lpc32xx_udc.c b/drivers/usb/gadget/udc/lpc32xx_udc.c > index d8f1c60793ed..b706d9c85a35 100644 > --- a/drivers/usb/gadget/udc/lpc32xx_udc.c > +++ b/drivers/usb/gadget/udc/lpc32xx_udc.c > @@ -938,7 +938,7 @@ static struct lpc32xx_usbd_dd_gad *udc_dd_alloc(struct lpc32xx_udc *udc) > struct lpc32xx_usbd_dd_gad *dd; > > dd = (struct lpc32xx_usbd_dd_gad *) dma_pool_alloc( > - udc->dd_cache, (GFP_KERNEL | GFP_DMA), &dma); > + udc->dd_cache, (GFP_ATOMIC | GFP_DMA), &dma); doesn't apply: checking file drivers/usb/gadget/udc/lpc32xx_udc.c Hunk #1 FAILED at 938.
Hi, On 18/06/2019 10:33:41+0300, Felipe Balbi wrote: > Alexandre Belloni <alexandre.belloni@bootlin.com> writes: > > > Gadget drivers may queue request in interrupt context. This would lead to > > a descriptor allocation in that context. In that case we would hit > > BUG_ON(in_interrupt()) in __get_vm_area_node. > > > > Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> > > --- > > drivers/usb/gadget/udc/lpc32xx_udc.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/drivers/usb/gadget/udc/lpc32xx_udc.c b/drivers/usb/gadget/udc/lpc32xx_udc.c > > index d8f1c60793ed..b706d9c85a35 100644 > > --- a/drivers/usb/gadget/udc/lpc32xx_udc.c > > +++ b/drivers/usb/gadget/udc/lpc32xx_udc.c > > @@ -938,7 +938,7 @@ static struct lpc32xx_usbd_dd_gad *udc_dd_alloc(struct lpc32xx_udc *udc) > > struct lpc32xx_usbd_dd_gad *dd; > > > > dd = (struct lpc32xx_usbd_dd_gad *) dma_pool_alloc( > > - udc->dd_cache, (GFP_KERNEL | GFP_DMA), &dma); > > + udc->dd_cache, (GFP_ATOMIC | GFP_DMA), &dma); > > doesn't apply: > > checking file drivers/usb/gadget/udc/lpc32xx_udc.c > Hunk #1 FAILED at 938. > You already applied it for v5.2-rc5
Hi, Alexandre Belloni <alexandre.belloni@bootlin.com> writes: > Hi, > > On 18/06/2019 10:33:41+0300, Felipe Balbi wrote: >> Alexandre Belloni <alexandre.belloni@bootlin.com> writes: >> >> > Gadget drivers may queue request in interrupt context. This would lead to >> > a descriptor allocation in that context. In that case we would hit >> > BUG_ON(in_interrupt()) in __get_vm_area_node. >> > >> > Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> >> > --- >> > drivers/usb/gadget/udc/lpc32xx_udc.c | 2 +- >> > 1 file changed, 1 insertion(+), 1 deletion(-) >> > >> > diff --git a/drivers/usb/gadget/udc/lpc32xx_udc.c b/drivers/usb/gadget/udc/lpc32xx_udc.c >> > index d8f1c60793ed..b706d9c85a35 100644 >> > --- a/drivers/usb/gadget/udc/lpc32xx_udc.c >> > +++ b/drivers/usb/gadget/udc/lpc32xx_udc.c >> > @@ -938,7 +938,7 @@ static struct lpc32xx_usbd_dd_gad *udc_dd_alloc(struct lpc32xx_udc *udc) >> > struct lpc32xx_usbd_dd_gad *dd; >> > >> > dd = (struct lpc32xx_usbd_dd_gad *) dma_pool_alloc( >> > - udc->dd_cache, (GFP_KERNEL | GFP_DMA), &dma); >> > + udc->dd_cache, (GFP_ATOMIC | GFP_DMA), &dma); >> >> doesn't apply: >> >> checking file drivers/usb/gadget/udc/lpc32xx_udc.c >> Hunk #1 FAILED at 938. >> > > You already applied it for v5.2-rc5 d'oh! Guess I haven't looked at my inbox in a while :-p thanks
diff --git a/drivers/usb/gadget/udc/lpc32xx_udc.c b/drivers/usb/gadget/udc/lpc32xx_udc.c index d8f1c60793ed..b706d9c85a35 100644 --- a/drivers/usb/gadget/udc/lpc32xx_udc.c +++ b/drivers/usb/gadget/udc/lpc32xx_udc.c @@ -938,7 +938,7 @@ static struct lpc32xx_usbd_dd_gad *udc_dd_alloc(struct lpc32xx_udc *udc) struct lpc32xx_usbd_dd_gad *dd; dd = (struct lpc32xx_usbd_dd_gad *) dma_pool_alloc( - udc->dd_cache, (GFP_KERNEL | GFP_DMA), &dma); + udc->dd_cache, (GFP_ATOMIC | GFP_DMA), &dma); if (dd) dd->this_dma = dma;
Gadget drivers may queue request in interrupt context. This would lead to a descriptor allocation in that context. In that case we would hit BUG_ON(in_interrupt()) in __get_vm_area_node. Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> --- drivers/usb/gadget/udc/lpc32xx_udc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)