[linux-dvb] Re: IRQ issues with Nova-S CI when using CI Module
Andrew de Quincey
adq_dvb at lidskialf.net
Thu Jul 28 21:36:34 CEST 2005
On Thursday 28 Jul 2005 17:32, Michael Ditum wrote:
> I've just has a chance to test the changes you made... unfortunately I
> could not test the latest CVS version as I couldn't get 2.6.13 to boot
> on my hardware... some problem with lvm... Instead I basically took
> the changes you made to dvb_ca_en50221.c and put them into my source
> tree which is fedora core 3's 2.6.12-1.1372 kernel. When I booted up
> and run vlc I got the following error in /var/log/messages....
>
> Jul 26 17:12:25 bloodhound kernel: Debug: sleeping function called
> from invalid context at arch/i386/lib/usercopy.c:601
> Jul 26 17:12:25 bloodhound kernel: in_atomic():0, irqs_disabled():1
> Jul 26 17:12:25 bloodhound kernel: [<c011ed91>] __might_sleep+0x9d/0xae
> Jul 26 17:12:25 bloodhound kernel: [<c01d2f11>] copy_to_user+0x18/0x5f
> Jul 26 17:12:25 bloodhound kernel: [<e099f67b>]
> dvb_ringbuffer_pkt_read+0xea/0x111 [dvb_core]
> Jul 26 17:12:25 bloodhound kernel: [<e099b399>]
> dvb_ca_en50221_io_read+0x18f/0x3ae [dvb_core]
> Jul 26 17:12:25 bloodhound kernel: [<c0172415>] poll_freewait+0x34/0x3c
> Jul 26 17:12:25 bloodhound kernel: [<c0160a9f>] vfs_read+0x106/0x108
> Jul 26 17:12:25 bloodhound kernel: [<c0160ce1>] sys_read+0x41/0x6a
> Jul 26 17:12:25 bloodhound kernel: [<c0103fe9>] syscall_call+0x7/0xb
>
> I get one of these roughly every second. Do the changes you made
> require more changes than the ones in dvb_ca_en50221.c?
Arrrgh, I didn't realise copy_to_user called __might_sleep. OK, I've fixed the
problems in the _irq_ handler. I'll sort out these ones next :)
And yeah - you just need to copy dvb_ca_en50221.c for the changes for your
card.
> I then modified the kernel adding in my modifications and didn't get
> any IRQ messages including the NMI releated one. I have noticed that
> cat /proc/interrupts now shows...
>
> [root at bloodhound php]# cat /proc/interrupts
> CPU0 CPU1
> 0: 155663 158340 IO-APIC-edge timer
> 1: 6 4 IO-APIC-edge i8042
> 8: 1 0 IO-APIC-edge rtc
> 9: 0 1 IO-APIC-level acpi
> 12: 51 50 IO-APIC-edge i8042
> 15: 1186 1257 IO-APIC-edge ide1
> 169: 0 0 IO-APIC-level uhci_hcd:usb2
> 177: 4004 3309 IO-APIC-level ioc0
> 185: 17 13 IO-APIC-level ioc1
> 193: 18717 18 IO-APIC-level eth0
> 201: 0 0 IO-APIC-level saa7146 (0)
> 209: 1890 843 IO-APIC-level saa7146 (1)
> 217: 0 2 IO-APIC-level saa7146 (2)
> 225: 0 0 IO-APIC-level ehci_hcd:usb1
> 233: 0 0 IO-APIC-level uhci_hcd:usb3
> NMI: 0 0
> LOC: 307139 307581
> ERR: 0
> MIS: 0
From the above, you're now using your motherboard's APIC instead of the legacy
IRQ routing. Definitely a bug in legacy mode support somewhere with your
system. But as it works when you use APIC, which should theoretically give
better performance anyway.... :)
More information about the linux-dvb
mailing list