The patch number 9606 was added via Mauro Carvalho Chehab <[EMAIL PROTECTED]> to http://linuxtv.org/hg/v4l-dvb master development tree.
Kernel patches in this development tree may be modified to be backward compatible with older kernels. Compatibility modifications will be removed before inclusion into the mainstream Kernel If anyone has any objections, please let us know by sending a message to: [EMAIL PROTECTED] ------ From: Mauro Carvalho Chehab <[EMAIL PROTECTED]> merge: http://linuxtv.org/hg/~dougsland/dvb-fix Priority: normal Signed-off-by: Mauro Carvalho Chehab <[EMAIL PROTECTED]> --- linux/drivers/media/dvb/dvb-usb/usb-urb.c | 23 ++++++---- linux/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c | 15 ++++++ linux/drivers/media/dvb/ttusb-dec/ttusb_dec.c | 7 +++ 3 files changed, 37 insertions(+), 8 deletions(-) diff -r 9c8b5bb067c2 -r c95684f09ecb linux/drivers/media/dvb/dvb-usb/usb-urb.c --- a/linux/drivers/media/dvb/dvb-usb/usb-urb.c Wed Nov 12 02:10:06 2008 -0200 +++ b/linux/drivers/media/dvb/dvb-usb/usb-urb.c Wed Nov 12 02:28:57 2008 -0200 @@ -139,7 +139,7 @@ stream->buf_list[stream->buf_num], (long static int usb_bulk_urb_init(struct usb_data_stream *stream) { - int i; + int i, j; if ((i = usb_allocate_stream_buffers(stream,stream->props.count, stream->props.u.bulk.buffersize)) < 0) @@ -147,9 +147,13 @@ static int usb_bulk_urb_init(struct usb_ /* allocate the URBs */ for (i = 0; i < stream->props.count; i++) { - if ((stream->urb_list[i] = usb_alloc_urb(0,GFP_ATOMIC)) == NULL) - return -ENOMEM; - + stream->urb_list[i] = usb_alloc_urb(0, GFP_ATOMIC); + if (!stream->urb_list[i]) { + deb_mem("not enough memory for urb_alloc_urb!.\n"); + for (j = 0; j < i; j++) + usb_free_urb(stream->urb_list[i]); + return -ENOMEM; + } usb_fill_bulk_urb( stream->urb_list[i], stream->udev, usb_rcvbulkpipe(stream->udev,stream->props.endpoint), stream->buf_list[i], @@ -174,9 +178,14 @@ static int usb_isoc_urb_init(struct usb_ for (i = 0; i < stream->props.count; i++) { struct urb *urb; int frame_offset = 0; - if ((stream->urb_list[i] = - usb_alloc_urb(stream->props.u.isoc.framesperurb,GFP_ATOMIC)) == NULL) - return -ENOMEM; + + stream->urb_list[i] = usb_alloc_urb(stream->props.u.isoc.framesperurb, GFP_ATOMIC); + if (!stream->urb_list[i]) { + deb_mem("not enough memory for urb_alloc_urb!\n"); + for (j = 0; j < i; j++) + usb_free_urb(stream->urb_list[i]); + return -ENOMEM; + } urb = stream->urb_list[i]; diff -r 9c8b5bb067c2 -r c95684f09ecb linux/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c --- a/linux/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c Wed Nov 12 02:10:06 2008 -0200 +++ b/linux/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c Wed Nov 12 02:28:57 2008 -0200 @@ -827,6 +827,12 @@ static int ttusb_alloc_iso_urbs(struct t FRAMES_PER_ISO_BUF * ISO_BUF_COUNT, &ttusb->iso_dma_handle); + + if (!ttusb->iso_buffer) { + dprintk("%s: pci_alloc_consistent - not enough memory\n", + __func__); + return -ENOMEM; + } memset(ttusb->iso_buffer, 0, ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF * ISO_BUF_COUNT); @@ -1679,7 +1685,14 @@ static int ttusb_probe(struct usb_interf ttusb_setup_interfaces(ttusb); - ttusb_alloc_iso_urbs(ttusb); + result = ttusb_alloc_iso_urbs(ttusb); + if (result < 0) { + dprintk("%s: ttusb_alloc_iso_urbs - failed\n", __func__); + mutex_unlock(&ttusb->semi2c); + kfree(ttusb); + return result; + } + if (ttusb_init_controller(ttusb)) printk("ttusb_init_controller: error\n"); diff -r 9c8b5bb067c2 -r c95684f09ecb linux/drivers/media/dvb/ttusb-dec/ttusb_dec.c --- a/linux/drivers/media/dvb/ttusb-dec/ttusb_dec.c Wed Nov 12 02:10:06 2008 -0200 +++ b/linux/drivers/media/dvb/ttusb-dec/ttusb_dec.c Wed Nov 12 02:28:57 2008 -0200 @@ -1166,6 +1166,12 @@ static int ttusb_dec_alloc_iso_urbs(stru ISO_BUF_COUNT), &dec->iso_dma_handle); + if (!dec->iso_buffer) { + dprintk("%s: pci_alloc_consistent - not enough memory\n", + __func__); + return -ENOMEM; + } + memset(dec->iso_buffer, 0, ISO_FRAME_SIZE * (FRAMES_PER_ISO_BUF * ISO_BUF_COUNT)); @@ -1263,6 +1269,7 @@ static int ttusb_dec_init_usb(struct ttu dec->irq_buffer = usb_buffer_alloc(dec->udev,IRQ_PACKET_SIZE, GFP_ATOMIC, &dec->irq_dma_handle); if(!dec->irq_buffer) { + usb_free_urb(dec->irq_urb); return -ENOMEM; } usb_fill_int_urb(dec->irq_urb, dec->udev,dec->irq_pipe, --- Patch is available at: http://linuxtv.org/hg/v4l-dvb/rev/c95684f09ecb658594e48a623dffa3d279132040 _______________________________________________ linuxtv-commits mailing list linuxtv-commits@linuxtv.org http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits