Hi,

On Sunday 27 September 2009 10:30:34 tom.leim...@gmail.com wrote:
> From: Ming Lei <tom.leim...@gmail.com>
> 
> 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.leim...@gmail.com>

Acked-by: Laurent Pinchart <laurent.pinch...@ideasonboard.com>

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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to