diff mbox series

usb: gadget: udc: lpc32xx: allocate descriptor with GFP_ATOMIC

Message ID 20190510124248.2430-1-alexandre.belloni@bootlin.com (mailing list archive)
State Superseded
Headers show
Series usb: gadget: udc: lpc32xx: allocate descriptor with GFP_ATOMIC | expand

Commit Message

Alexandre Belloni May 10, 2019, 12:42 p.m. UTC
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(-)

Comments

Joe Perches May 10, 2019, 3:59 p.m. UTC | #1
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.
James Grant May 13, 2019, 11:33 a.m. UTC | #2
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;
>
Felipe Balbi June 18, 2019, 7:33 a.m. UTC | #3
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.
Alexandre Belloni June 18, 2019, 7:46 a.m. UTC | #4
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
Felipe Balbi June 18, 2019, 8:45 a.m. UTC | #5
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 mbox series

Patch

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;