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

Reply via email to