mirror of
https://github.com/torvalds/linux
synced 2024-10-03 09:48:02 +00:00
media: usb: siano: Fix allocation of urbs
USB urbs must be allocated with usb_alloc_urb. Quoting the manual Only use this function (usb_init_urb) if you _really_ understand what you are doing. Fix the following smatch error: drivers/media/usb/siano/smsusb.c:53:38: warning: array of flexible structures Signed-off-by: Ricardo Ribalda <ribalda@chromium.org> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
This commit is contained in:
parent
c3224f4147
commit
836e254852
|
@ -40,7 +40,7 @@ struct smsusb_urb_t {
|
|||
struct smscore_buffer_t *cb;
|
||||
struct smsusb_device_t *dev;
|
||||
|
||||
struct urb urb;
|
||||
struct urb *urb;
|
||||
|
||||
/* For the bottom half */
|
||||
struct work_struct wq;
|
||||
|
@ -160,7 +160,7 @@ static int smsusb_submit_urb(struct smsusb_device_t *dev,
|
|||
}
|
||||
|
||||
usb_fill_bulk_urb(
|
||||
&surb->urb,
|
||||
surb->urb,
|
||||
dev->udev,
|
||||
usb_rcvbulkpipe(dev->udev, dev->in_ep),
|
||||
surb->cb->p,
|
||||
|
@ -168,9 +168,9 @@ static int smsusb_submit_urb(struct smsusb_device_t *dev,
|
|||
smsusb_onresponse,
|
||||
surb
|
||||
);
|
||||
surb->urb.transfer_flags |= URB_FREE_BUFFER;
|
||||
surb->urb->transfer_flags |= URB_FREE_BUFFER;
|
||||
|
||||
return usb_submit_urb(&surb->urb, GFP_ATOMIC);
|
||||
return usb_submit_urb(surb->urb, GFP_ATOMIC);
|
||||
}
|
||||
|
||||
static void smsusb_stop_streaming(struct smsusb_device_t *dev)
|
||||
|
@ -178,7 +178,7 @@ static void smsusb_stop_streaming(struct smsusb_device_t *dev)
|
|||
int i;
|
||||
|
||||
for (i = 0; i < MAX_URBS; i++) {
|
||||
usb_kill_urb(&dev->surbs[i].urb);
|
||||
usb_kill_urb(dev->surbs[i].urb);
|
||||
if (dev->surbs[i].wq.func)
|
||||
cancel_work_sync(&dev->surbs[i].wq);
|
||||
|
||||
|
@ -338,6 +338,8 @@ static void smsusb_term_device(struct usb_interface *intf)
|
|||
struct smsusb_device_t *dev = usb_get_intfdata(intf);
|
||||
|
||||
if (dev) {
|
||||
int i;
|
||||
|
||||
dev->state = SMSUSB_DISCONNECTED;
|
||||
|
||||
smsusb_stop_streaming(dev);
|
||||
|
@ -346,6 +348,9 @@ static void smsusb_term_device(struct usb_interface *intf)
|
|||
if (dev->coredev)
|
||||
smscore_unregister_device(dev->coredev);
|
||||
|
||||
for (i = 0; i < MAX_URBS; i++)
|
||||
usb_free_urb(dev->surbs[i].urb);
|
||||
|
||||
pr_debug("device 0x%p destroyed\n", dev);
|
||||
kfree(dev);
|
||||
}
|
||||
|
@ -463,7 +468,9 @@ static int smsusb_init_device(struct usb_interface *intf, int board_id)
|
|||
/* initialize urbs */
|
||||
for (i = 0; i < MAX_URBS; i++) {
|
||||
dev->surbs[i].dev = dev;
|
||||
usb_init_urb(&dev->surbs[i].urb);
|
||||
dev->surbs[i].urb = usb_alloc_urb(0, GFP_KERNEL);
|
||||
if (!dev->surbs[i].urb)
|
||||
goto err_unregister_device;
|
||||
}
|
||||
|
||||
pr_debug("smsusb_start_streaming(...).\n");
|
||||
|
@ -486,6 +493,7 @@ static int smsusb_init_device(struct usb_interface *intf, int board_id)
|
|||
return rc;
|
||||
|
||||
err_unregister_device:
|
||||
/* smsusb_term_device() frees any allocated urb. */
|
||||
smsusb_term_device(intf);
|
||||
#ifdef CONFIG_MEDIA_CONTROLLER_DVB
|
||||
media_device_unregister(mdev);
|
||||
|
|
Loading…
Reference in a new issue