[linux-dvb] Nova-T 500 Dual DVB-T Oops

Chris Johns chris at contemporary.net.au
Thu Jan 4 12:38:51 CET 2007


Hello,

I am looking into the kernel oops I was getting. It is the same problem 
I posted here:

http://www.linuxtv.org/pipermail/linux-dvb/2006-December/015009.html

Upgraded to the latest FC5 kernel and have switched to a single 
processor kernel to simplify debugging.

I attach a cleaner couple of oops. It starts with the USB disconnects 
then a couple of I2C writes which fail as they are not I2C but USB 
writes then the oops. The first is in 'dvb_dmxdev_buffer_read'. The 
second oops is in 'dvb_demux_release'. Looking in the specifics of the 
code the mutex is claimed in release but no in the read. I attach a 
patch that uncomments the mutex code in the read and also adds the same 
to the poll function. With this change I have not seen any driver 
problems for the last couple of days and the USB does not disconnect.

I have had a quick look over the code and it may need further reviews. 
Someone with a bit more kernel knowledge should review this patch.

Regards
Chris
-------------- next part --------------
usb 2-1: USB disconnect, address 2
mt2060 I2C write failed
mt2060 I2C write failed
dvb-usb: Hauppauge Nova-T 500 Dual DVB-T successfully deinitialized and disconnected.
usb 2-1: new high speed USB device using ehci_hcd and address 3
usb 2-1: configuration #1 chosen from 1 choice
dvb-usb: found a 'Hauppauge Nova-T 500 Dual DVB-T' in warm state.
dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
DVB: registering new adapter (Hauppauge Nova-T 500 Dual DVB-T).
BUG: unable to handle kernel NULL pointer dereference at virtual address 0000001b
 printing eip:
