Re: [PATCH] V4L/DVB:uvcvideo:fix uvc_alloc_urb_buffers()

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

 



Hi,

On Sunday 27 September 2009 10:30:34 tom.leiming@xxxxxxxxx wrote:
> From: Ming Lei <tom.leiming@xxxxxxxxx>
> 
> This patch sets stream->urb_size as psize*npackets
> before calling uvc_alloc_urb_buffers, which may fix
> a possible failure of usb_buffer_free in case usb_buffer_alloc
> returns NULL. The patch is based on the ideas below:
> 
> 1,If usb_buffer_alloc can't allocate a buffer sucessfully,
> uvc_free_urb_buffers will be called to free the allocated
> buffers, and stream->urb_size is required to be passed to
> usb_buffer_free;
> 
> 2,uvc_free_urb_buffers can reset stream->urb_size.
> 
> This patch is against linux-v2.6.31-next-20090926.

Good catch, thanks.
 
> Signed-off-by: Ming Lei <tom.leiming@xxxxxxxxx>

Acked-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>

I've applied the patch to my tree and I'll send a pull request.

> ---
>  drivers/media/video/uvc/uvc_video.c |    4 ++--
>  1 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/media/video/uvc/uvc_video.c
>  b/drivers/media/video/uvc/uvc_video.c index f960e8e..31dba66 100644
> --- a/drivers/media/video/uvc/uvc_video.c
> +++ b/drivers/media/video/uvc/uvc_video.c
> @@ -768,9 +768,10 @@ static int uvc_alloc_urb_buffers(struct uvc_streaming
>  *stream,
> 
>  	/* Retry allocations until one succeed. */
>  	for (; npackets > 1; npackets /= 2) {
> +		stream->urb_size = psize * npackets;
>  		for (i = 0; i < UVC_URBS; ++i) {
>  			stream->urb_buffer[i] = usb_buffer_alloc(
> -				stream->dev->udev, psize * npackets,
> +				stream->dev->udev, stream->urb_size,
>  				gfp_flags | __GFP_NOWARN, &stream->urb_dma[i]);
>  			if (!stream->urb_buffer[i]) {
>  				uvc_free_urb_buffers(stream);
> @@ -779,7 +780,6 @@ static int uvc_alloc_urb_buffers(struct uvc_streaming
>  *stream, }
> 
>  		if (i == UVC_URBS) {
> -			stream->urb_size = psize * npackets;
>  			return npackets;
>  		}
>  	}
> 

-- 
Regards,

Laurent Pinchart
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux