[PATCH] libertas: fix spinlock recursion bug

Holger Schurig hs4233 at mail.mn-solutions.de
Wed Mar 26 11:27:50 EDT 2008


And yet another one:

libertas cmd: DNLD_CMD: command 0x001f, seq 21, size 16
BUG: spinlock recursion on CPU#0, lbs_main/1584
 lock: f7ce98d8, .magic: dead4ead, .owner: 
lbs_main/1584, .owner_cpu: 0
Pid: 1584, comm: lbs_main Not tainted 2.6.25-rc5-wl #19
 [<c01ccdb7>] spin_bug+0x76/0xb1
 [<c01ccecb>] _raw_spin_lock+0x34/0xc9
 [<c0306a73>] _spin_lock+0x13/0x15
 [<f884be4b>] if_cs_interrupt+0x96/0xb7 [libertas_cs]
 [<c0135d92>] handle_IRQ_event+0x21/0x48
 [<c0136fd5>] handle_level_irq+0x6f/0xba
 [<c010595a>] do_IRQ+0x53/0x6d
 [<c0104253>] common_interrupt+0x23/0x28
 [<c011bef5>] ? __do_softirq+0x2f/0x70
 [<c011bf5b>] do_softirq+0x25/0x2a
 [<c02b5ea4>] netif_rx_ni+0x24/0x3e
 [<f8af60e3>] lbs_process_rxed_packet+0x76b/0x7d8 [libertas]
 [<c02b024c>] ? __alloc_skb+0x4c/0xf8
 [<f884c096>] if_cs_get_int_status+0x22a/0x3d8 [libertas_cs]
 [<f8af10cd>] lbs_thread+0x2fe/0x745 [libertas]
 [<c0114edd>] ? default_wake_function+0x0/0xd
 [<f8af0dcf>] ? lbs_thread+0x0/0x745 [libertas]
 [<c0126f91>] kthread+0x39/0x60
 [<c0126f58>] ? kthread+0x0/0x60
 [<c01043c3>] kernel_thread_helper+0x7/0x10
 =======================


So, in short: this is a rat's nest. So far I found 
http://www.kernel.org/pub/linux/kernel/people/rusty/kernel-locking/ 
and hope that it's giving me the knowledge I need. But I think 
that this point

    Avoid holding spinlock for more than 5 lines of code and
    across any function call (except accessors like readb).

from the mentioned web page is quite often violated inside 
libertas.



More information about the libertas-dev mailing list