All of lore.kernel.org
 help / color / mirror / Atom feed
* soft-safe -> soft-unsafe lock order detected
@ 2009-02-10 16:33 ` Gabor Juhos
  0 siblings, 0 replies; 8+ messages in thread
From: Gabor Juhos @ 2009-02-10 16:33 UTC (permalink / raw)
  To: ath9k-devel@lists.ath9k.org, linux-wireless

Hi,

I'm testing the ath9k driver in STA mode on an Atheros AR913x based board.
Yesterday while i have transferred a large file through wireless link, i got
this little gem with kernel 2.6.28.2 and compat-wireless-2009-02-02.

======================================================
[ INFO: soft-safe -> soft-unsafe lock order detected ]
2.6.28.2 #106
------------------------------------------------------
phy0/443 [HC0[0]:SC0[0]:HE0:SE1] is trying to acquire:
 (&local->key_lock){....}, at: [<c0206e4c>] ieee80211_key_free+0x78/0xe0 [mac80211]

and this task is already holding:
 (&local->sta_lock){.+..}, at: [<c01ebc5c>] sta_info_unlink+0x34/0x70 [mac80211]
which would create a new lock dependency:
 (&local->sta_lock){.+..} -> (&local->key_lock){....}

but this new dependency connects a soft-irq-safe lock:
 (&local->sta_lock){.+..}
... which became soft-irq-safe at:
  [<800b21cc>] __lock_acquire+0x5a8/0x844
  [<800b24c4>] lock_acquire+0x5c/0x84
  [<8006b980>] _spin_lock_irqsave+0x50/0x74
  [<c020570c>] ieee80211_beacon_get+0x14c/0x3a4 [mac80211]
  [<c0341e08>] ath9k_beacon_tasklet+0x304/0x5c4 [ath9k]
  [<8008fd60>] tasklet_action+0x84/0xf0
  [<8008f74c>] __do_softirq+0x7c/0x130
  [<8008f84c>] do_softirq+0x4c/0xa0
  [<8006082c>] ret_from_irq+0x0/0x4
  [<80060b00>] r4k_wait+0x20/0x40
  [<8006dd50>] cpu_idle+0x20/0x40

to a soft-irq-unsafe lock:
 (todo_lock){--..}
... which became soft-irq-unsafe at:
...  [<800b2248>] __lock_acquire+0x624/0x844
  [<800b24c4>] lock_acquire+0x5c/0x84
  [<8006b8c4>] _spin_lock+0x34/0x48
  [<c0206d9c>] ieee80211_set_default_key+0x4b8/0x4f0 [mac80211]

other info that might help us debug this:

4 locks held by phy0/443:
 #0:  ((wiphy_name(local->hw.wiphy))){--..}, at: [<8009c900>]
run_workqueue+0x5c/0x230
 #1:  (&ifsta->work){--..}, at: [<8009c900>] run_workqueue+0x5c/0x230
 #2:  (rcu_read_lock){..--}, at: [<c01f462c>]
ieee80211_sta_set_bssid+0x5bc/0x6c8 [mac80211]
 #3:  (&local->sta_lock){.+..}, at: [<c01ebc5c>] sta_info_unlink+0x34/0x70
[mac80211]

the soft-irq-safe lock's dependencies:
-> (&local->sta_lock){.+..} ops: 0 {
   initial-use  at:
                        [<800b2260>] __lock_acquire+0x63c/0x844
                        [<800b24c4>] lock_acquire+0x5c/0x84
                        [<8006b980>] _spin_lock_irqsave+0x50/0x74
                        [<c01ec30c>] sta_info_flush+0xa0/0x26c [mac80211]
                        [<c01f9950>] ieee80211_if_change_type+0xd10/0x122c
[mac80211]
                        [<c01f98ac>] ieee80211_if_change_type+0xc6c/0x122c
[mac80211]
   in-softirq-W at:
                        [<800b21cc>] __lock_acquire+0x5a8/0x844
                        [<800b24c4>] lock_acquire+0x5c/0x84
                        [<8006b980>] _spin_lock_irqsave+0x50/0x74
                        [<c020570c>] ieee80211_beacon_get+0x14c/0x3a4 [mac80211]
                        [<c0341e08>] ath9k_beacon_tasklet+0x304/0x5c4 [ath9k]
                        [<8008fd60>] tasklet_action+0x84/0xf0
                        [<8008f74c>] __do_softirq+0x7c/0x130
                        [<8008f84c>] do_softirq+0x4c/0xa0
                        [<8006082c>] ret_from_irq+0x0/0x4
                        [<80060b00>] r4k_wait+0x20/0x40
                        [<8006dd50>] cpu_idle+0x20/0x40
 }
 ... key      at: [<c0223d70>] __this_module+0x190/0xffff29dc [mac80211]
 -> (&sta->flaglock){.+..} ops: 0 {
    initial-use  at:
                          [<800b2260>] __lock_acquire+0x63c/0x844
                          [<800b24c4>] lock_acquire+0x5c/0x84
                          [<8006b980>] _spin_lock_irqsave+0x50/0x74
                          [<c01ff8b4>] ieee80211_rx_irqsafe+0x14fc/0x3a9c [mac80211]
                          [<801d2508>] dev_alloc_skb+0x1c/0x48
    in-softirq-W at:
                          [<800b21cc>] __lock_acquire+0x5a8/0x844
                          [<800b24c4>] lock_acquire+0x5c/0x84
                          [<8006b980>] _spin_lock_irqsave+0x50/0x74
                          [<c01ff8b4>] ieee80211_rx_irqsafe+0x14fc/0x3a9c [mac80211]
                          [<801d2508>] dev_alloc_skb+0x1c/0x48
  }
  ... key      at: [<c0223d78>] __this_module+0x198/0xffff29dc [mac80211]
 ... acquired at:
   [<800b18c4>] validate_chain+0xb20/0xe80
   [<800b23c4>] __lock_acquire+0x7a0/0x844
   [<800b24c4>] lock_acquire+0x5c/0x84
   [<8006b980>] _spin_lock_irqsave+0x50/0x74
   [<c01ebae4>] ieee80211_alloc_hw+0x2320/0x2464 [mac80211]

 -> (&txq->axq_lock){-+..} ops: 0 {
    initial-use  at:
                          [<800b2260>] __lock_acquire+0x63c/0x844
                          [<800b24c4>] lock_acquire+0x5c/0x84
                          [<8006b918>] _spin_lock_bh+0x40/0x58
                          [<c0348ac4>] ath_draintxq+0x54/0x2f8 [ath9k]
                          [<c034a530>] ath_drain_all_txq+0x164/0x194 [ath9k]
                          [<c0343f50>] ath_rf_name+0x196c/0x2418 [ath9k]
    in-softirq-W at:
                          [<800b21cc>] __lock_acquire+0x5a8/0x844
                          [<800b24c4>] lock_acquire+0x5c/0x84
                          [<8006b918>] _spin_lock_bh+0x40/0x58
                          [<c0349d2c>] ath_tx_tasklet+0xf0/0x5e8 [ath9k]
                          [<c0345034>] ath_reset+0x568/0x948 [ath9k]
    hardirq-on-W at:
                          [<800b2224>] __lock_acquire+0x600/0x844
                          [<800b24c4>] lock_acquire+0x5c/0x84
                          [<8006b918>] _spin_lock_bh+0x40/0x58
                          [<c0348ac4>] ath_draintxq+0x54/0x2f8 [ath9k]
                          [<c034a530>] ath_drain_all_txq+0x164/0x194 [ath9k]
                          [<c0343f50>] ath_rf_name+0x196c/0x2418 [ath9k]
  }
  ... key      at: [<c036b8d8>] btcoex_enable+0x5d4/0xfffe32d8 [ath9k]
 ... acquired at:
   [<800b18c4>] validate_chain+0xb20/0xe80
   [<800b23c4>] __lock_acquire+0x7a0/0x844
   [<800b24c4>] lock_acquire+0x5c/0x84
   [<8006b8c4>] _spin_lock+0x34/0x48
   [<c034ad9c>] ath_tx_node_cleanup+0x64/0x194 [ath9k]
   [<c01ebb90>] ieee80211_alloc_hw+0x23cc/0x2464 [mac80211]


the soft-irq-unsafe lock's dependencies:
-> (todo_lock){--..} ops: 0 {
   initial-use  at:
                        [<800b2260>] __lock_acquire+0x63c/0x844
                        [<800b24c4>] lock_acquire+0x5c/0x84
                        [<8006b8c4>] _spin_lock+0x34/0x48
                        [<c0206d9c>] ieee80211_set_default_key+0x4b8/0x4f0
[mac80211]
   softirq-on-W at:
                        [<800b2248>] __lock_acquire+0x624/0x844
                        [<800b24c4>] lock_acquire+0x5c/0x84
                        [<8006b8c4>] _spin_lock+0x34/0x48
                        [<c0206d9c>] ieee80211_set_default_key+0x4b8/0x4f0
[mac80211]
   hardirq-on-W at:
                        [<800b2224>] __lock_acquire+0x600/0x844
                        [<800b24c4>] lock_acquire+0x5c/0x84
                        [<8006b8c4>] _spin_lock+0x34/0x48
                        [<c0206d9c>] ieee80211_set_default_key+0x4b8/0x4f0
[mac80211]
 }
 ... key      at: [<c0223a30>] mac80211_config_ops+0xd0/0xffff2c5c [mac80211]
 -> (&cwq->lock){.+..} ops: 0 {
    initial-use  at:
                          [<800b2260>] __lock_acquire+0x63c/0x844
                          [<800b24c4>] lock_acquire+0x5c/0x84
                          [<8006b980>] _spin_lock_irqsave+0x50/0x74
                          [<8009d4b0>] __queue_work+0x20/0x54
                          [<8009d550>] queue_work_on+0x50/0x6c
                          [<8009c4c0>] call_usermodehelper_exec+0xf0/0x130
                          [<8017bb68>] kobject_uevent_env+0x350/0x3bc
                          [<8017aedc>] kset_register+0x44/0x5c
                          [<801ad7c4>] bus_register+0xb0/0x260
                          [<802f92f8>] platform_bus_init+0x34/0x60
                          [<802f942c>] driver_init+0x30/0x44
                          [<802e95d4>] kernel_init+0x78/0x104
                          [<8006de18>] kernel_thread_helper+0x10/0x18
    in-softirq-W at:
                          [<800b21cc>] __lock_acquire+0x5a8/0x844
                          [<800b24c4>] lock_acquire+0x5c/0x84
                          [<8006b980>] _spin_lock_irqsave+0x50/0x74
                          [<8009d4b0>] __queue_work+0x20/0x54
                          [<8009d550>] queue_work_on+0x50/0x6c
                          [<80094d50>] run_timer_softirq+0x120/0x19c
                          [<8008f74c>] __do_softirq+0x7c/0x130
                          [<8008f84c>] do_softirq+0x4c/0xa0
                          [<8006082c>] ret_from_irq+0x0/0x4
  }
  ... key      at: [<80670880>] __key.18562+0x0/0x8
  -> (&q->lock){.+..} ops: 0 {
     initial-use  at:
                            [<800b2260>] __lock_acquire+0x63c/0x844
                            [<800b24c4>] lock_acquire+0x5c/0x84
                            [<8006bdcc>] _spin_lock_irq+0x48/0x60
                            [<80068ac4>] wait_for_common+0x3c/0x188
                            [<800a0fb4>] kthread_create+0x80/0xc0
                            [<803048fc>] cpu_callback+0x68/0xd0
                            [<802f1088>] spawn_ksoftirqd+0x1c/0x4c
                            [<8006c04c>] __kprobes_text_end+0x64/0x1ac
                            [<802e95a0>] kernel_init+0x44/0x104
                            [<8006de18>] kernel_thread_helper+0x10/0x18
     in-softirq-W at:
                            [<800b21cc>] __lock_acquire+0x5a8/0x844
                            [<800b24c4>] lock_acquire+0x5c/0x84
                            [<8006b980>] _spin_lock_irqsave+0x50/0x74
                            [<80083394>] complete+0x24/0x6c
                            [<800bf298>] __rcu_process_callbacks+0x23c/0x33c
                            [<800bf3b4>] rcu_process_callbacks+0x1c/0x3c
                            [<8008f74c>] __do_softirq+0x7c/0x130
                            [<8008f84c>] do_softirq+0x4c/0xa0
                            [<8006082c>] ret_from_irq+0x0/0x4
                            [<80060b00>] r4k_wait+0x20/0x40
                            [<8006dd50>] cpu_idle+0x20/0x40
                            [<802e99f0>] start_kernel+0x390/0x3c4
   }
   ... key      at: [<80670c10>] __key.13688+0x0/0x10
   -> (&rq->lock){++..} ops: 0 {
      initial-use  at:
                              [<800b2260>] __lock_acquire+0x63c/0x844
                              [<800b24c4>] lock_acquire+0x5c/0x84
                              [<8006b980>] _spin_lock_irqsave+0x50/0x74
                              [<80304754>] init_idle+0x2c/0xc4
                              [<802f0b20>] sched_init+0x25c/0x298
                              [<802e979c>] start_kernel+0x13c/0x3c4
      in-hardirq-W at:
                              [<800b21a8>] __lock_acquire+0x584/0x844
                              [<800b24c4>] lock_acquire+0x5c/0x84
                              [<8006b8c4>] _spin_lock+0x34/0x48
                              [<80087920>] scheduler_tick+0x24/0xc8
                              [<800954a8>] update_process_times+0x58/0x70
                              [<800ac460>] tick_handle_periodic+0x20/0x134
                              [<80072404>] c0_compare_interrupt+0x54/0x64
                              [<800bbdbc>] handle_IRQ_event+0x38/0x94
                              [<800bd7dc>] handle_percpu_irq+0x54/0xac
                              [<8006cb94>] plat_irq_dispatch+0x398/0x3c8
                              [<8006082c>] ret_from_irq+0x0/0x4
                              [<8008b028>] vprintk+0x434/0x460
                              [<8008b078>] printk+0x24/0x30
                              [<802f2354>] lockdep_info+0x34/0xac
                              [<802e98ec>] start_kernel+0x28c/0x3c4
      in-softirq-W at:
                              [<800b21cc>] __lock_acquire+0x5a8/0x844
                              [<800b24c4>] lock_acquire+0x5c/0x84
                              [<8006b8c4>] _spin_lock+0x34/0x48
                              [<8008504c>] task_rq_lock+0x2c/0x40
                              [<80085314>] try_to_wake_up+0x40/0xe4
                              [<800822c8>] __wake_up_common+0x54/0xc0
                              [<800833bc>] complete+0x4c/0x6c
                              [<800bf298>] __rcu_process_callbacks+0x23c/0x33c
                              [<800bf3b4>] rcu_process_callbacks+0x1c/0x3c
                              [<8008f74c>] __do_softirq+0x7c/0x130
                              [<8008f84c>] do_softirq+0x4c/0xa0
                              [<8006082c>] ret_from_irq+0x0/0x4
                              [<80060b00>] r4k_wait+0x20/0x40
                              [<8006dd50>] cpu_idle+0x20/0x40
                              [<802e99f0>] start_kernel+0x390/0x3c4
    }
    ... key      at: [<8066a7a4>] __key.33804+0x0/0x8
    -> (&rt_b->rt_runtime_lock){++..} ops: 0 {
       initial-use  at:
                                [<800b2260>] __lock_acquire+0x63c/0x844
                                [<800b24c4>] lock_acquire+0x5c/0x84
                                [<8006b8c4>] _spin_lock+0x34/0x48
                                [<80085d08>] __enqueue_rt_entity+0x10c/0x1e4
                                [<80085e70>] enqueue_task_rt+0x44/0x70
                                [<80082048>] enqueue_task+0x1c/0x34
                                [<80082144>] activate_task+0x30/0x4c
                                [<800859d8>] __sched_setscheduler+0x2c4/0x3a8
                                [<800bbb20>] watchdog+0x38/0x218
                                [<800a104c>] kthread+0x58/0x98
                                [<8006de18>] kernel_thread_helper+0x10/0x18
       in-hardirq-W at:
                                [<800b21a8>] __lock_acquire+0x584/0x844
                                [<800b24c4>] lock_acquire+0x5c/0x84
                                [<8006b8c4>] _spin_lock+0x34/0x48
                                [<80085d08>] __enqueue_rt_entity+0x10c/0x1e4
                                [<80085e70>] enqueue_task_rt+0x44/0x70
                                [<80082048>] enqueue_task+0x1c/0x34
                                [<80082144>] activate_task+0x30/0x4c
                                [<80085354>] try_to_wake_up+0x80/0xe4
                                [<800bba24>] softlockup_tick+0xe4/0x1a8
                                [<8009547c>] update_process_times+0x2c/0x70
                                [<800ace44>] tick_sched_timer+0x308/0x35c
                                [<800a485c>] __run_hrtimer+0x5c/0xd0
                                [<800a5414>] hrtimer_interrupt+0x1ec/0x2c8
                                [<80072404>] c0_compare_interrupt+0x54/0x64
                                [<800bbdbc>] handle_IRQ_event+0x38/0x94
                                [<800bd7dc>] handle_percpu_irq+0x54/0xac
                                [<8006cb94>] plat_irq_dispatch+0x398/0x3c8
                                [<8006082c>] ret_from_irq+0x0/0x4
                                [<80060b00>] r4k_wait+0x20/0x40
                                [<8006dd50>] cpu_idle+0x20/0x40
       in-softirq-W at:
                                [<800b21cc>] __lock_acquire+0x5a8/0x844
                                [<800b24c4>] lock_acquire+0x5c/0x84
                                [<8006b8c4>] _spin_lock+0x34/0x48
                                [<80085d08>] __enqueue_rt_entity+0x10c/0x1e4
                                [<80085e70>] enqueue_task_rt+0x44/0x70
                                [<80082048>] enqueue_task+0x1c/0x34
                                [<80082144>] activate_task+0x30/0x4c
                                [<80085354>] try_to_wake_up+0x80/0xe4
                                [<800bba24>] softlockup_tick+0xe4/0x1a8
                                [<8009547c>] update_process_times+0x2c/0x70
                                [<800ace44>] tick_sched_timer+0x308/0x35c
                                [<800a485c>] __run_hrtimer+0x5c/0xd0
                                [<800a5414>] hrtimer_interrupt+0x1ec/0x2c8
                                [<80072404>] c0_compare_interrupt+0x54/0x64
                                [<800bbdbc>] handle_IRQ_event+0x38/0x94
                                [<800bd7dc>] handle_percpu_irq+0x54/0xac
                                [<8006cb94>] plat_irq_dispatch+0x398/0x3c8
                                [<8006082c>] ret_from_irq+0x0/0x4
                                [<8006bb18>] _read_lock_bh+0x0/0x58
                                [<c03c5a94>] ipt_do_table+0xc4/0x3a8 [ip_tables]
                                [<801f7c88>] nf_iterate+0x70/0xf8
                                [<801f7ee8>] nf_hook_slow+0xb8/0x17c
                                [<801ffe64>] ip_local_deliver+0x74/0xac
                                [<801ff770>] ip_rcv_finish+0x3c4/0x430
                                [<801d8e68>] netif_receive_skb+0x4b8/0x544
                                [<801dbde8>] process_backlog+0xa8/0x158
                                [<801db69c>] net_rx_action+0x90/0x1e8
                                [<8008f74c>] __do_softirq+0x7c/0x130
                                [<8008f84c>] do_softirq+0x4c/0xa0
                                [<8006082c>] ret_from_irq+0x0/0x4
                                [<80060b00>] r4k_wait+0x20/0x40
                                [<8006dd50>] cpu_idle+0x20/0x40
     }
     ... key      at: [<8066a7ac>] __key.30229+0x0/0x8
     -> (&cpu_base->lock){++..} ops: 0 {
        initial-use  at:
                                  [<800b2260>] __lock_acquire+0x63c/0x844
                                  [<800b24c4>] lock_acquire+0x5c/0x84
                                  [<8006bdcc>] _spin_lock_irq+0x48/0x60
                                  [<800a45ac>] run_hrtimer_pending+0x20/0x160
                                  [<80094c50>] run_timer_softirq+0x20/0x19c
                                  [<8008f74c>] __do_softirq+0x7c/0x130
                                  [<8008f84c>] do_softirq+0x4c/0xa0
                                  [<8006082c>] ret_from_irq+0x0/0x4
                                  [<8008b028>] vprintk+0x434/0x460
                                  [<8008b078>] printk+0x24/0x30
                                  [<802f2354>] lockdep_info+0x34/0xac
                                  [<802e98ec>] start_kernel+0x28c/0x3c4
        in-hardirq-W at:
                                  [<800b21a8>] __lock_acquire+0x584/0x844
                                  [<800b24c4>] lock_acquire+0x5c/0x84
                                  [<8006b8c4>] _spin_lock+0x34/0x48
                                  [<800a49e4>] hrtimer_run_queues+0x114/0x1f4
                                  [<80095178>] run_local_timers+0x10/0x24
                                  [<8009547c>] update_process_times+0x2c/0x70
                                  [<800ac460>] tick_handle_periodic+0x20/0x134
                                  [<80072404>] c0_compare_interrupt+0x54/0x64
                                  [<800bbdbc>] handle_IRQ_event+0x38/0x94
                                  [<800bd7dc>] handle_percpu_irq+0x54/0xac
                                  [<8006cb94>] plat_irq_dispatch+0x398/0x3c8
                                  [<8006082c>] ret_from_irq+0x0/0x4
                                  [<8006bf44>] _spin_unlock_irqrestore+0x74/0x8c
                                  [<800a1024>] kthread+0x30/0x98
                                  [<8006de18>] kernel_thread_helper+0x10/0x18
        in-softirq-W at:
                                  [<800b21cc>] __lock_acquire+0x5a8/0x844
                                  [<800b24c4>] lock_acquire+0x5c/0x84
                                  [<8006bdcc>] _spin_lock_irq+0x48/0x60
                                  [<800a45ac>] run_hrtimer_pending+0x20/0x160
                                  [<80094c50>] run_timer_softirq+0x20/0x19c
                                  [<8008f74c>] __do_softirq+0x7c/0x130
                                  [<8008f84c>] do_softirq+0x4c/0xa0
                                  [<8006082c>] ret_from_irq+0x0/0x4
                                  [<8008b028>] vprintk+0x434/0x460
                                  [<8008b078>] printk+0x24/0x30
                                  [<802f2354>] lockdep_info+0x34/0xac
                                  [<802e98ec>] start_kernel+0x28c/0x3c4
      }
      ... key      at: [<80670c50>] __key.16042+0x0/0x8
     ... acquired at:
   [<800b18c4>] validate_chain+0xb20/0xe80
   [<800b23c4>] __lock_acquire+0x7a0/0x844
   [<800b24c4>] lock_acquire+0x5c/0x84
   [<8006b980>] _spin_lock_irqsave+0x50/0x74
   [<800a4d44>] hrtimer_start_range_ns+0x3c/0x180
   [<80085dac>] __enqueue_rt_entity+0x1b0/0x1e4
   [<80085e70>] enqueue_task_rt+0x44/0x70
   [<80082048>] enqueue_task+0x1c/0x34
   [<80082144>] activate_task+0x30/0x4c
   [<800859d8>] __sched_setscheduler+0x2c4/0x3a8
   [<800bbb20>] watchdog+0x38/0x218
   [<800a104c>] kthread+0x58/0x98
   [<8006de18>] kernel_thread_helper+0x10/0x18

    ... acquired at:
   [<800b18c4>] validate_chain+0xb20/0xe80
   [<800b23c4>] __lock_acquire+0x7a0/0x844
   [<800b24c4>] lock_acquire+0x5c/0x84
   [<8006b8c4>] _spin_lock+0x34/0x48
   [<80085d08>] __enqueue_rt_entity+0x10c/0x1e4
   [<80085e70>] enqueue_task_rt+0x44/0x70
   [<80082048>] enqueue_task+0x1c/0x34
   [<80082144>] activate_task+0x30/0x4c
   [<800859d8>] __sched_setscheduler+0x2c4/0x3a8
   [<800bbb20>] watchdog+0x38/0x218
   [<800a104c>] kthread+0x58/0x98
   [<8006de18>] kernel_thread_helper+0x10/0x18

    -> (&rt_rq->rt_runtime_lock){....} ops: 0 {
       initial-use  at:
                                [<800b2260>] __lock_acquire+0x63c/0x844
                                [<800b24c4>] lock_acquire+0x5c/0x84
                                [<8006b8c4>] _spin_lock+0x34/0x48
                                [<800830b0>] update_curr_rt+0xe4/0x1f0
                                [<80085dfc>] dequeue_task_rt+0x1c/0x4c
                                [<80082100>] dequeue_task+0xa0/0xb4
                                [<80082190>] deactivate_task+0x30/0x4c
                                [<80068da8>] schedule+0x110/0x354
                                [<800bbb48>] watchdog+0x60/0x218
                                [<800a104c>] kthread+0x58/0x98
                                [<8006de18>] kernel_thread_helper+0x10/0x18
     }
     ... key      at: [<8066a7b4>] __key.33788+0x0/0xc
    ... acquired at:
   [<800b18c4>] validate_chain+0xb20/0xe80
   [<800b23c4>] __lock_acquire+0x7a0/0x844
   [<800b24c4>] lock_acquire+0x5c/0x84
   [<8006b8c4>] _spin_lock+0x34/0x48
   [<800830b0>] update_curr_rt+0xe4/0x1f0
   [<80085dfc>] dequeue_task_rt+0x1c/0x4c
   [<80082100>] dequeue_task+0xa0/0xb4
   [<80082190>] deactivate_task+0x30/0x4c
   [<80068da8>] schedule+0x110/0x354
   [<800bbb48>] watchdog+0x60/0x218
   [<800a104c>] kthread+0x58/0x98
   [<8006de18>] kernel_thread_helper+0x10/0x18

   ... acquired at:
   [<800b18c4>] validate_chain+0xb20/0xe80
   [<800b23c4>] __lock_acquire+0x7a0/0x844
   [<800b24c4>] lock_acquire+0x5c/0x84
   [<8006b8c4>] _spin_lock+0x34/0x48
   [<8008504c>] task_rq_lock+0x2c/0x40
   [<80085314>] try_to_wake_up+0x40/0xe4
   [<800822c8>] __wake_up_common+0x54/0xc0
   [<800833bc>] complete+0x4c/0x6c
   [<800a1024>] kthread+0x30/0x98
   [<8006de18>] kernel_thread_helper+0x10/0x18

  ... acquired at:
   [<800b18c4>] validate_chain+0xb20/0xe80
   [<800b23c4>] __lock_acquire+0x7a0/0x844
   [<800b24c4>] lock_acquire+0x5c/0x84
   [<8006b980>] _spin_lock_irqsave+0x50/0x74
   [<80083498>] __wake_up+0x30/0x74
   [<8009d4c4>] __queue_work+0x34/0x54
   [<8009d550>] queue_work_on+0x50/0x6c
   [<8009c4c0>] call_usermodehelper_exec+0xf0/0x130
   [<8017bb68>] kobject_uevent_env+0x350/0x3bc
   [<8017aedc>] kset_register+0x44/0x5c
   [<801ad7c4>] bus_register+0xb0/0x260
   [<802f92f8>] platform_bus_init+0x34/0x60
   [<802f942c>] driver_init+0x30/0x44
   [<802e95d4>] kernel_init+0x78/0x104
   [<8006de18>] kernel_thread_helper+0x10/0x18

 ... acquired at:
   [<800b18c4>] validate_chain+0xb20/0xe80
   [<800b23c4>] __lock_acquire+0x7a0/0x844
   [<800b24c4>] lock_acquire+0x5c/0x84
   [<8006b980>] _spin_lock_irqsave+0x50/0x74
   [<8009d4b0>] __queue_work+0x20/0x54
   [<8009d550>] queue_work_on+0x50/0x6c
   [<c02065bc>] ieee80211_tx_pending+0x3ec/0x470 [mac80211]


stack backtrace:
Call Trace:
[<800715f4>] dump_stack+0x8/0x34
[<800b0c80>] check_usage+0x414/0x444
[<800b1598>] validate_chain+0x7f4/0xe80
[<800b23c4>] __lock_acquire+0x7a0/0x844
[<800b24c4>] lock_acquire+0x5c/0x84
[<8006b980>] _spin_lock_irqsave+0x50/0x74
[<c0206e4c>] ieee80211_key_free+0x78/0xe0 [mac80211]
[<c01eba7c>] ieee80211_alloc_hw+0x22b8/0x2464 [mac80211]

Anyone got anything similar already?

Regards,
Gabor

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [ath9k-devel] soft-safe -> soft-unsafe lock order detected
@ 2009-02-10 16:33 ` Gabor Juhos
  0 siblings, 0 replies; 8+ messages in thread