f8aaaa59
*pde = 39f91067
Oops: 0000 [#1]
last sysfs file: /devices/pci0000:00/0000:00:1e.0/0000:02:02.2/usb2/idVendor
Modules linked in: mt2060(U) dvb_usb_dib0700(U) dib7000m(U) dib7000p(U) dvb_usb(U) dvb_core(U) dvb_pll(U) dib3000mc(U) dibx000_common(U) nfs fscache nfsd exportfs lockd nfs_acl autofs4 it87 hwmon_vid hwmon i2c_isa sunrpc video sbs i2c_ec container button battery asus_acpi ac ipv6 lp parport_pc parport usb_storage snd_emu10k1 snd_rawmidi snd_ac97_codec snd_ac97_bus snd_seq_dummy snd_seq_oss snd_seq_midi_event snd_seq snd_pcm_oss snd_mixer_oss snd_pcm snd_seq_device snd_timer snd_page_alloc snd_util_mem snd_hwdep snd sg skge soundcore serio_raw emu10k1_gp gameport i2c_i801 i2c_core uhci_hcd ide_cd ehci_hcd cdrom pcspkr dm_snapshot dm_zero dm_mirror dm_mod ext3 jbd ata_piix libata sd_mod scsi_mod
CPU:    0
EIP:    0060:[<f8aaaa59>]    Not tainted VLI
EFLAGS: 00010282   (2.6.18-1.2257.fc5 #1) 
EIP is at dvb_dmxdev_buffer_read+0x11/0x14d [dvb_core]
eax: 0000001b   ebx: 0000001b   ecx: ab4b1aac   edx: 00000800
esi: ab4b1aac   edi: 00000000   ebp: ab4b1aac   esp: c2412f40
ds: 007b   es: 007b   ss: 0068
Process mythbackend (pid: 25577, ti=c2412000 task=d04e57b0 task.ti=c2412000)
Stack: c042d6f9 00000800 c05f7c9e c2412e4c c2412e50 d5ccb800 00000000 c2412fa4 
       ab4b1aac ab4b1aac 04f45cfc f8aaabc3 04f45cfc c2412fa4 da00c6c0 f8aaab95 
       c045dfe0 c2412fa4 ab4b1aac da00c6c0 fffffff7 ffffffff c2412000 c045e368 
Call Trace:
 [<f8aaabc3>] dvb_dvr_read+0x2e/0x33 [dvb_core]
 [<c045dfe0>] vfs_read+0xa6/0x157
 [<c045e368>] sys_read+0x41/0x67
 [<c0402da7>] syscall_call+0x7/0xb
DWARF2 unwinder stuck at syscall_call+0x7/0xb
Leftover inexact backtrace:
 =======================
Code: 7a 00 00 f7 d3 83 e3 4b 89 da 83 ca 43 85 c0 0f 44 da 59 89 d8 5b 5b 5e 5f c3 55 89 cd 57 31 ff 56 53 89 c3 83 ec 1c 89 54 24 04 <83> 38 00 0f 84 29 01 00 00 8b 40 10 8b 74 24 30 85 c0 0f 84 f2 
EIP: [<f8aaaa59>] dvb_dmxdev_buffer_read+0x11/0x14d [dvb_core] SS:ESP 0068:c2412f40
 DVB: registering frontend 0 (DiBcom 3000MC/P)...
MT2060: successfully identified (IF1 = 1220)
dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
DVB: registering new adapter (Hauppauge Nova-T 500 Dual DVB-T).
DVB: registering frontend 1 (DiBcom 3000MC/P)...
MT2060: successfully identified (IF1 = 1220)
dvb-usb: Hauppauge Nova-T 500 Dual DVB-T successfully initialized and connected.
BUG: unable to handle kernel NULL pointer dereference at virtual address 00000000
 printing eip:
00000000
*pde = 39f91067
Oops: 0000 [#2]
last sysfs file: /devices/platform/i2c-9191/9191-0290/temp3_input
Modules linked in: mt2060(U) dvb_usb_dib0700(U) dib7000m(U) dib7000p(U) dvb_usb(U) dvb_core(U) dvb_pll(U) dib3000mc(U) dibx000_common(U) nfs fscache nfsd exportfs lockd nfs_acl autofs4 it87 hwmon_vid hwmon i2c_isa sunrpc video sbs i2c_ec container button battery asus_acpi ac ipv6 lp parport_pc parport usb_storage snd_emu10k1 snd_rawmidi snd_ac97_codec snd_ac97_bus snd_seq_dummy snd_seq_oss snd_seq_midi_event snd_seq snd_pcm_oss snd_mixer_oss snd_pcm snd_seq_device snd_timer snd_page_alloc snd_util_mem snd_hwdep snd sg skge soundcore serio_raw emu10k1_gp gameport i2c_i801 i2c_core uhci_hcd ide_cd ehci_hcd cdrom pcspkr dm_snapshot dm_zero dm_mirror dm_mod ext3 jbd ata_piix libata sd_mod scsi_mod
CPU:    0
EIP:    0060:[<00000000>]    Not tainted VLI
EFLAGS: 00010017   (2.6.18-1.2257.fc5 #1) 
EIP is at _stext+0x3fbffde0/0x3c
eax: 08d00ea4   ebx: 08d00ea4   ecx: 00000000   edx: 00000003
esi: 00000000   edi: 00000001   ebp: cdb05f3c   esp: cdb05f1c
ds: 007b   es: 007b   ss: 0068
Process mythbackend (pid: 25555, ti=cdb05000 task=e5014f10 task.ti=cdb05000)
Stack: c0416edb 00000000 00000003 f8ccf064 27290000 f8ccf064 00000000 00000001 
       cdb05f60 c0417300 00000000 00000000 00000003 00000292 e00a2d44 f8ccf000 
       00000000 e00a2d9c f8aaadb4 00000000 f8ccf08c 00000008 d73e3124 d73e3124 
Call Trace:
Inexact backtrace:
 [<c0416edb>] __wake_up_common+0x2f/0x53
 [<c0417300>] __wake_up+0x2a/0x3d
 [<f8aaadb4>] dvb_demux_release+0xd8/0xf3 [dvb_core]
 [<c045e726>] __fput+0xba/0x178
 [<c045c062>] filp_close+0x52/0x59
 [<c0402da7>] syscall_call+0x7/0xb
 =======================
Code:  Bad EIP value.
EIP: [<00000000>] _stext+0x3fbffde0/0x3c SS:ESP 0068:cdb05f1c
 <3>BUG: sleeping function called from invalid context at kernel/rwsem.c:20
in_atomic():0, irqs_disabled():1
 [<c0403f28>] dump_trace+0x69/0x1af
 [<c0404086>] show_trace_log_lvl+0x18/0x2c
 [<c0404601>] show_trace+0xf/0x11
 [<c040468b>] dump_stack+0x15/0x17
 [<c042da0c>] down_read+0x12/0x1f
 [<c042635f>] blocking_notifier_call_chain+0xe/0x29
 [<c041d522>] do_exit+0x1b/0x795
 [<c04045a2>] die+0x26b/0x290
 [<c05f99c2>] do_page_fault+0x408/0x4db
 [<c04038b9>] error_code+0x39/0x40
DWARF2 unwinder stuck at error_code+0x39/0x40
Leftover inexact backtrace:
 [<c05f007b>] dump_one_state+0x195/0x364
 [<c0416edb>] __wake_up_common+0x2f/0x53
 [<c0417300>] __wake_up+0x2a/0x3d
 [<f8aaadb4>] dvb_demux_release+0xd8/0xf3 [dvb_core]
 [<c045e726>] __fput+0xba/0x178
 [<c045c062>] filp_close+0x52/0x59
 [<c0402da7>] syscall_call+0x7/0xb
 =======================
invalid opcode: 0000 [#3]
last sysfs file: /devices/platform/i2c-9191/9191-0290/temp3_input
Modules linked in: mt2060(U) dvb_usb_dib0700(U) dib7000m(U) dib7000p(U) dvb_usb(U) dvb_core(U) dvb_pll(U) dib3000mc(U) dibx000_common(U) nfs fscache nfsd exportfs lockd nfs_acl autofs4 it87 hwmon_vid hwmon i2c_isa sunrpc video sbs i2c_ec container button battery asus_acpi ac ipv6 lp parport_pc parport usb_storage snd_emu10k1 snd_rawmidi snd_ac97_codec snd_ac97_bus snd_seq_dummy snd_seq_oss snd_seq_midi_event snd_seq snd_pcm_oss snd_mixer_oss snd_pcm snd_seq_device snd_timer snd_page_alloc snd_util_mem snd_hwdep snd sg skge soundcore serio_raw emu10k1_gp gameport i2c_i801 i2c_core uhci_hcd ide_cd ehci_hcd cdrom pcspkr dm_snapshot dm_zero dm_mirror dm_mod ext3 jbd ata_piix libata sd_mod scsi_mod
CPU:    0
EIP:    0060:[<c11d8868>]    Not tainted VLI
EFLAGS: 00010282   (2.6.18-1.2257.fc5 #1) 
EIP is at 0xc11d8868
eax: d2a764bc   ebx: 00000028   ecx: 80286f4e   edx: d81ef200
esi: 80286f4e   edi: 058447c8   ebp: efd94ecc   esp: efd94eb4
ds: 007b   es: 007b   ss: 0068
Process mythbackend (pid: 22225, ti=efd94000 task=e9342b50 task.ti=efd94000)
Stack: f8aaa10b efd94ecc d81ef200 d2a764bc 00000002 00000000 08c10b38 031145d4 
       08bf9000 05844ae8 058447e8 031145d4 08bf9000 05844ae8 058447f8 030e36c1 
       c059baef e8a29a80 00000000 e8a29a80 c05f890b c059c0ef d81efb00 00000000 
Call Trace:
Inexact backtrace:
 [<f8aaa10b>] dvb_usercopy+0xa9/0x100 [dvb_core]
 [<c059baef>] sock_set_timeout+0x21/0x6d
 [<c05f890b>] _spin_unlock_bh+0x5/0xd
 [<c059c0ef>] sock_setsockopt+0x499/0x4a3
 [<c042b25c>] autoremove_wake_function+0x0/0x35
 [<c059954e>] sockfd_lookup_light+0x24/0x3e
 [<f8aaa197>] dvb_generic_ioctl+0x35/0x3e [dvb_core]
 [<f8aaa162>] dvb_generic_ioctl+0x0/0x3e [dvb_core]
 [<c046cf5e>] do_ioctl+0x3e/0x4d
 [<c046d16c>] vfs_ioctl+0x1ff/0x216
 [<c046d1cf>] sys_ioctl+0x4c/0x65
 [<c0402da7>] syscall_call+0x7/0xb
 =======================
Code: 87 6e c1 00 00 00 80 01 00 00 00 ff ff ff ff 00 00 00 00 00 00 00 00 02 00 00 00 00 01 10 00 00 02 20 00 00 00 00 80 01 00 00 00 <ff> ff ff ff 00 00 00 00 00 00 00 00 13 f9 0b 00 00 01 10 00 00 
EIP: [<c11d8868>] 0xc11d8868 SS:ESP 0068:efd94eb4
 
-------------- next part --------------
--- v4l-dvb-3beb62e206ef/linux/drivers/media/dvb/dvb-core/dmxdev.c~	2007-01-04 22:29:55.000000000 +1100
+++ v4l-dvb-3beb62e206ef/linux/drivers/media/dvb/dvb-core/dmxdev.c	2007-01-02 15:28:37.000000000 +1100
@@ -229,11 +229,11 @@
 	struct dmxdev *dmxdev = dvbdev->priv;
 	int ret;
 
-	//mutex_lock(&dmxdev->mutex);
+	mutex_lock(&dmxdev->mutex);
 	ret = dvb_dmxdev_buffer_read(&dmxdev->dvr_buffer,
 				     file->f_flags & O_NONBLOCK,
 				     buf, count, ppos);
-	//mutex_unlock(&dmxdev->mutex);
+	mutex_unlock(&dmxdev->mutex);
 	return ret;
 }
 
@@ -1007,6 +1007,8 @@
 
 	dprintk("function : %s\n", __FUNCTION__);
 
+	mutex_lock(&dmxdev->mutex);
+
 	poll_wait(file, &dmxdev->dvr_buffer.queue, wait);
 
 	if ((file->f_flags & O_ACCMODE) == O_RDONLY) {
@@ -1018,6 +1020,8 @@
 	} else
 		mask |= (POLLOUT | POLLWRNORM | POLLPRI);
 
+	mutex_unlock(&dmxdev->mutex);
+
 	return mask;
 }
 


More information about the linux-dvb mailing list