Mailing List archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[linux-dvb] Re: Oops: saa7146_vv: saa7146_vv_init(): out of memory. aborting.



On Mon, Jan 31, 2005 at 12:19:19AM +0100, Martin Theodor Grewe wrote:
> Argh! The DVB-Driver crashed...
...
> modprobe: page allocation failure. order:4, mode:0x20
>  [<c0132882>] __alloc_pages+0x1c2/0x370
>  [<c0132a4f>] __get_free_pages+0x1f/0x40
>  [<c01084da>] dma_alloc_coherent+0xca/0x100
>  [<e0d2c232>] saa7146_vv_init+0xa2/0x180 [saa7146_vv]
>  [<e0f35ce4>] av7110_init_v4l+0x34/0x160 [dvb_ttpci]

Well, that's not our fault...

> Unable to handle kernel paging request at virtual address e0ce2f00
...
>  [<e0f321f8>] av7110_send_fw_cmd+0x48/0xc0 [dvb_ttpci]
>  [<e0f322e6>] av7110_fw_cmd+0x76/0xa0 [dvb_ttpci]
>  [<e0f3a951>] av7110_setup_irc_config+0x51/0xa0 [dvb_ttpci]
>  [<e0cc80b6>] av7110_ir_init+0x66/0xaf [dvb_ttpci]
>  [<e0cc801e>] av7110_init+0x1e/0x50 [dvb_ttpci]

...but this one is. av7110_ir.c needs to be rewritten
properly, apparently the author only cared to provide
a quick & dirty hack.

Anyway, could you try if the patch below fixes the crash:

Index: linux/drivers/media/dvb/ttpci/av7110.c
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/ttpci/av7110.c,v
retrieving revision 1.170
diff -u -p -r1.170 av7110.c
--- linux/drivers/media/dvb/ttpci/av7110.c	9 Jan 2005 22:05:24 -0000	1.170
+++ linux/drivers/media/dvb/ttpci/av7110.c	4 Feb 2005 20:40:01 -0000
@@ -2453,6 +2453,16 @@ err_no_mem:
 	av7110->dvb_adapter->priv = av7110;
 	frontend_init(av7110);
 
+#if defined(CONFIG_INPUT_EVDEV) || defined(CONFIG_INPUT_EVDEV_MODULE)
+	/* FIXME: this is a hack, just like av7110_setup_irc_config() is */
+	{
+		static int ir_initialized;
+		if (!ir_initialized) {
+			av7110_ir_init();
+			++ir_initialized;
+		}
+	}
+#endif
 	printk(KERN_INFO "dvb-ttpci: found av7110-%d.\n", av7110_num);
 	av7110->device_initialized = 1;
 	av7110_num++;
@@ -2640,18 +2650,6 @@ static int __init av7110_init(void)
 {
 	int retval;
 	retval = saa7146_register_extension(&av7110_extension);
-#if defined(CONFIG_INPUT_EVDEV) || defined(CONFIG_INPUT_EVDEV_MODULE)
-	if (retval)
-		goto failed_saa7146_register;
-
-	retval = av7110_ir_init();
-	if (retval)
-		goto failed_av7110_ir_init;
-	return 0;
-failed_av7110_ir_init:
-	saa7146_unregister_extension(&av7110_extension);
-failed_saa7146_register:
-#endif
 	return retval;
 }
 

If anyone wants to rewrite the av7110 IR stuff properly (so it works
for more than one card without initialization problems):
Patches are welcome.

Johannes




Home | Main Index | Thread Index