From: Gabor Juhos @ 2009-02-10 16:33 UTC (permalink / raw)
  To: ath9k-devel

Hi,

I'm testing the ath9k driver in STA mode on an Atheros AR913x based board.
Yesterday while i have transferred a large file through wireless link, i got
this little gem with kernel 2.6.28.2 and compat-wireless-2009-02-02.

======================================================
[ INFO: soft-safe -> soft-unsafe lock order detected ]
2.6.28.2 #106
------------------------------------------------------
phy0/443 [HC0[0]:SC0[0]:HE0:SE1] is trying to acquire:
 (&local->key_lock){....}, at: [<c0206e4c>] ieee80211_key_free+0x78/0xe0 [mac80211]

and this task is already holding:
 (&local->sta_lock){.+..}, at: [<c01ebc5c>] sta_info_unlink+0x34/0x70 [mac80211]
which would create a new lock dependency:
 (&local->sta_lock){.+..} -> (&local->key_lock){....}

but this new dependency connects a soft-irq-safe lock:
 (&local->sta_lock){.+..}
... which became soft-irq-safe at:
  [<800b21cc>] __lock_acquire+0x5a8/0x844
  [<800b24c4>] lock_acquire+0x5c/0x84
  [<8006b980>] _spin_lock_irqsave+0x50/0x74
  [<c020570c>] ieee80211_beacon_get+0x14c/0x3a4 [mac80211]
  [<c0341e08>] ath9k_beacon_tasklet+0x304/0x5c4 [ath9k]
  [<8008fd60>] tasklet_action+0x84/0xf0
  [<8008f74c>] __do_softirq+0x7c/0x130
  [<8008f84c>] do_softirq+0x4c/0xa0
  [<8006082c>] ret_from_irq+0x0/0x4
  [<80060b00>] r4k_wait+0x20/0x40
  [<8006dd50>] cpu_idle+0x20/0x40

