Skip to content

Commit

Permalink
V4L/DVB (13184): gspca: Don't forget to resubmit URB's in case of an …
Browse files Browse the repository at this point in the history
…error

The gscpa core was not resubmitting URB's when the URB status was an error,
this means we will loose URB's (potentially all stopping the stream) in
case of sporadic USB issues. I've seen this with an Aiptek stv0680 based
PenCam connected through an USB 2.0 hub.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Hans de Goede authored and Mauro Carvalho Chehab committed Dec 5, 2009
1 parent 21f1b93 commit bf926ad
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions drivers/media/video/gspca/gspca.c
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ static void fill_frame(struct gspca_dev *gspca_dev,
if (!gspca_dev->frozen)
#endif
PDEBUG(D_ERR|D_PACK, "urb status: %d", urb->status);
return;
goto resubmit;
}
pkt_scan = gspca_dev->sd_desc->pkt_scan;
for (i = 0; i < urb->number_of_packets; i++) {
Expand Down Expand Up @@ -174,6 +174,7 @@ static void fill_frame(struct gspca_dev *gspca_dev,
pkt_scan(gspca_dev, frame, data, len);
}

resubmit:
/* resubmit the URB */
st = usb_submit_urb(urb, GFP_ATOMIC);
if (st < 0)
Expand Down Expand Up @@ -220,7 +221,7 @@ static void bulk_irq(struct urb *urb)
if (!gspca_dev->frozen)
#endif
PDEBUG(D_ERR|D_PACK, "urb status: %d", urb->status);
return;
goto resubmit;
}

/* check the availability of the frame buffer */
Expand All @@ -235,6 +236,7 @@ static void bulk_irq(struct urb *urb)
urb->actual_length);
}

resubmit:
/* resubmit the URB */
if (gspca_dev->cam.bulk_nurbs != 0) {
st = usb_submit_urb(urb, GFP_ATOMIC);
Expand Down

0 comments on commit bf926ad

Please sign in to comment.