[PATCH] rspiusb: Check usb_buffer_map_sg() retval
Jiri Slaby
jirislaby at gmail.com
Sun Aug 23 13:16:53 PDT 2009
On 08/22/2009 07:32 PM, Roel Kluin wrote:
>> you should vfree first...
>
> Of course. Thanks Jiri, updated patch below,
>
> Roel
Forgot to add signed-off-by?
Reviewed-by: Jiri Slaby <jirislaby at gmail.com>
> diff --git a/drivers/staging/rspiusb/rspiusb.c b/drivers/staging/rspiusb/rspiusb.c
> index 04e2f92..0495fbf 100644
> --- a/drivers/staging/rspiusb/rspiusb.c
> +++ b/drivers/staging/rspiusb/rspiusb.c
> @@ -611,6 +611,7 @@ static int MapUserBuffer(struct ioctl_struct *io, struct device_extension *pdx)
> int i = 0;
> int k = 0;
> int err = 0;
> + int ret;
> struct page **maplist_p;
> int numPagesRequired;
>
> @@ -687,9 +688,16 @@ static int MapUserBuffer(struct ioctl_struct *io, struct device_extension *pdx)
> } else {
> pdx->sgl[frameInfo][0].length = count;
> }
> - pdx->sgEntries[frameInfo] =
> - usb_buffer_map_sg(pdx->udev, epAddr, pdx->sgl[frameInfo],
> - pdx->maplist_numPagesMapped[frameInfo]);
> + ret = usb_buffer_map_sg(pdx->udev, epAddr, pdx->sgl[frameInfo],
> + pdx->maplist_numPagesMapped[frameInfo]);
> + if (ret < 0) {
> + vfree(maplist_p);
> + dbg("usb_buffer_map_sg() failed");
> + return -EINVAL;
> + }
> +
> + pdx->sgEntries[frameInfo] = ret;
> +
> dbg("number of sgEntries = %d", pdx->sgEntries[frameInfo]);
> pdx->userBufMapped = 1;
> vfree(maplist_p);
> @@ -716,8 +724,6 @@ static int MapUserBuffer(struct ioctl_struct *io, struct device_extension *pdx)
> pdx->PixelUrb[frameInfo][i]->transfer_flags =
> URB_NO_TRANSFER_DMA_MAP | URB_NO_INTERRUPT;
> }
> - if (i == 0)
> - return -EINVAL;
> /* only interrupt when last URB completes */
> pdx->PixelUrb[frameInfo][--i]->transfer_flags &= ~URB_NO_INTERRUPT;
> pdx->pendedPixelUrbs[frameInfo] =
More information about the devel
mailing list