to a soft-irq-unsafe lock:
 (todo_lock){--..}
... which became soft-irq-unsafe at:
...  [<800b2248>] __lock_acquire+0x624/0x844
  [<800b24c4>] lock_acquire+0x5c/0x84
  [<8006b8c4>] _spin_lock+0x34/0x48
  [<c0206d9c>] ieee80211_set_default_key+0x4b8/0x4f0 [mac80211]

other info that might help us debug this:

4 locks held by phy0/443:
 #0:  ((wiphy_name(local->hw.wiphy))){--..}, at: [<8009c900>]
run_workqueue+0x5c/0x230
 #1:  (&ifsta->work){--..}, at: [<8009c900>] run_workqueue+0x5c/0x230
 #2:  (rcu_read_lock){..--}, at: [<c01f462c>]
ieee80211_sta_set_bssid+0x5bc/0x6c8 [mac80211]
 #3:  (&local->sta_lock){.+..}, at: [<c01ebc5c>] sta_info_unlink+0x34/0x70
[mac80211]

the soft-irq-safe lock's dependencies:
-> (&local->sta_lock){.+..} ops: 0 {
   initial-use  at:
                        [<800b2260>] __lock_acquire+0x63c/0x844
                        [<800b24c4>] lock_acquire+0x5c/0x84
                        [<8006b980>] _spin_lock_irqsave+0x50/0x74
                        [<c01ec30c>] sta_info_flush+0xa0/0x26c [mac80211]
                        [<c01f9950>] ieee80211_if_change_type+0xd10/0x122c
[mac80211]
                        [<c01f98ac>] ieee80211_if_change_type+0xc6c/0x122c
[mac80211]
   in-softirq-W at:
                        [<800b21cc>] __lock_acquire+0x5a8/0x844
                        [<800b24c4>] lock_acquire+0x5c/0x84
                        [<8006b980>] _spin_lock_irqsave+0x50/0x74
                        [<c020570c>] ieee80211_beacon_get+0x14c/0x3a4 [mac80211]
                        [<c0341e08>] ath9k_beacon_tasklet+0x304/0x5c4 [ath9k]
                        [<8008fd60>] tasklet_action+0x84/0xf0
                        [<8008f74c>] __do_softirq+0x7c/0x130
                        [<8008f84c>] do_softirq+0x4c/0xa0
                        [<8006082c>] ret_from_irq+0x0/0x4
                        [<80060b00>] r4k_wait+0x20/0x40
                        [<8006dd50>] cpu_idle+0x20/0x40
 }
 ... key      at: [<c0223d70>] __this_module+0x190/0xffff29dc [mac80211]
 -> (&sta->flaglock){.+..} ops: 0 {
    initial-use  at:
                          [<800b2260>] __lock_acquire+0x63c/0x844
                          [<800b24c4>] lock_acquire+0x5c/0x84
                          [<8006b980>] _spin_lock_irqsave+0x50/0x74
                          [<c01ff8b4>] ieee80211_rx_irqsafe+0x14fc/0x3a9c [mac80211]
                          [<801d2508>] dev_alloc_skb+0x1c/0x48
    in-softirq-W at:
                          [<800b21cc>] __lock_acquire+0x5a8/0x844
                          [<800b24c4>] lock_acquire+0x5c/0x84
                          [<8006b980>] _spin_lock_irqsave+0x50/0x74
                          [<c01ff8b4>] ieee80211_rx_irqsafe+0x14fc/0x3a9c [mac80211]
                          [<801d2508>] dev_alloc_skb+0x1c/0x48
  }
  ... key      at: [<c0223d78>] __this_module+0x198/0xffff29dc [mac80211]
 ... acquired at:
   [<800b18c4>] validate_chain+0xb20/0xe80
   [<800b23c4>] __lock_acquire+0x7a0/0x844
   [<800b24c4>] lock_acquire+0x5c/0x84
   [<8006b980>] _spin_lock_irqsave+0x50/0x74
   [<c01ebae4>] ieee80211_alloc_hw+0x2320/0x2464 [mac80211]

 -> (&txq->axq_lock){-+..} ops: 0 {
    initial-use  at:
                          [<800b2260>] __lock_acquire+0x63c/0x844
                          [<800b24c4>] lock_acquire+0x5c/0x84
                          [<8006b918>] _spin_lock_bh+0x40/0x58
                          [<c0348ac4>] ath_draintxq+0x54/0x2f8 [ath9k]
                          [<c034a530>] ath_drain_all_txq+0x164/0x194 [ath9k]
                          [<c0343f50>] ath_rf_name+0x196c/0x2418 [ath9k]
    in-softirq-W at:
                          [<800b21cc>] __lock_acquire+0x5a8/0x844
                          [<800b24c4>] lock_acquire+0x5c/0x84
                          [<8006b918>] _spin_lock_bh+0x40/0x58
                          [<c0349d2c>] ath_tx_tasklet+0xf0/0x5e8 [ath9k]
                          [<c0345034>] ath_reset+0x568/0x948 [ath9k]
    hardirq-on-W at:
                          [<800b2224>] __lock_acquire+0x600/0x844
                          [<800b24c4>] lock_acquire+0x5c/0x84
                          [<8006b918>] _spin_lock_bh+0x40/0x58
                          [<c0348ac4>] ath_draintxq+0x54/0x2f8 [ath9k]
                          [<c034a530>] ath_drain_all_txq+0x164/0x194 [ath9k]
                          [<c0343f50>] ath_rf_name+0x196c/0x2418 [ath9k]
  }
  ... key      at: [<c036b8d8>] btcoex_enable+0x5d4/0xfffe32d8 [ath9k]
 ... acquired at:
   [<800b18c4>] validate_chain+0xb20/0xe80
   [<800b23c4>] __lock_acquire+0x7a0/0x844
   [<800b24c4>] lock_acquire+0x5c/0x84
   [<8006b8c4>] _spin_lock+0x34/0x48
   [<c034ad9c>] ath_tx_node_cleanup+0x64/0x194 [ath9k]
   [<c01ebb90>] ieee80211_alloc_hw+0x23cc/0x2464 [mac80211]


