[Linux-parport] [BUG] PLIP: Badness in enable_irq and Oops
Jiri Slaby
jirislaby at gmail.com
Sat Aug 13 20:18:26 EDT 2005
Hello.
While I have been using plip (without that, it is ok), this badness
appeared several times:
Badness in enable_irq at /l/latest/xxx/kernel/irq/manage.c:113
[<c0103db8>] dump_stack+0x1e/0x20
[<c0141e28>] enable_irq+0x6f/0xce
[<e1904c43>] plip_error+0xae/0x10c [plip]
[<e19031eb>] plip_bh+0x4a/0x97 [plip]
[<c012eb63>] worker_thread+0x18f/0x241
[<c0132f07>] kthread+0xb1/0xb5
[<c0101199>] kernel_thread_helper+0x5/0xb
---------------------------
| preempt count: 00000001 ]
| 1 level deep critical section nesting:
----------------------------------------
.. [<c03cf6c7>] .... _spin_lock_irqsave+0x10/0x70
and finally, one oops:
Aug 14 00:31:20 bellona kernel: Unable to handle kernel NULL pointer
dereference at virtual address 0000008c
Aug 14 00:31:20 bellona kernel: printing eip:
Aug 14 00:31:20 bellona kernel: e190357a
Aug 14 00:31:20 bellona kernel: *pde = 00000000
Aug 14 00:31:20 bellona kernel: Oops: 0000 [#1]
Aug 14 00:31:20 bellona kernel: PREEMPT SMP
Aug 14 00:31:20 bellona kernel: last sysfs file: /class/net/plip0/ifindex
Aug 14 00:31:20 bellona kernel: Modules linked in: parport_pc plip
parport sunrpc ipv6 video hotkey ftdi_sio usbserial i2c_i801
Aug 14 00:31:20 bellona kernel: CPU: 1
Aug 14 00:31:20 bellona kernel: EIP: 0060:[<e190357a>] Not tainted VLI
Aug 14 00:31:20 bellona kernel: EFLAGS: 00010292 (2.6.13-rc5-mm1)
Aug 14 00:31:20 bellona kernel: EIP is at plip_type_trans+0xf/0xbf [plip]
Aug 14 00:31:20 bellona kernel: eax: d930c74c ebx: 00000000 ecx:
dfe41000 edx: d930c400
Aug 14 00:31:20 bellona kernel: esi: d930c400 edi: 00000bb8 ebp:
dfe41edc esp: dfe41ec8
Aug 14 00:31:20 bellona kernel: ds: 007b es: 007b ss: 0068
Aug 14 00:31:20 bellona kernel: Process events/1 (pid: 9,
threadinfo=dfe41000 task=dff026a0)
Aug 14 00:31:20 bellona kernel: Stack: 00000001 00000000 00000000
d930c400 00000bb8 dfe41f20 e1903670 00000000
Aug 14 00:31:21 bellona kernel: d930c400 000001d9 d930c6cb
b477541a 000001d9 00000000 00000140 dff027dc
Aug 14 00:31:21 bellona kernel: dff026a0 ce1db280 c140e160
d930c640 d930c400 d930c74c dfe41f4c e19031eb
Aug 14 00:31:21 bellona kernel: Call Trace:
Aug 14 00:31:21 bellona kernel: [<c0103d64>] show_stack+0x9b/0xd1
Aug 14 00:31:21 bellona kernel: [<c0103f43>] show_registers+0x189/0x21f
Aug 14 00:31:21 bellona kernel: [<c010417d>] die+0x11b/0x19d
Aug 14 00:31:21 bellona kernel: [<c03d03cc>] do_page_fault+0x33c/0x66e
Aug 14 00:31:21 bellona kernel: [<c01039ef>] error_code+0x4f/0x54
Aug 14 00:31:21 bellona kernel: [<e1903670>]
plip_receive_packet+0x46/0xb3c [plip]
Aug 14 00:31:21 bellona kernel: [<e19031eb>] plip_bh+0x4a/0x97 [plip]
Aug 14 00:31:21 bellona kernel: [<c012eb63>] worker_thread+0x18f/0x241
Aug 14 00:31:21 bellona kernel: [<c0132f07>] kthread+0xb1/0xb5
Aug 14 00:31:21 bellona kernel: [<c0101199>] kernel_thread_helper+0x5/0xb
Aug 14 00:31:21 bellona kernel: ---------------------------
Aug 14 00:31:21 bellona kernel: | preempt count: 00000001 ]
Aug 14 00:31:21 bellona kernel: | 1 level deep critical section nesting:
Aug 14 00:31:21 bellona kernel: ----------------------------------------
Aug 14 00:31:21 bellona kernel: .. [<c03cf6c7>] ....
_spin_lock_irqsave+0x10/0x70
Aug 14 00:31:21 bellona kernel: .....[<c01040a1>] .. ( <= die+0x3f/0x19d)
Aug 14 00:31:21 bellona kernel:
Aug 14 00:31:21 bellona kernel: Code: eb b5 c7 04 24 c8 57 90 e1 e8 6e
ac 81 de e8 38 08 80
de eb c3 55 89 e5 31 c0 5d c3 55 89 e5 57 56 53 83 ec 08 8b 5d 08 8b 75
0c <8b> 8b 8c 00 00
00 89 4b 24 0f b7 56 66 8b 43 58 39 c2 77 17 29
I founded out, that in plip_error (drivers/plip.c)
ENABLE(dev->irq);
is called by before not calling
DISABLE(dev->irq);
in plip_bh_timeout_error in
if (error == HS_TIMEOUT) { ...
My opinion is, that ENABLE in plip_error should be called only if the
error was HS_TIMEOUT too.
That was badness. And what about the oops:
case PLIP_PK_DONE:
/* Inform the upper layer for the arrival of a packet. */
rcv->skb->protocol=plip_type_trans(rcv->skb, dev); <----
the skb here is NULL
netif_rx(rcv->skb);
Should we inform somebody, if skb is NULL?
I don't know if the 2 things have something, that join them (at least,
they are in plip), so I send it as one e-mail.
Linux bellona 2.6.13-rc5-mm1 #18 SMP PREEMPT Sun Aug 7 17:48:53 CEST
2005 i686 i686 i386 GNU/Linux
--
Jiri Slaby www.fi.muni.cz/~xslaby
~\-/~ jirislaby at gmail.com ~\-/~
241B347EC88228DE51EE A49C4A73A25004CB2A10
More information about the Linux-parport
mailing list