[PATCH] libertas: fix spinlock recursion bug

Dan Williams dcbw at redhat.com
Wed Mar 26 11:17:30 EDT 2008


On Wed, 2008-03-26 at 15:41 +0100, Holger Schurig wrote:
> Hmm, that isn't the end of my spinlock problems. When I'm 
> associated and ping, I get another recursion:

Hmm, so netif_rx() can eventually result in call to hard_start_xmit()
later down the stack?  Ugh.  It's probably a consequence of the driver
not poking the network stack in the right way to say "hey, I'm busy" or
not punting something to a workqueue or whatever.

I agree the indirection in the current SDIO and USB drivers sucks, but
I'm getting more and more convinced that the way that the CF driver is
handling this sucks too.

Dan

> libertas assoc: associated to 00:13:19:80:da:30
> BUG: spinlock recursion on CPU#0, lbs_main/5566
>  lock: f58b58d8, .magic: dead4ead, .owner: 
> lbs_main/5566, .owner_cpu: 0
> Pid: 5566, comm: lbs_main Not tainted 2.6.25-rc5-wl #19
>  [<c01ccdb7>] spin_bug+0x76/0xb1
>  [<c01ccecb>] _raw_spin_lock+0x34/0xc9
>  [<c0306984>] _spin_lock_irqsave+0x17/0x1c
>  [<f8c33cdf>] lbs_hard_start_xmit+0x61/0x4e2 [libertas]
>  [<c0306bef>] ? _spin_unlock+0x8/0x1f
>  [<c014f497>] ? cache_alloc_refill+0x18c/0x439
>  [<c02b449b>] dev_hard_start_xmit+0x16f/0x1dc
>  [<c02c0f8b>] __qdisc_run+0x7a/0x14e
>  [<c02b67ba>] dev_queue_xmit+0x119/0x23b
>  [<c02bb187>] neigh_resolve_output+0x20a/0x236
>  [<c02b978e>] neigh_update+0x2c0/0x36a
>  [<c02c04e3>] ? eth_header_cache_update+0x0/0x12
>  [<c02e4331>] arp_process+0x4d6/0x50e
>  [<c02afc6d>] ? skb_release_data+0x84/0x89
>  [<c02afb6d>] ? __kfree_skb+0x61/0x64
>  [<c02e440c>] arp_rcv+0xa3/0xb3
>  [<c02b4021>] netif_receive_skb+0x1f7/0x26a
>  [<c02b643c>] process_backlog+0x5b/0xa5
>  [<c02b5fa3>] net_rx_action+0x7f/0x142
>  [<c011befe>] __do_softirq+0x38/0x70
>  [<c011bf5b>] do_softirq+0x25/0x2a
>  [<c02b5ea4>] netif_rx_ni+0x24/0x3e
>  [<f8c33b59>] lbs_process_rxed_packet+0x755/0x7c0 [libertas]
>  [<c02b024c>] ? __alloc_skb+0x4c/0xf8
>  [<f88f9096>] if_cs_get_int_status+0x22a/0x3d8 [libertas_cs]
>  [<f8c2ef5e>] lbs_thread+0x2fe/0x745 [libertas]
>  [<c0114edd>] ? default_wake_function+0x0/0xd
>  [<f8c2ec60>] ? lbs_thread+0x0/0x745 [libertas]
>  [<c0126f91>] kthread+0x39/0x60
>  [<c0126f58>] ? kthread+0x0/0x60
>  [<c01043c3>] kernel_thread_helper+0x7/0x10
>  =======================
> 




More information about the libertas-dev mailing list