the soft-irq-unsafe lock's dependencies:
-> (todo_lock){--..} ops: 0 {
   initial-use  at:
                        [<800b2260>] __lock_acquire+0x63c/0x844
                        [<800b24c4>] lock_acquire+0x5c/0x84
                        [<8006b8c4>] _spin_lock+0x34/0x48
                        [<c0206d9c>] ieee80211_set_default_key+0x4b8/0x4f0
[mac80211]
   softirq-on-W at:
                        [<800b2248>] __lock_acquire+0x624/0x844
                        [<800b24c4>] lock_acquire+0x5c/0x84
                        [<8006b8c4>] _spin_lock+0x34/0x48
                        [<c0206d9c>] ieee80211_set_default_key+0x4b8/0x4f0
[mac80211]
   hardirq-on-W at:
                        [<800b2224>] __lock_acquire+0x600/0x844
                        [<800b24c4>] lock_acquire+0x5c/0x84
                        [<8006b8c4>] _spin_lock+0x34/0x48
                        [<c0206d9c>] ieee80211_set_default_key+0x4b8/0x4f0
[mac80211]
 }
 ... key      at: [<c0223a30>] mac80211_config_ops+0xd0/0xffff2c5c [mac80211]
 -> (&cwq->lock){.+..} ops: 0 {
    initial-use  at:
                          [<800b2260>] __lock_acquire+0x63c/0x844
                          [<800b24c4>] lock_acquire+0x5c/0x84
                          [<8006b980>] _spin_lock_irqsave+0x50/0x74
                          [<8009d4b0>] __queue_work+0x20/0x54
                          [<8009d550>] queue_work_on+0x50/0x6c
                          [<8009c4c0>] call_usermodehelper_exec+0xf0/0x130
                          [<8017bb68>] kobject_uevent_env+0x350/0x3bc
                          [<8017aedc>] kset_register+0x44/0x5c
                          [<801ad7c4>] bus_register+0xb0/0x260
                          [<802f92f8>] platform_bus_init+0x34/0x60
                          [<802f942c>] driver_init+0x30/0x44
                          [<802e95d4>] kernel_init+0x78/0x104
                          [<8006de18>] kernel_thread_helper+0x10/0x18
    in-softirq-W at:
                          [<800b21cc>] __lock_acquire+0x5a8/0x844
                          [<800b24c4>] lock_acquire+0x5c/0x84
                          [<8006b980>] _spin_lock_irqsave+0x50/0x74
                          [<8009d4b0>] __queue_work+0x20/0x54
                          [<8009d550>] queue_work_on+0x50/0x6c
                          [<80094d50>] run_timer_softirq+0x120/0x19c
                          [<8008f74c>] __do_softirq+0x7c/0x130
                          [<8008f84c>] do_softirq+0x4c/0xa0
                          [<8006082c>] ret_from_irq+0x0/0x4
  }
  ... key      at: [<80670880>] __key.18562+0x0/0x8
  -> (&q->lock){.+..} ops: 0 {
     initial-use  at:
                            [<800b2260>] __lock_acquire+0x63c/0x844
                            [<800b24c4>] lock_acquire+0x5c/0x84
                            [<8006bdcc>] _spin_lock_irq+0x48/0x60
                            [<80068ac4>] wait_for_common+0x3c/0x188
                            [<800a0fb4>] kthread_create+0x80/0xc0
                            [<803048fc>] cpu_callback+0x68/0xd0
                            [<802f1088>] spawn_ksoftirqd+0x1c/0x4c
                            [<8006c04c>] __kprobes_text_end+0x64/0x1ac
                            [<802e95a0>] kernel_init+0x44/0x104
                            [<8006de18>] kernel_thread_helper+0x10/0x18
     in-softirq-W at:
                            [<800b21cc>] __lock_acquire+0x5a8/0x844
                            [<800b24c4>] lock_acquire+0x5c/0x84
                            [<8006b980>] _spin_lock_irqsave+0x50/0x74
                            [<80083394>] complete+0x24/0x6c
                            [<800bf298>] __rcu_process_callbacks+0x23c/0x33c
                            [<800bf3b4>] rcu_process_callbacks+0x1c/0x3c
                            [<8008f74c>] __do_softirq+0x7c/0x130
                            [<8008f84c>] do_softirq+0x4c/0xa0
                            [<8006082c>] ret_from_irq+0x0/0x4
                            [<80060b00>] r4k_wait+0x20/0x40
                            [<8006dd50>] cpu_idle+0x20/0x40
                            [<802e99f0>] start_kernel+0x390/0x3c4
   }
   ... key      at: [<80670c10>] __key.13688+0x0/0x10
   -> (&rq->lock){++..} ops: 0 {
      initial-use  at:
                              [<800b2260>] __lock_acquire+0x63c/0x844
                              [<800b24c4>] lock_acquire+0x5c/0x84
                              [<8006b980>] _spin_lock_irqsave+0x50/0x74
                              [<80304754>] init_idle+0x2c/0xc4
                              [<802f0b20>] sched_init+0x25c/0x298
                              [<802e979c>] start_kernel+0x13c/0x3c4
      in-hardirq-W at:
                              [<800b21a8>] __lock_acquire+0x584/0x844
                              [<800b24c4>] lock_acquire+0x5c/0x84
                              [<8006b8c4>] _spin_lock+0x34/0x48
                              [<80087920>] scheduler_tick+0x24/0xc8
                              [<800954a8>] update_process_times+0x58/0x70
                              [<800ac460>] tick_handle_periodic+0x20/0x134
                              [<80072404>] c0_compare_interrupt+0x54/0x64
                              [<800bbdbc>] handle_IRQ_event+0x38/0x94
                              [<800bd7dc>] handle_percpu_irq+0x54/0xac
                              [<8006cb94>] plat_irq_dispatch+0x398/0x3c8
                              [<8006082c>] ret_from_irq+0x0/0x4
                              [<8008b028>] vprintk+0x434/0x460
                              [<8008b078>] printk+0x24/0x30
                              [<802f2354>] lockdep_info+0x34/0xac
                              [<802e98ec>] start_kernel+0x28c/0x3c4
      in-softirq-W at:
                              [<800b21cc>] __lock_acquire+0x5a8/0x844
                              [<800b24c4>] lock_acquire+0x5c/0x84
                              [<8006b8c4>] _spin_lock+0x34/0x48
                              [<8008504c>] task_rq_lock+0x2c/0x40
                              [<80085314>] try_to_wake_up+0x40/0xe4
                              [<800822c8>] __wake_up_common+0x54/0xc0
                              [<800833bc>] complete+0x4c/0x6c
                              [<800bf298>] __rcu_process_callbacks+0x23c/0x33c
                              [<800bf3b4>] rcu_process_callbacks+0x1c/0x3c
                              [<8008f74c>] __do_softirq+0x7c/0x130
                              [<8008f84c>] do_softirq+0x4c/0xa0
                              [<8006082c>] ret_from_irq+0x0/0x4
                              [<80060b00>] r4k_wait+0x20/0x40
                              [<8006dd50>] cpu_idle+0x20/0x40
                              [<802e99f0>] start_kernel+0x390/0x3c4
    }
    ... key      at: [<8066a7a4>] __key.33804+0x0/0x8
    -> (&rt_b->rt_runtime_lock){++..} ops: 0 {
       initial-use  at:
                                [<800b2260>] __lock_acquire+0x63c/0x844
                                [<800b24c4>] lock_acquire+0x5c/0x84
                                [<8006b8c4>] _spin_lock+0x34/0x48
                                [<80085d08>] __enqueue_rt_entity+0x10c/0x1e4
                                [<80085e70>] enqueue_task_rt+0x44/0x70
                                [<80082048>] enqueue_task+0x1c/0x34
                                [<80082144>] activate_task+0x30/0x4c
                                [<800859d8>] __sched_setscheduler+0x2c4/0x3a8
                                [<800bbb20>] watchdog+0x38/0x218
                                [<800a104c>] kthread+0x58/0x98
                                [<8006de18>] kernel_thread_helper+0x10/0x18
       in-hardirq-W at:
                                [<800b21a8>] __lock_acquire+0x584/0x844
                                [<800b24c4>] lock_acquire+0x5c/0x84
                                [<8006b8c4>] _spin_lock+0x34/0x48
                                [<80085d08>] __enqueue_rt_entity+0x10c/0x1e4
                                [<80085e70>] enqueue_task_rt+0x44/0x70
                                [<80082048>] enqueue_task+0x1c/0x34
                                [<80082144>] activate_task+0x30/0x4c
                                [<80085354>] try_to_wake_up+0x80/0xe4
                                [<800bba24>] softlockup_tick+0xe4/0x1a8
                                [<8009547c>] update_process_times+0x2c/0x70
                                [<800ace44>] tick_sched_timer+0x308/0x35c
                                [<800a485c>] __run_hrtimer+0x5c/0xd0
                                [<800a5414>] hrtimer_interrupt+0x1ec/0x2c8
                                [<80072404>] c0_compare_interrupt+0x54/0x64
                                [<800bbdbc>] handle_IRQ_event+0x38/0x94
                                [<800bd7dc>] handle_percpu_irq+0x54/0xac
                                [<8006cb94>] plat_irq_dispatch+0x398/0x3c8
                                [<8006082c>] ret_from_irq+0x0/0x4
                                [<80060b00>] r4k_wait+0x20/0x40
                                [<8006dd50>] cpu_idle+0x20/0x40
       in-softirq-W at:
                                [<800b21cc>] __lock_acquire+0x5a8/0x844
                                [<800b24c4>] lock_acquire+0x5c/0x84
                                [<8006b8c4>] _spin_lock+0x34/0x48
                                [<80085d08>] __enqueue_rt_entity+0x10c/0x1e4
                                [<80085e70>] enqueue_task_rt+0x44/0x70
                                [<80082048>] enqueue_task+0x1c/0x34
                                [<80082144>] activate_task+0x30/0x4c
                                [<80085354>] try_to_wake_up+0x80/0xe4
                                [<800bba24>] softlockup_tick+0xe4/0x1a8
                                [<8009547c>] update_process_times+0x2c/0x70
                                [<800ace44>] tick_sched_timer+0x308/0x35c
                                [<800a485c>] __run_hrtimer+0x5c/0xd0
                                [<800a5414>] hrtimer_interrupt+0x1ec/0x2c8
                                [<80072404>] c0_compare_interrupt+0x54/0x64
                                [<800bbdbc>] handle_IRQ_event+0x38/0x94
                                [<800bd7dc>] handle_percpu_irq+0x54/0xac
                                [<8006cb94>] plat_irq_dispatch+0x398/0x3c8
                                [<8006082c>] ret_from_irq+0x0/0x4
                                [<8006bb18>] _read_lock_bh+0x0/0x58
                                [<c03c5a94>] ipt_do_table+0xc4/0x3a8 [ip_tables]
                                [<801f7c88>] nf_iterate+0x70/0xf8
                                [<801f7ee8>] nf_hook_slow+0xb8/0x17c
                                [<801ffe64>] ip_local_deliver+0x74/0xac
                                [<801ff770>] ip_rcv_finish+0x3c4/0x430
                                [<801d8e68>] netif_receive_skb+0x4b8/0x544
                                [<801dbde8>] process_backlog+0xa8/0x158
                                [<801db69c>] net_rx_action+0x90/0x1e8
                                [<8008f74c>] __do_softirq+0x7c/0x130
                                [<8008f84c>] do_softirq+0x4c/0xa0
                                [<8006082c>] ret_from_irq+0x0/0x4
                                [<80060b00>] r4k_wait+0x20/0x40
                                [<8006dd50>] cpu_idle+0x20/0x40
     }
     ... key      at: [<8066a7ac>] __key.30229+0x0/0x8
     -> (&cpu_base->lock){++..} ops: 0 {
        initial-use  at:
                                  [<800b2260>] __lock_acquire+0x63c/0x844
                                  [<800b24c4>] lock_acquire+0x5c/0x84
                                  [<8006bdcc>] _spin_lock_irq+0x48/0x60
                                  [<800a45ac>] run_hrtimer_pending+0x20/0x160
                                  [<80094c50>] run_timer_softirq+0x20/0x19c
                                  [<8008f74c>] __do_softirq+0x7c/0x130
                                  [<8008f84c>] do_softirq+0x4c/0xa0
                                  [<8006082c>] ret_from_irq+0x0/0x4
                                  [<8008b028>] vprintk+0x434/0x460
                                  [<8008b078>] printk+0x24/0x30
                                  [<802f2354>] lockdep_info+0x34/0xac
                                  [<802e98ec>] start_kernel+0x28c/0x3c4
        in-hardirq-W at:
                                  [<800b21a8>] __lock_acquire+0x584/0x844
                                  [<800b24c4>] lock_acquire+0x5c/0x84
                                  [<8006b8c4>] _spin_lock+0x34/0x48
                                  [<800a49e4>] hrtimer_run_queues+0x114/0x1f4
                                  [<80095178>] run_local_timers+0x10/0x24
                                  [<8009547c>] update_process_times+0x2c/0x70
                                  [<800ac460>] tick_handle_periodic+0x20/0x134
                                  [<80072404>] c0_compare_interrupt+0x54/0x64
                                  [<800bbdbc>] handle_IRQ_event+0x38/0x94
                                  [<800bd7dc>] handle_percpu_irq+0x54/0xac
                                  [<8006cb94>] plat_irq_dispatch+0x398/0x3c8
                                  [<8006082c>] ret_from_irq+0x0/0x4
                                  [<8006bf44>] _spin_unlock_irqrestore+0x74/0x8c
                                  [<800a1024>] kthread+0x30/0x98
                                  [<8006de18>] kernel_thread_helper+0x10/0x18
        in-softirq-W at:
                                  [<800b21cc>] __lock_acquire+0x5a8/0x844
                                  [<800b24c4>] lock_acquire+0x5c/0x84
                                  [<8006bdcc>] _spin_lock_irq+0x48/0x60
                                  [<800a45ac>] run_hrtimer_pending+0x20/0x160
                                  [<80094c50>] run_timer_softirq+0x20/0x19c
                                  [<8008f74c>] __do_softirq+0x7c/0x130
                                  [<8008f84c>] do_softirq+0x4c/0xa0
                                  [<8006082c>] ret_from_irq+0x0/0x4
                                  [<8008b028>] vprintk+0x434/0x460
                                  [<8008b078>] printk+0x24/0x30
                                  [<802f2354>] lockdep_info+0x34/0xac
                                  [<802e98ec>] start_kernel+0x28c/0x3c4
      }
      ... key      at: [<80670c50>] __key.16042+0x0/0x8
     ... acquired at:
   [<800b18c4>] validate_chain+0xb20/0xe80
   [<800b23c4>] __lock_acquire+0x7a0/0x844
   [<800b24c4>] lock_acquire+0x5c/0x84
   [<8006b980>] _spin_lock_irqsave+0x50/0x74
   [<800a4d44>] hrtimer_start_range_ns+0x3c/0x180
   [<80085dac>] __enqueue_rt_entity+0x1b0/0x1e4
   [<80085e70>] enqueue_task_rt+0x44/0x70
   [<80082048>] enqueue_task+0x1c/0x34
   [<80082144>] activate_task+0x30/0x4c
   [<800859d8>] __sched_setscheduler+0x2c4/0x3a8
   [<800bbb20>] watchdog+0x38/0x218
   [<800a104c>] kthread+0x58/0x98
   [<8006de18>] kernel_thread_helper+0x10/0x18

    ... acquired at:
   [<800b18c4>] validate_chain+0xb20/0xe80
   [<800b23c4>] __lock_acquire+0x7a0/0x844
   [<800b24c4>] lock_acquire+0x5c/0x84
   [<8006b8c4>] _spin_lock+0x34/0x48
   [<80085d08>] __enqueue_rt_entity+0x10c/0x1e4
   [<80085e70>] enqueue_task_rt+0x44/0x70
   [<80082048>] enqueue_task+0x1c/0x34
   [<80082144>] activate_task+0x30/0x4c
   [<800859d8>] __sched_setscheduler+0x2c4/0x3a8
   [<800bbb20>] watchdog+0x38/0x218
   [<800a104c>] kthread+0x58/0x98
   [<8006de18>] kernel_thread_helper+0x10/0x18

    -> (&rt_rq->rt_runtime_lock){....} ops: 0 {
       initial-use  at:
                                [<800b2260>] __lock_acquire+0x63c/0x844
                                [<800b24c4>] lock_acquire+0x5c/0x84
                                [<8006b8c4>] _spin_lock+0x34/0x48
                                [<800830b0>] update_curr_rt+0xe4/0x1f0
                                [<80085dfc>] dequeue_task_rt+0x1c/0x4c
                                [<80082100>] dequeue_task+0xa0/0xb4
                                [<80082190>] deactivate_task+0x30/0x4c
                                [<80068da8>] schedule+0x110/0x354
                                [<800bbb48>] watchdog+0x60/0x218
                                [<800a104c>] kthread+0x58/0x98
                                [<8006de18>] kernel_thread_helper+0x10/0x18
     }
     ... key      at: [<8066a7b4>] __key.33788+0x0/0xc
    ... acquired at:
   [<800b18c4>] validate_chain+0xb20/0xe80
   [<800b23c4>] __lock_acquire+0x7a0/0x844
   [<800b24c4>] lock_acquire+0x5c/0x84
   [<8006b8c4>] _spin_lock+0x34/0x48
   [<800830b0>] update_curr_rt+0xe4/0x1f0
   [<80085dfc>] dequeue_task_rt+0x1c/0x4c
   [<80082100>] dequeue_task+0xa0/0xb4
   [<80082190>] deactivate_task+0x30/0x4c
   [<80068da8>] schedule+0x110/0x354
   [<800bbb48>] watchdog+0x60/0x218
   [<800a104c>] kthread+0x58/0x98
   [<8006de18>] kernel_thread_helper+0x10/0x18

   ... acquired at:
   [<800b18c4>] validate_chain+0xb20/0xe80
   [<800b23c4>] __lock_acquire+0x7a0/0x844
   [<800b24c4>] lock_acquire+0x5c/0x84
   [<8006b8c4>] _spin_lock+0x34/0x48
   [<8008504c>] task_rq_lock+0x2c/0x40
   [<80085314>] try_to_wake_up+0x40/0xe4
   [<800822c8>] __wake_up_common+0x54/0xc0
   [<800833bc>] complete+0x4c/0x6c
   [<800a1024>] kthread+0x30/0x98
   [<8006de18>] kernel_thread_helper+0x10/0x18

  ... acquired at:
   [<800b18c4>] validate_chain+0xb20/0xe80
   [<800b23c4>] __lock_acquire+0x7a0/0x844
   [<800b24c4>] lock_acquire+0x5c/0x84
   [<8006b980>] _spin_lock_irqsave+0x50/0x74
   [<80083498>] __wake_up+0x30/0x74
   [<8009d4c4>] __queue_work+0x34/0x54
   [<8009d550>] queue_work_on+0x50/0x6c
   [<8009c4c0>] call_usermodehelper_exec+0xf0/0x130
   [<8017bb68>] kobject_uevent_env+0x350/0x3bc
   [<8017aedc>] kset_register+0x44/0x5c
   [<801ad7c4>] bus_register+0xb0/0x260
   [<802f92f8>] platform_bus_init+0x34/0x60
   [<802f942c>] driver_init+0x30/0x44
   [<802e95d4>] kernel_init+0x78/0x104
   [<8006de18>] kernel_thread_helper+0x10/0x18

 ... acquired at:
   [<800b18c4>] validate_chain+0xb20/0xe80
   [<800b23c4>] __lock_acquire+0x7a0/0x844
   [<800b24c4>] lock_acquire+0x5c/0x84
   [<8006b980>] _spin_lock_irqsave+0x50/0x74
   [<8009d4b0>] __queue_work+0x20/0x54
   [<8009d550>] queue_work_on+0x50/0x6c
   [<c02065bc>] ieee80211_tx_pending+0x3ec/0x470 [mac80211]


stack backtrace:
Call Trace:
[<800715f4>] dump_stack+0x8/0x34
[<800b0c80>] check_usage+0x414/0x444
[<800b1598>] validate_chain+0x7f4/0xe80
[<800b23c4>] __lock_acquire+0x7a0/0x844
[<800b24c4>] lock_acquire+0x5c/0x84
[<8006b980>] _spin_lock_irqsave+0x50/0x74
[<c0206e4c>] ieee80211_key_free+0x78/0xe0 [mac80211]
[<c01eba7c>] ieee80211_alloc_hw+0x22b8/0x2464 [mac80211]

Anyone got anything similar already?

Regards,
Gabor

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: soft-safe -> soft-unsafe lock order detected
  2009-02-10 16:33 ` [ath9k-devel] " Gabor Juhos
  (?)
@ 2009-02-12 10:05 ` Johannes Berg
  -1 siblings, 0 replies; 8+ messages in thread
From: Johannes Berg @ 2009-02-12 10:05 UTC (permalink / raw)
  To: Gabor Juhos; +Cc: linux-wireless

[-- Attachment #1: Type: text/plain, Size: 526 bytes --]

On Tue, 2009-02-10 at 17:33 +0100, Gabor Juhos wrote:

> I'm testing the ath9k driver in STA mode on an Atheros AR913x based board.

>  (&local->sta_lock){.+..}
> ... which became soft-irq-safe at:
>   [<800b21cc>] __lock_acquire+0x5a8/0x844
>   [<800b24c4>] lock_acquire+0x5c/0x84
>   [<8006b980>] _spin_lock_irqsave+0x50/0x74
>   [<c020570c>] ieee80211_beacon_get+0x14c/0x3a4 [mac80211]
>   [<c0341e08>] ath9k_beacon_tasklet+0x304/0x5c4 [ath9k]

Something is mismatched here. STA mode != beaconing.

johannes

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: soft-safe -> soft-unsafe lock order detected
  2009-02-10 16:33 ` [ath9k-devel] " Gabor Juhos
  (?)
  (?)
@ 2009-02-12 10:16 ` Johannes Berg
  2009-02-12 10:24   ` Johannes Berg
  -1 siblings, 1 reply; 8+ messages in thread
From: Johannes Berg @ 2009-02-12 10:16 UTC (permalink / raw)
  To: Gabor Juhos; +Cc: linux-wireless

[-- Attachment #1: Type: text/plain, Size: 602 bytes --]


> to a soft-irq-unsafe lock:
>  (todo_lock){--..}
> ... which became soft-irq-unsafe at:
> ...  [<800b2248>] __lock_acquire+0x624/0x844
>   [<800b24c4>] lock_acquire+0x5c/0x84
>   [<8006b8c4>] _spin_lock+0x34/0x48
>   [<c0206d9c>] ieee80211_set_default_key+0x4b8/0x4f0 [mac80211]

That seems to be incorrect. ieee80211_set_default_key will have
_irqsave-locked the key lock, so the todo lock is here always locked in
an irq-excluded section.

The lock is, however, possibly used that way in ieee80211_key_link,
which can be fixed easily and we can remove the todo lock too.

johannes

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: soft-safe -> soft-unsafe lock order detected
  2009-02-12 10:16 ` Johannes Berg
@ 2009-02-12 10:24   ` Johannes Berg
  2009-02-12 12:56     ` Gabor Juhos
  0 siblings, 1 reply; 8+ messages in thread
From: Johannes Berg @ 2009-02-12 10:24 UTC (permalink / raw)
  To: Gabor Juhos; +Cc: linux-wireless

[-- Attachment #1: Type: text/plain, Size: 770 bytes --]

On Thu, 2009-02-12 at 11:16 +0100, Johannes Berg wrote:
> > to a soft-irq-unsafe lock:
> >  (todo_lock){--..}
> > ... which became soft-irq-unsafe at:
> > ...  [<800b2248>] __lock_acquire+0x624/0x844
> >   [<800b24c4>] lock_acquire+0x5c/0x84
> >   [<8006b8c4>] _spin_lock+0x34/0x48
> >   [<c0206d9c>] ieee80211_set_default_key+0x4b8/0x4f0 [mac80211]
> 
> That seems to be incorrect. ieee80211_set_default_key will have
> _irqsave-locked the key lock, so the todo lock is here always locked in
> an irq-excluded section.
> 
> The lock is, however, possibly used that way in ieee80211_key_link,
> which can be fixed easily and we can remove the todo lock too.

Not true, but the todo_lock should be made to _irqsave in some places,
it seems.

johannes

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: soft-safe -> soft-unsafe lock order detected
  2009-02-12 10:24   ` Johannes Berg
@ 2009-02-12 12:56     ` Gabor Juhos
  2009-02-12 13:17       ` Johannes Berg
  0 siblings, 1 reply; 8+ messages in thread
From: Gabor Juhos @ 2009-02-12 12:56 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linux-wireless

Johannes Berg =EDrta:
> On Thu, 2009-02-12 at 11:16 +0100, Johannes Berg wrote:
>>> to a soft-irq-unsafe lock:
>>>  (todo_lock){--..}
>>> ... which became soft-irq-unsafe at:
>>> ...  [<800b2248>] __lock_acquire+0x624/0x844
>>>   [<800b24c4>] lock_acquire+0x5c/0x84
>>>   [<8006b8c4>] _spin_lock+0x34/0x48
>>>   [<c0206d9c>] ieee80211_set_default_key+0x4b8/0x4f0 [mac80211]
>> That seems to be incorrect. ieee80211_set_default_key will have
>> _irqsave-locked the key lock, so the todo lock is here always locked=
 in
>> an irq-excluded section.

Yes, seems to be incorrect.

>>
>> The lock is, however, possibly used that way in ieee80211_key_link,
>> which can be fixed easily and we can remove the todo lock too.
>=20
> Not true, but the todo_lock should be made to _irqsave in some places=
,
> it seems.

Should we handle this as a false positive for now, because I have seen =
this only
once, and the transfer has not been interrupted? I will do more tests o=
n
different platforms, and i will come back if this happens again.

Gabor

--
To unsubscribe from this list: send the line "unsubscribe linux-wireles=
s" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: soft-safe -> soft-unsafe lock order detected
  2009-02-12 12:56     ` Gabor Juhos
@ 2009-02-12 13:17       ` Johannes Berg
  2009-02-12 13:33         ` Gabor Juhos
  0 siblings, 1 reply; 8+ messages in thread
From: Johannes Berg @ 2009-02-12 13:17 UTC (permalink / raw)
  To: Gabor Juhos; +Cc: linux-wireless

[-- Attachment #1: Type: text/plain, Size: 1410 bytes --]

On Thu, 2009-02-12 at 13:56 +0100, Gabor Juhos wrote:
> Johannes Berg írta:
> > On Thu, 2009-02-12 at 11:16 +0100, Johannes Berg wrote:
> >>> to a soft-irq-unsafe lock:
> >>>  (todo_lock){--..}
> >>> ... which became soft-irq-unsafe at:
> >>> ...  [<800b2248>] __lock_acquire+0x624/0x844
> >>>   [<800b24c4>] lock_acquire+0x5c/0x84
> >>>   [<8006b8c4>] _spin_lock+0x34/0x48
> >>>   [<c0206d9c>] ieee80211_set_default_key+0x4b8/0x4f0 [mac80211]
> >> That seems to be incorrect. ieee80211_set_default_key will have
> >> _irqsave-locked the key lock, so the todo lock is here always locked in
> >> an irq-excluded section.
> 
> Yes, seems to be incorrect.
> 
> >>
> >> The lock is, however, possibly used that way in ieee80211_key_link,
> >> which can be fixed easily and we can remove the todo lock too.
> > 
> > Not true, but the todo_lock should be made to _irqsave in some places,
> > it seems.

Actually that doesn't seem to be true either...

> Should we handle this as a false positive for now, because I have seen this only
> once, and the transfer has not been interrupted? I will do more tests on
> different platforms, and i will come back if this happens again.

Yes, I think we should, something seems to be messed up with this
report. All code paths are regularly executed on all platforms, so we
should be seeing this a lot more if there was a problem.

johannes

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: soft-safe -> soft-unsafe lock order detected
  2009-02-12 13:17       ` Johannes Berg
@ 2009-02-12 13:33         ` Gabor Juhos
  0 siblings, 0 replies; 8+ messages in thread
From: Gabor Juhos @ 2009-02-12 13:33 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linux-wireless

Johannes Berg =C3=ADrta:
> On Thu, 2009-02-12 at 13:56 +0100, Gabor Juhos wrote:
>> Johannes Berg =C3=ADrta:
>>> On Thu, 2009-02-12 at 11:16 +0100, Johannes Berg wrote:
>>>>> to a soft-irq-unsafe lock:
>>>>>  (todo_lock){--..}
>>>>> ... which became soft-irq-unsafe at:
>>>>> ...  [<800b2248>] __lock_acquire+0x624/0x844
>>>>>   [<800b24c4>] lock_acquire+0x5c/0x84
>>>>>   [<8006b8c4>] _spin_lock+0x34/0x48
>>>>>   [<c0206d9c>] ieee80211_set_default_key+0x4b8/0x4f0 [mac80211]
>>>> That seems to be incorrect. ieee80211_set_default_key will have
>>>> _irqsave-locked the key lock, so the todo lock is here always lock=
ed in
>>>> an irq-excluded section.
>> Yes, seems to be incorrect.
>>
>>>> The lock is, however, possibly used that way in ieee80211_key_link=
,
>>>> which can be fixed easily and we can remove the todo lock too.
>>> Not true, but the todo_lock should be made to _irqsave in some plac=
es,
>>> it seems.
>=20
> Actually that doesn't seem to be true either...
>=20
>> Should we handle this as a false positive for now, because I have se=
en this only
>> once, and the transfer has not been interrupted? I will do more test=
s on
>> different platforms, and i will come back if this happens again.
>=20
> Yes, I think we should, something seems to be messed up with this
> report. All code paths are regularly executed on all platforms, so we
> should be seeing this a lot more if there was a problem.

Ok. Thank you for the analysis.

Gabor

--
To unsubscribe from this list: send the line "unsubscribe linux-wireles=
s" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2009-02-12 13:33 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-02-10 16:33 soft-safe -> soft-unsafe lock order detected Gabor Juhos
2009-02-10 16:33 ` [ath9k-devel] " Gabor Juhos
2009-02-12 10:05 ` Johannes Berg
2009-02-12 10:16 ` Johannes Berg
2009-02-12 10:24   ` Johannes Berg
2009-02-12 12:56     ` Gabor Juhos
2009-02-12 13:17       ` Johannes Berg
2009-02-12 13:33         ` Gabor Juhos

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.