RE: [PATCH] usb: gadget: mv_udc: use GFP_ATOMIC in build_dtd()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Alexey,
> -----Original Message-----
> From: Alexey Khoroshilov [mailto:khoroshilov@xxxxxxxxx]
> Sent: 2012年7月6日 7:10
> To: Neil Zhang; Felipe Balbi
> Cc: Alexey Khoroshilov; Greg Kroah-Hartman; linux-usb@xxxxxxxxxxxxxxx;
> linux-kernel@xxxxxxxxxxxxxxx; ldv-project@xxxxxxxxx
> Subject: [PATCH] usb: gadget: mv_udc: use GFP_ATOMIC in build_dtd()
> 
> build_dtd() is called either from interrupt handler mv_udc_irq()
> or with spinlock held (from mv_ep_queue()). So we should
> alloc memory with GFP_ATOMIC, not GFP_KERNEL.
> 
> Found by Linux Driver Verification project (linuxtesting.org).
> 
> Signed-off-by: Alexey Khoroshilov <khoroshilov@xxxxxxxxx>
> ---
>  drivers/usb/gadget/mv_udc_core.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/gadget/mv_udc_core.c
> b/drivers/usb/gadget/mv_udc_core.c
> index 117a4bb..693e1e4 100644
> --- a/drivers/usb/gadget/mv_udc_core.c
> +++ b/drivers/usb/gadget/mv_udc_core.c
> @@ -374,7 +374,7 @@ static struct mv_dtd *build_dtd(struct mv_req *req,
> unsigned *length,
>  	 * Be careful that no _GFP_HIGHMEM is set,
>  	 * or we can not use dma_to_virt
>  	 */
> -	dtd = dma_pool_alloc(udc->dtd_pool, GFP_KERNEL, dma);
> +	dtd = dma_pool_alloc(udc->dtd_pool, GFP_ATOMIC, dma);
>  	if (dtd == NULL)
>  		return dtd;
> 
> --
> 1.7.9.5

Thanks for your finding.
Actually we have found the issue some months ago and I would like to add some error handler if it failed to alloc memory.
I will sent out the patches soon.
Thanks.

Best Regards,
Neil Zhang
?韬{.n?????%??檩??w?{.n???{炳???骅w*jg????????G??⒏⒎?:+v????????????"??????


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux