This patch removes the use of urb->next in usbvideo.c and resubmits the URB in the completion handler.
cheers si diff -urN -X /home/spse/dontdiff linux-2.5.20/drivers/usb/media/usbvideo.c linux-2.5.20-usbvideo/drivers/usb/media/usbvideo.c --- linux-2.5.20/drivers/usb/media/usbvideo.c Mon Jun 3 02:44:49 2002 +++ linux-2.5.20-usbvideo/drivers/usb/media/usbvideo.c Wed Jun 5 13:01:57 2002 @@ -1802,7 +1802,7 @@ static void usbvideo_IsocIrq(struct urb *urb) { - int i, len; + int i, ret, len; uvd_t *uvd = urb->context; /* We don't want to do anything if we are about to be removed! */ @@ -1844,6 +1844,11 @@ urb->iso_frame_desc[i].status = 0; urb->iso_frame_desc[i].actual_length = 0; } + urb->status = 0; + urb->dev = uvd->dev; + ret = usb_submit_urb (urb, GFP_KERNEL); + if(ret) + err("usb_submit_urb error (%d)", ret); return; } @@ -1889,6 +1894,7 @@ urb->dev = dev; urb->context = uvd; urb->pipe = usb_rcvisocpipe(dev, uvd->video_endp); + urb->interval = 1; urb->transfer_flags = USB_ISO_ASAP; urb->transfer_buffer = uvd->sbuf[i].data; urb->complete = usbvideo_IsocIrq; @@ -1898,14 +1904,6 @@ urb->iso_frame_desc[j].offset = k; urb->iso_frame_desc[j].length = uvd->iso_packet_len; } - } - - /* Link URBs into a ring so that they invoke each other infinitely */ - for (i=0; i < USBVIDEO_NUMSBUF; i++) { - if ((i+1) < USBVIDEO_NUMSBUF) - uvd->sbuf[i].urb->next = uvd->sbuf[i+1].urb; - else - uvd->sbuf[i].urb->next = uvd->sbuf[0].urb; } /* Submit all URBs */ _______________________________________________________________ Don't miss the 2002 Sprint PCS Application Developer's Conference August 25-28 in Las Vegas - http://devcon.sprintpcs.com/adp/index.cfm?source=osdntextlink _______________________________________________ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel