[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