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
[email protected]
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits