* Re: 2.6.31-rc6 lockdep report
From: Johannes Berg @ 2009-08-17 15:16 UTC (permalink / raw)
To: Bob Copeland; +Cc: linux-wireless, John Linville
In-Reply-To: <20090817151223.GA13125@hash.localnet>
[-- Attachment #1: Type: text/plain, Size: 1504 bytes --]
On Mon, 2009-08-17 at 11:12 -0400, Bob Copeland wrote:
> Haven't looked at it yet, I just hit this one while riding the
> train this morning and connecting to someone's adhoc station.
>
> [43559.227490] wlan0: Selected IBSS BSSID 2a:51:0a:35:5c:a1 based on configured SSID
> [43559.258660] ath5k phy0: bf=efb0b680 bf_skb=(null)
> [43559.291501] phy0: Adding new IBSS station 00:21:e9:94:5e:93 (dev=wlan0)
> [43559.291518] phy0: Allocated STA 00:21:e9:94:5e:93
> [43559.292327] phy0: Inserted STA 00:21:e9:94:5e:93
> [43633.646820] phy0: Adding new IBSS station 00:1e:c2:3b:f4:e3 (dev=wlan0)
> [43633.646838] phy0: Allocated STA 00:1e:c2:3b:f4:e3
> [43633.646859]
> [43633.646860] =========================================================
> [43633.646864] [ INFO: possible irq lock inversion dependency detected ]
> [43633.646867] 2.6.31-rc6 #179
> [43633.646870] ---------------------------------------------------------
> [43633.646873] cc1/18756 just changed the state of lock:
> [43633.646876] (&local->sta_lock){..-...}, at: [<fa244acd>] sta_info_insert+0x91/0x174 [mac80211]
> [43633.646900] but this lock took another, SOFTIRQ-unsafe lock in the past:
> [43633.646903] (todo_lock){+.+...}
> [43633.646906]
> [43633.646907] and interrupts could create inverse lock ordering between them.
Yeah, commit 6565a1c6d2e0754b5f1e8160252f6dc9493ed6c4 needs to be
backported. I suspect it applies as-is, John mind trying that? If not,
let me know and I'll port it.
johannes
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 801 bytes --]
^ permalink raw reply
* 2.6.31-rc6 lockdep report
From: Bob Copeland @ 2009-08-17 15:12 UTC (permalink / raw)
To: linux-wireless; +Cc: johannes
Haven't looked at it yet, I just hit this one while riding the
train this morning and connecting to someone's adhoc station.
[43559.227490] wlan0: Selected IBSS BSSID 2a:51:0a:35:5c:a1 based on configured SSID
[43559.258660] ath5k phy0: bf=efb0b680 bf_skb=(null)
[43559.291501] phy0: Adding new IBSS station 00:21:e9:94:5e:93 (dev=wlan0)
[43559.291518] phy0: Allocated STA 00:21:e9:94:5e:93
[43559.292327] phy0: Inserted STA 00:21:e9:94:5e:93
[43633.646820] phy0: Adding new IBSS station 00:1e:c2:3b:f4:e3 (dev=wlan0)
[43633.646838] phy0: Allocated STA 00:1e:c2:3b:f4:e3
[43633.646859]
[43633.646860] =========================================================
[43633.646864] [ INFO: possible irq lock inversion dependency detected ]
[43633.646867] 2.6.31-rc6 #179
[43633.646870] ---------------------------------------------------------
[43633.646873] cc1/18756 just changed the state of lock:
[43633.646876] (&local->sta_lock){..-...}, at: [<fa244acd>] sta_info_insert+0x91/0x174 [mac80211]
[43633.646900] but this lock took another, SOFTIRQ-unsafe lock in the past:
[43633.646903] (todo_lock){+.+...}
[43633.646906]
[43633.646907] and interrupts could create inverse lock ordering between them.
[43633.646908]
[43633.646911]
[43633.646912] other info that might help us debug this:
[43633.646915] 2 locks held by cc1/18756:
[43633.646918] #0: (&sc->rxbuflock){+.-.-.}, at: [<fa4eca30>] ath5k_tasklet_rx+0x34/0x56c [ath5k]
[43633.646936] #1: (rcu_read_lock){.+.+..}, at: [<fa252cbe>] __ieee80211_rx+0x9f/0x581 [mac80211]
[43633.646959]
[43633.646960] the first lock's dependencies:
[43633.646963] -> (&local->sta_lock){..-...} ops: 0 {
[43633.646969] IN-SOFTIRQ-W at:
[43633.646973] [<c104c87d>] __lock_acquire+0x558/0x12d3
[43633.646981] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.646986] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.646993] [<fa244acd>] sta_info_insert+0x91/0x174 [mac80211]
[43633.647009] [<fa248b2a>] ieee80211_ibss_add_sta+0x119/0x12a [mac80211]
[43633.647009] [<fa25268f>] __ieee80211_rx_handle_packet+0x349/0x552 [mac80211]
[43633.647009] [<fa25311f>] __ieee80211_rx+0x500/0x581 [mac80211]
[43633.647009] [<fa4ecf17>] ath5k_tasklet_rx+0x51b/0x56c [ath5k]
[43633.647009] [<c102e209>] tasklet_action+0x93/0xe6
[43633.647009] [<c102e8d6>] __do_softirq+0xdb/0x1ac
[43633.647009] [<c102e9d7>] do_softirq+0x30/0x48
[43633.647009] [<c102eb53>] irq_exit+0x3d/0x74
[43633.647009] [<c100405b>] do_IRQ+0x88/0x9c
[43633.647009] [<c100302e>] common_interrupt+0x2e/0x34
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] INITIAL USE at:
[43633.647009] [<c104c943>] __lock_acquire+0x61e/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<fa244acd>] sta_info_insert+0x91/0x174 [mac80211]
[43633.647009] [<fa24b5c7>] ieee80211_rx_mgmt_assoc_resp+0x5fd/0xa13 [mac80211]
[43633.647009] [<fa24c38b>] ieee80211_sta_work+0x776/0xd3b [mac80211]
[43633.647009] [<c1038a94>] worker_thread+0x1aa/0x287
[43633.647009] [<c103c78b>] kthread+0x70/0x75
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] }
[43633.647009] ... key at: [<fa26a9d0>] __key.38684+0x0/0xffff0e77 [mac80211]
[43633.647009] -> (&local->key_lock){......} ops: 0 {
[43633.647009] INITIAL USE at:
[43633.647009] [<c104c943>] __lock_acquire+0x61e/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<fa255f72>] ieee80211_todo_for_each_key+0x2e/0x79 [mac80211]
[43633.647009] [<fa256054>] ieee80211_enable_keys+0x56/0x5b [mac80211]
[43633.647009] [<fa24d7f4>] ieee80211_open+0x47a/0x5f4 [mac80211]
[43633.647009] [<c123430c>] dev_open+0x8b/0xc0
[43633.647009] [<c1233a5c>] dev_change_flags+0x9b/0x14c
[43633.647009] [<c123b01d>] do_setlink+0x2a2/0x348
[43633.647009] [<c123b1a8>] rtnl_setlink+0xe5/0xe9
[43633.647009] [<c123bf67>] rtnetlink_rcv_msg+0x18a/0x1a0
[43633.647009] [<c12442cc>] netlink_rcv_skb+0x35/0x7d
[43633.647009] [<c123bdd6>] rtnetlink_rcv+0x20/0x27
[43633.647009] [<c1243e4c>] netlink_unicast+0x1b1/0x212
[43633.647009] [<c12440d0>] netlink_sendmsg+0x223/0x230
[43633.647009] [<c1226655>] sock_sendmsg+0xcc/0xe2
[43633.647009] [<c12267b9>] sys_sendmsg+0x14e/0x19b
[43633.647009] [<c122770c>] sys_socketcall+0x147/0x170
[43633.647009] [<c1002988>] sysenter_do_call+0x12/0x36
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] }
[43633.647009] ... key at: [<fa26a9a0>] __key.38909+0x0/0xffff0ea7 [mac80211]
[43633.647009] -> (todo_lock){+.+...} ops: 0 {
[43633.647009] HARDIRQ-ON-W at:
[43633.647009] [<c104c8d3>] __lock_acquire+0x5ae/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<fa255e06>] __ieee80211_key_todo+0x1cb/0x1ef [mac80211]
[43633.647009] [<fa255f29>] ieee80211_key_todo+0x19/0x25 [mac80211]
[43633.647009] [<fa255fb6>] ieee80211_todo_for_each_key+0x72/0x79 [mac80211]
[43633.647009] [<fa256054>] ieee80211_enable_keys+0x56/0x5b [mac80211]
[43633.647009] [<fa24d7f4>] ieee80211_open+0x47a/0x5f4 [mac80211]
[43633.647009] [<c123430c>] dev_open+0x8b/0xc0
[43633.647009] [<c1233a5c>] dev_change_flags+0x9b/0x14c
[43633.647009] [<c123b01d>] do_setlink+0x2a2/0x348
[43633.647009] [<c123b1a8>] rtnl_setlink+0xe5/0xe9
[43633.647009] [<c123bf67>] rtnetlink_rcv_msg+0x18a/0x1a0
[43633.647009] [<c12442cc>] netlink_rcv_skb+0x35/0x7d
[43633.647009] [<c123bdd6>] rtnetlink_rcv+0x20/0x27
[43633.647009] [<c1243e4c>] netlink_unicast+0x1b1/0x212
[43633.647009] [<c12440d0>] netlink_sendmsg+0x223/0x230
[43633.647009] [<c1226655>] sock_sendmsg+0xcc/0xe2
[43633.647009] [<c12267b9>] sys_sendmsg+0x14e/0x19b
[43633.647009] [<c122770c>] sys_socketcall+0x147/0x170
[43633.647009] [<c1002988>] sysenter_do_call+0x12/0x36
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] SOFTIRQ-ON-W at:
[43633.647009] [<c104c8f2>] __lock_acquire+0x5cd/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<fa255e06>] __ieee80211_key_todo+0x1cb/0x1ef [mac80211]
[43633.647009] [<fa255f29>] ieee80211_key_todo+0x19/0x25 [mac80211]
[43633.647009] [<fa255fb6>] ieee80211_todo_for_each_key+0x72/0x79 [mac80211]
[43633.647009] [<fa256054>] ieee80211_enable_keys+0x56/0x5b [mac80211]
[43633.647009] [<fa24d7f4>] ieee80211_open+0x47a/0x5f4 [mac80211]
[43633.647009] [<c123430c>] dev_open+0x8b/0xc0
[43633.647009] [<c1233a5c>] dev_change_flags+0x9b/0x14c
[43633.647009] [<c123b01d>] do_setlink+0x2a2/0x348
[43633.647009] [<c123b1a8>] rtnl_setlink+0xe5/0xe9
[43633.647009] [<c123bf67>] rtnetlink_rcv_msg+0x18a/0x1a0
[43633.647009] [<c12442cc>] netlink_rcv_skb+0x35/0x7d
[43633.647009] [<c123bdd6>] rtnetlink_rcv+0x20/0x27
[43633.647009] [<c1243e4c>] netlink_unicast+0x1b1/0x212
[43633.647009] [<c12440d0>] netlink_sendmsg+0x223/0x230
[43633.647009] [<c1226655>] sock_sendmsg+0xcc/0xe2
[43633.647009] [<c12267b9>] sys_sendmsg+0x14e/0x19b
[43633.647009] [<c122770c>] sys_socketcall+0x147/0x170
[43633.647009] [<c1002988>] sysenter_do_call+0x12/0x36
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] INITIAL USE at:
[43633.647009] [<c104c943>] __lock_acquire+0x61e/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<fa255e06>] __ieee80211_key_todo+0x1cb/0x1ef [mac80211]
[43633.647009] [<fa255f29>] ieee80211_key_todo+0x19/0x25 [mac80211]
[43633.647009] [<fa255fb6>] ieee80211_todo_for_each_key+0x72/0x79 [mac80211]
[43633.647009] [<fa256054>] ieee80211_enable_keys+0x56/0x5b [mac80211]
[43633.647009] [<fa24d7f4>] ieee80211_open+0x47a/0x5f4 [mac80211]
[43633.647009] [<c123430c>] dev_open+0x8b/0xc0
[43633.647009] [<c1233a5c>] dev_change_flags+0x9b/0x14c
[43633.647009] [<c123b01d>] do_setlink+0x2a2/0x348
[43633.647009] [<c123b1a8>] rtnl_setlink+0xe5/0xe9
[43633.647009] [<c123bf67>] rtnetlink_rcv_msg+0x18a/0x1a0
[43633.647009] [<c12442cc>] netlink_rcv_skb+0x35/0x7d
[43633.647009] [<c123bdd6>] rtnetlink_rcv+0x20/0x27
[43633.647009] [<c1243e4c>] netlink_unicast+0x1b1/0x212
[43633.647009] [<c12440d0>] netlink_sendmsg+0x223/0x230
[43633.647009] [<c1226655>] sock_sendmsg+0xcc/0xe2
[43633.647009] [<c12267b9>] sys_sendmsg+0x14e/0x19b
[43633.647009] [<c122770c>] sys_socketcall+0x147/0x170
[43633.647009] [<c1002988>] sysenter_do_call+0x12/0x36
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] }
[43633.647009] ... key at: [<fa26a70c>] todo_lock+0x10/0xffff114b [mac80211]
[43633.647009] -> (&cwq->lock){-.-.-.} ops: 0 {
[43633.647009] IN-HARDIRQ-W at:
[43633.647009] [<c104c85e>] __lock_acquire+0x539/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c10394e5>] __queue_work+0x17/0x34
[43633.647009] [<c103957c>] queue_work_on+0x40/0x49
[43633.647009] [<c10396a2>] queue_work+0x26/0x4a
[43633.647009] [<c1175b27>] __acpi_os_execute+0xf1/0x119
[43633.647009] [<c1175b75>] acpi_os_execute+0xf/0x11
[43633.647009] [<c1179697>] acpi_ec_gpe_handler+0x6f/0xa3
[43633.647009] [<c1184640>] acpi_ev_gpe_dispatch+0x51/0x10f
[43633.647009] [<c118478a>] acpi_ev_gpe_detect+0x8c/0xce
[43633.647009] [<c1182ae9>] acpi_ev_sci_xrupt_handler+0x1a/0x20
[43633.647009] [<c1175373>] acpi_irq+0x13/0x2e
[43633.647009] [<c105fcef>] handle_IRQ_event+0x6a/0x12f
[43633.647009] [<c1061426>] handle_fasteoi_irq+0x7e/0xb5
[43633.647009] [<c100489d>] handle_irq+0x40/0x4b
[43633.647009] [<c100401c>] do_IRQ+0x49/0x9c
[43633.647009] [<c100302e>] common_interrupt+0x2e/0x34
[43633.647009] [<c1021bbc>] finish_task_switch+0x6c/0xe8
[43633.647009] [<c129580d>] schedule+0x7af/0x81f
[43633.647009] [<c1001c11>] cpu_idle+0x79/0x88
[43633.647009] [<c12880c4>] rest_init+0x6c/0x6e
[43633.647009] [<c1448753>] start_kernel+0x28b/0x290
[43633.647009] [<c1448038>] __init_begin+0x38/0x40
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] IN-SOFTIRQ-W at:
[43633.647009] [<c104c87d>] __lock_acquire+0x558/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c10394e5>] __queue_work+0x17/0x34
[43633.647009] [<c103957c>] queue_work_on+0x40/0x49
[43633.647009] [<c10396a2>] queue_work+0x26/0x4a
[43633.647009] [<c113dd5e>] kblockd_schedule_work+0x12/0x14
[43633.647009] [<c11496ac>] as_antic_timeout+0x58/0xa4
[43633.647009] [<c10325ca>] run_timer_softirq+0x17b/0x1f0
[43633.647009] [<c102e8d6>] __do_softirq+0xdb/0x1ac
[43633.647009] [<c102e9d7>] do_softirq+0x30/0x48
[43633.647009] [<c102eb53>] irq_exit+0x3d/0x74
[43633.647009] [<c10121a6>] smp_apic_timer_interrupt+0x73/0x81
[43633.647009] [<c100333b>] apic_timer_interrupt+0x2f/0x34
[43633.647009] [<c1001beb>] cpu_idle+0x53/0x88
[43633.647009] [<c12880c4>] rest_init+0x6c/0x6e
[43633.647009] [<c1448753>] start_kernel+0x28b/0x290
[43633.647009] [<c1448038>] __init_begin+0x38/0x40
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] IN-RECLAIM_FS-W at:
[43633.647009] [<c104c92d>] __lock_acquire+0x608/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c10394e5>] __queue_work+0x17/0x34
[43633.647009] [<c103957c>] queue_work_on+0x40/0x49
[43633.647009] [<c10396a2>] queue_work+0x26/0x4a
[43633.647009] [<c113dd5e>] kblockd_schedule_work+0x12/0x14
[43633.647009] [<c113e21f>] blk_unplug_timeout+0x57/0x5b
[43633.647009] [<c10325ca>] run_timer_softirq+0x17b/0x1f0
[43633.647009] [<c102e8d6>] __do_softirq+0xdb/0x1ac
[43633.647009] [<c102e9d7>] do_softirq+0x30/0x48
[43633.647009] [<c102eb53>] irq_exit+0x3d/0x74
[43633.647009] [<c10121a6>] smp_apic_timer_interrupt+0x73/0x81
[43633.647009] [<c100333b>] apic_timer_interrupt+0x2f/0x34
[43633.647009] [<c10adf79>] destroy_inode+0x32/0x35
[43633.647009] [<c10ae3fa>] generic_delete_inode+0xe4/0xe8
[43633.647009] [<c10ad740>] iput+0x50/0x53
[43633.647009] [<c10dbd0d>] sysfs_d_iput+0x28/0x2b
[43633.647009] [<c10ab44e>] dentry_iput+0x96/0xb8
[43633.647009] [<c10ab50d>] d_kill+0x21/0x3b
[43633.647009] [<c10ab6fa>] __shrink_dcache_sb+0x1d3/0x255
[43633.647009] [<c10ab855>] shrink_dcache_memory+0xd9/0x15e
[43633.647009] [<c108321b>] shrink_slab+0xda/0x15f
[43633.647009] [<c10836a1>] kswapd+0x401/0x587
[43633.647009] [<c103c78b>] kthread+0x70/0x75
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] INITIAL USE at:
[43633.647009] [<c104c943>] __lock_acquire+0x61e/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c10394e5>] __queue_work+0x17/0x34
[43633.647009] [<c103957c>] queue_work_on+0x40/0x49
[43633.647009] [<c10396a2>] queue_work+0x26/0x4a
[43633.647009] [<c1037fe7>] call_usermodehelper_exec+0x8f/0xe1
[43633.647009] [<c114f357>] kobject_uevent_env+0x333/0x368
[43633.647009] [<c114f396>] kobject_uevent+0xa/0xc
[43633.647009] [<c114eb0c>] kset_register+0x2e/0x34
[43633.647009] [<c11b74fe>] bus_register+0xe4/0x232
[43633.647009] [<c146315e>] platform_bus_init+0x23/0x38
[43633.647009] [<c14631f6>] driver_init+0x1c/0x28
[43633.647009] [<c144828c>] kernel_init+0xf2/0x16a
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] }
[43633.647009] ... key at: [<c16231b4>] __key.25893+0x0/0x8
[43633.647009] -> (key#3){-.-.-.} ops: 0 {
[43633.647009] IN-HARDIRQ-W at:
[43633.647009] [<c104c85e>] __lock_acquire+0x539/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c101d543>] __wake_up+0x1a/0x40
[43633.647009] [<c1038ccd>] insert_work+0x9a/0xa3
[43633.647009] [<c10394f4>] __queue_work+0x26/0x34
[43633.647009] [<c103957c>] queue_work_on+0x40/0x49
[43633.647009] [<c10396a2>] queue_work+0x26/0x4a
[43633.647009] [<c1175b27>] __acpi_os_execute+0xf1/0x119
[43633.647009] [<c1175b75>] acpi_os_execute+0xf/0x11
[43633.647009] [<c1179697>] acpi_ec_gpe_handler+0x6f/0xa3
[43633.647009] [<c1184640>] acpi_ev_gpe_dispatch+0x51/0x10f
[43633.647009] [<c118478a>] acpi_ev_gpe_detect+0x8c/0xce
[43633.647009] [<c1182ae9>] acpi_ev_sci_xrupt_handler+0x1a/0x20
[43633.647009] [<c1175373>] acpi_irq+0x13/0x2e
[43633.647009] [<c105fcef>] handle_IRQ_event+0x6a/0x12f
[43633.647009] [<c1061426>] handle_fasteoi_irq+0x7e/0xb5
[43633.647009] [<c100489d>] handle_irq+0x40/0x4b
[43633.647009] [<c100401c>] do_IRQ+0x49/0x9c
[43633.647009] [<c100302e>] common_interrupt+0x2e/0x34
[43633.647009] [<c1021bbc>] finish_task_switch+0x6c/0xe8
[43633.647009] [<c129580d>] schedule+0x7af/0x81f
[43633.647009] [<c1001c11>] cpu_idle+0x79/0x88
[43633.647009] [<c12880c4>] rest_init+0x6c/0x6e
[43633.647009] [<c1448753>] start_kernel+0x28b/0x290
[43633.647009] [<c1448038>] __init_begin+0x38/0x40
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] IN-SOFTIRQ-W at:
[43633.647009] [<c104c87d>] __lock_acquire+0x558/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c101d543>] __wake_up+0x1a/0x40
[43633.647009] [<c1038ccd>] insert_work+0x9a/0xa3
[43633.647009] [<c10394f4>] __queue_work+0x26/0x34
[43633.647009] [<c103957c>] queue_work_on+0x40/0x49
[43633.647009] [<c10396a2>] queue_work+0x26/0x4a
[43633.647009] [<c113dd5e>] kblockd_schedule_work+0x12/0x14
[43633.647009] [<c11496ac>] as_antic_timeout+0x58/0xa4
[43633.647009] [<c10325ca>] run_timer_softirq+0x17b/0x1f0
[43633.647009] [<c102e8d6>] __do_softirq+0xdb/0x1ac
[43633.647009] [<c102e9d7>] do_softirq+0x30/0x48
[43633.647009] [<c102eb53>] irq_exit+0x3d/0x74
[43633.647009] [<c10121a6>] smp_apic_timer_interrupt+0x73/0x81
[43633.647009] [<c100333b>] apic_timer_interrupt+0x2f/0x34
[43633.647009] [<c1001beb>] cpu_idle+0x53/0x88
[43633.647009] [<c12880c4>] rest_init+0x6c/0x6e
[43633.647009] [<c1448753>] start_kernel+0x28b/0x290
[43633.647009] [<c1448038>] __init_begin+0x38/0x40
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] IN-RECLAIM_FS-W at:
[43633.647009] [<c104c92d>] __lock_acquire+0x608/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c101d543>] __wake_up+0x1a/0x40
[43633.647009] [<c1038ccd>] insert_work+0x9a/0xa3
[43633.647009] [<c10394f4>] __queue_work+0x26/0x34
[43633.647009] [<c103957c>] queue_work_on+0x40/0x49
[43633.647009] [<c10396a2>] queue_work+0x26/0x4a
[43633.647009] [<c113dd5e>] kblockd_schedule_work+0x12/0x14
[43633.647009] [<c113e21f>] blk_unplug_timeout+0x57/0x5b
[43633.647009] [<c10325ca>] run_timer_softirq+0x17b/0x1f0
[43633.647009] [<c102e8d6>] __do_softirq+0xdb/0x1ac
[43633.647009] [<c102e9d7>] do_softirq+0x30/0x48
[43633.647009] [<c102eb53>] irq_exit+0x3d/0x74
[43633.647009] [<c10121a6>] smp_apic_timer_interrupt+0x73/0x81
[43633.647009] [<c100333b>] apic_timer_interrupt+0x2f/0x34
[43633.647009] [<c10adf79>] destroy_inode+0x32/0x35
[43633.647009] [<c10ae3fa>] generic_delete_inode+0xe4/0xe8
[43633.647009] [<c10ad740>] iput+0x50/0x53
[43633.647009] [<c10dbd0d>] sysfs_d_iput+0x28/0x2b
[43633.647009] [<c10ab44e>] dentry_iput+0x96/0xb8
[43633.647009] [<c10ab50d>] d_kill+0x21/0x3b
[43633.647009] [<c10ab6fa>] __shrink_dcache_sb+0x1d3/0x255
[43633.647009] [<c10ab855>] shrink_dcache_memory+0xd9/0x15e
[43633.647009] [<c108321b>] shrink_slab+0xda/0x15f
[43633.647009] [<c10836a1>] kswapd+0x401/0x587
[43633.647009] [<c103c78b>] kthread+0x70/0x75
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] INITIAL USE at:
[43633.647009] [<c104c943>] __lock_acquire+0x61e/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c103cc23>] prepare_to_wait+0x1c/0x4c
[43633.647009] [<c1038962>] worker_thread+0x78/0x287
[43633.647009] [<c103c78b>] kthread+0x70/0x75
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] }
[43633.647009] ... key at: [<c16231ac>] __key.25894+0x0/0x8
[43633.647009] -> (&rq->lock){-.-.-.} ops: 0 {
[43633.647009] IN-HARDIRQ-W at:
[43633.647009] [<c104c85e>] __lock_acquire+0x539/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c1026192>] scheduler_tick+0x36/0x1dc
[43633.647009] [<c1032ca6>] update_process_times+0x47/0x53
[43633.647009] [<c1046e81>] tick_periodic+0x6c/0x79
[43633.647009] [<c1046eab>] tick_handle_periodic+0x1d/0x76
[43633.647009] [<c1004c76>] timer_interrupt+0x3e/0x45
[43633.647009] [<c105fcef>] handle_IRQ_event+0x6a/0x12f
[43633.647009] [<c10614e4>] handle_level_irq+0x87/0xcd
[43633.647009] [<c100489d>] handle_irq+0x40/0x4b
[43633.647009] [<c100401c>] do_IRQ+0x49/0x9c
[43633.647009] [<c100302e>] common_interrupt+0x2e/0x34
[43633.647009] [<c114dc68>] get_from_free_list+0x32/0x39
[43633.647009] [<c114dda8>] idr_get_empty_slot+0x26/0x1e7
[43633.647009] [<c114df99>] ida_get_new_above+0x30/0x166
[43633.647009] [<c10b18f0>] alloc_vfsmnt+0x57/0x11d
[43633.647009] [<c109f585>] vfs_kern_mount+0x2b/0x7b
[43633.647009] [<c109f5ea>] kern_mount_data+0x15/0x17
[43633.647009] [<c145d44f>] sysfs_init+0x50/0xa0
[43633.647009] [<c145c95b>] mnt_init+0x87/0x147
[43633.647009] [<c145c634>] vfs_caches_init+0xd9/0xeb
[43633.647009] [<c144872b>] start_kernel+0x263/0x290
[43633.647009] [<c1448038>] __init_begin+0x38/0x40
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] IN-SOFTIRQ-W at:
[43633.647009] [<c104c87d>] __lock_acquire+0x558/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c101d62c>] task_rq_lock+0x3b/0x65
[43633.647009] [<c10228b1>] try_to_wake_up+0x31/0x20b
[43633.647009] [<c1022ac2>] wake_up_process+0x14/0x16
[43633.647009] [<c1032b63>] process_timeout+0xd/0xf
[43633.647009] [<c10325ca>] run_timer_softirq+0x17b/0x1f0
[43633.647009] [<c102e8d6>] __do_softirq+0xdb/0x1ac
[43633.647009] [<c102e9d7>] do_softirq+0x30/0x48
[43633.647009] [<c102eb53>] irq_exit+0x3d/0x74
[43633.647009] [<c10121a6>] smp_apic_timer_interrupt+0x73/0x81
[43633.647009] [<c100333b>] apic_timer_interrupt+0x2f/0x34
[43633.647009] [<c1001beb>] cpu_idle+0x53/0x88
[43633.647009] [<c12880c4>] rest_init+0x6c/0x6e
[43633.647009] [<c1448753>] start_kernel+0x28b/0x290
[43633.647009] [<c1448038>] __init_begin+0x38/0x40
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] IN-RECLAIM_FS-W at:
[43633.647009] [<c104c92d>] __lock_acquire+0x608/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c101d62c>] task_rq_lock+0x3b/0x65
[43633.647009] [<c1025e97>] set_cpus_allowed_ptr+0x1a/0xdc
[43633.647009] [<c10832fe>] kswapd+0x5e/0x587
[43633.647009] [<c103c78b>] kthread+0x70/0x75
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] INITIAL USE at:
[43633.647009] [<c104c943>] __lock_acquire+0x61e/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c1020b4d>] rq_attach_root+0x17/0xa9
[43633.647009] [<c1456efd>] sched_init+0x290/0x3a1
[43633.647009] [<c1448625>] start_kernel+0x15d/0x290
[43633.647009] [<c1448038>] __init_begin+0x38/0x40
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] }
[43633.647009] ... key at: [<c15e035c>] __key.51718+0x0/0x8
[43633.647009] -> (&vec->lock){..-...} ops: 0 {
[43633.647009] IN-SOFTIRQ-W at:
[43633.647009] [<c104c87d>] __lock_acquire+0x558/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c1078184>] cpupri_set+0x66/0xf0
[43633.647009] [<c1027584>] enqueue_task_rt+0xd3/0x232
[43633.647009] [<c101ad56>] enqueue_task+0x2f/0x3b
[43633.647009] [<c101ae2c>] activate_task+0x24/0x2a
[43633.647009] [<c102294b>] try_to_wake_up+0xcb/0x20b
[43633.647009] [<c1022ac2>] wake_up_process+0x14/0x16
[43633.647009] [<c1025cf7>] rebalance_domains+0x2d7/0x3b6
[43633.647009] [<c1025e0a>] run_rebalance_domains+0x34/0xa7
[43633.647009] [<c102e8d6>] __do_softirq+0xdb/0x1ac
[43633.647009] [<c102e9d7>] do_softirq+0x30/0x48
[43633.647009] [<c102eb53>] irq_exit+0x3d/0x74
[43633.647009] [<c10121a6>] smp_apic_timer_interrupt+0x73/0x81
[43633.647009] [<c100333b>] apic_timer_interrupt+0x2f/0x34
[43633.647009] [<c1214ab7>] cpuidle_idle_call+0x6a/0xa3
[43633.647009] [<c1001beb>] cpu_idle+0x53/0x88
[43633.647009] [<c12927c1>] start_secondary+0x1ad/0x1b4
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] INITIAL USE at:
[43633.647009] [<c104c943>] __lock_acquire+0x61e/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c10781c7>] cpupri_set+0xa9/0xf0
[43633.647009] [<c101f880>] rq_online_rt+0x5e/0x61
[43633.647009] [<c101cdc8>] set_rq_online+0x40/0x4a
[43633.647009] [<c1020bbc>] rq_attach_root+0x86/0xa9
[43633.647009] [<c1456efd>] sched_init+0x290/0x3a1
[43633.647009] [<c1448625>] start_kernel+0x15d/0x290
[43633.647009] [<c1448038>] __init_begin+0x38/0x40
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] }
[43633.647009] ... key at: [<c1b5e218>] __key.14809+0x0/0x28
[43633.647009] ... acquired at:
[43633.647009] [<c104d315>] __lock_acquire+0xff0/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c10781c7>] cpupri_set+0xa9/0xf0
[43633.647009] [<c101f880>] rq_online_rt+0x5e/0x61
[43633.647009] [<c101cdc8>] set_rq_online+0x40/0x4a
[43633.647009] [<c1020bbc>] rq_attach_root+0x86/0xa9
[43633.647009] [<c1456efd>] sched_init+0x290/0x3a1
[43633.647009] [<c1448625>] start_kernel+0x15d/0x290
[43633.647009] [<c1448038>] __init_begin+0x38/0x40
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009]
[43633.647009] -> (&rt_b->rt_runtime_lock){..-...} ops: 0 {
[43633.647009] IN-SOFTIRQ-W at:
[43633.647009] [<c104c87d>] __lock_acquire+0x558/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c1027611>] enqueue_task_rt+0x160/0x232
[43633.647009] [<c101ad56>] enqueue_task+0x2f/0x3b
[43633.647009] [<c101ae2c>] activate_task+0x24/0x2a
[43633.647009] [<c102294b>] try_to_wake_up+0xcb/0x20b
[43633.647009] [<c1022ac2>] wake_up_process+0x14/0x16
[43633.647009] [<c1025cf7>] rebalance_domains+0x2d7/0x3b6
[43633.647009] [<c1025e0a>] run_rebalance_domains+0x34/0xa7
[43633.647009] [<c102e8d6>] __do_softirq+0xdb/0x1ac
[43633.647009] [<c102e9d7>] do_softirq+0x30/0x48
[43633.647009] [<c102eb53>] irq_exit+0x3d/0x74
[43633.647009] [<c10121a6>] smp_apic_timer_interrupt+0x73/0x81
[43633.647009] [<c100333b>] apic_timer_interrupt+0x2f/0x34
[43633.647009] [<c1214ab7>] cpuidle_idle_call+0x6a/0xa3
[43633.647009] [<c1001beb>] cpu_idle+0x53/0x88
[43633.647009] [<c12927c1>] start_secondary+0x1ad/0x1b4
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] INITIAL USE at:
[43633.647009] [<c104c943>] __lock_acquire+0x61e/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c1027611>] enqueue_task_rt+0x160/0x232
[43633.647009] [<c101ad56>] enqueue_task+0x2f/0x3b
[43633.647009] [<c101ae2c>] activate_task+0x24/0x2a
[43633.647009] [<c102294b>] try_to_wake_up+0xcb/0x20b
[43633.647009] [<c1022ac2>] wake_up_process+0x14/0x16
[43633.647009] [<c1293248>] migration_call+0xbc/0x470
[43633.647009] [<c1457218>] migration_init+0x3b/0x4b
[43633.647009] [<c1001141>] do_one_initcall+0x4f/0x116
[43633.647009] [<c14481e7>] kernel_init+0x4d/0x16a
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] }
[43633.647009] ... key at: [<c15e0364>] __key.41387+0x0/0x8
[43633.647009] -> (&cpu_base->lock){-.-.-.} ops: 0 {
[43633.647009] IN-HARDIRQ-W at:
[43633.647009] [<c104c85e>] __lock_acquire+0x539/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c103f3a0>] hrtimer_run_queues+0xde/0x11c
[43633.647009] [<c1032c4e>] run_local_timers+0xd/0x1e
[43633.647009] [<c1032c88>] update_process_times+0x29/0x53
[43633.647009] [<c1046e81>] tick_periodic+0x6c/0x79
[43633.647009] [<c1046eab>] tick_handle_periodic+0x1d/0x76
[43633.647009] [<c10121a1>] smp_apic_timer_interrupt+0x6e/0x81
[43633.647009] [<c100333b>] apic_timer_interrupt+0x2f/0x34
[43633.647009] [<c10991d4>] cache_alloc_debugcheck_after+0x5d/0x194
[43633.647009] [<c109aa5f>] kmem_cache_alloc+0xd4/0x16e
[43633.647009] [<c109a3f6>] cache_alloc_refill+0x371/0x5c3
[43633.647009] [<c109a8d2>] __kmalloc+0xea/0x1a3
[43633.647009] [<c109adc3>] alloc_arraycache+0x1e/0x50
[43633.647009] [<c129484a>] cpuup_callback+0x14d/0x261
[43633.647009] [<c1299ed1>] notifier_call_chain+0x51/0x7e
[43633.647009] [<c104082e>] __raw_notifier_call_chain+0x13/0x15
[43633.647009] [<c12936d4>] _cpu_up+0x62/0x105
[43633.647009] [<c12937c3>] cpu_up+0x4c/0x5c
[43633.647009] [<c1448233>] kernel_init+0x99/0x16a
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] IN-SOFTIRQ-W at:
[43633.647009] [<c104c87d>] __lock_acquire+0x558/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c103f695>] lock_hrtimer_base+0x1d/0x38
[43633.647009] [<c103f7b8>] __hrtimer_start_range_ns+0x34/0x326
[43633.647009] [<c103fade>] hrtimer_start_range_ns+0x18/0x1d
[43633.647009] [<c1047f3e>] tick_setup_sched_timer+0x10b/0x133
[43633.647009] [<c103f536>] hrtimer_run_pending+0xb7/0xed
[43633.647009] [<c1032476>] run_timer_softirq+0x27/0x1f0
[43633.647009] [<c102e8d6>] __do_softirq+0xdb/0x1ac
[43633.647009] [<c102e9d7>] do_softirq+0x30/0x48
[43633.647009] [<c102eb53>] irq_exit+0x3d/0x74
[43633.647009] [<c10121a6>] smp_apic_timer_interrupt+0x73/0x81
[43633.647009] [<c100333b>] apic_timer_interrupt+0x2f/0x34
[43633.647009] [<c1001beb>] cpu_idle+0x53/0x88
[43633.647009] [<c12927c1>] start_secondary+0x1ad/0x1b4
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] IN-RECLAIM_FS-W at:
[43633.647009] [<c104c92d>] __lock_acquire+0x608/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c103fdf4>] hrtimer_interrupt+0xad/0x16c
[43633.647009] [<c10121a1>] smp_apic_timer_interrupt+0x6e/0x81
[43633.647009] [<c100333b>] apic_timer_interrupt+0x2f/0x34
[43633.647009] [<c103c78b>] kthread+0x70/0x75
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] INITIAL USE at:
[43633.647009] [<c104c943>] __lock_acquire+0x61e/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c103f695>] lock_hrtimer_base+0x1d/0x38
[43633.647009] [<c103f7b8>] __hrtimer_start_range_ns+0x34/0x326
[43633.647009] [<c1027662>] enqueue_task_rt+0x1b1/0x232
[43633.647009] [<c101ad56>] enqueue_task+0x2f/0x3b
[43633.647009] [<c101ae2c>] activate_task+0x24/0x2a
[43633.647009] [<c102294b>] try_to_wake_up+0xcb/0x20b
[43633.647009] [<c1022ac2>] wake_up_process+0x14/0x16
[43633.647009] [<c1293248>] migration_call+0xbc/0x470
[43633.647009] [<c1457218>] migration_init+0x3b/0x4b
[43633.647009] [<c1001141>] do_one_initcall+0x4f/0x116
[43633.647009] [<c14481e7>] kernel_init+0x4d/0x16a
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] }
[43633.647009] ... key at: [<c1623538>] __key.20989+0x0/0x8
[43633.647009] -> (&cpu_base->lock/1){......} ops: 0 {
[43633.647009] INITIAL USE at:
[43633.647009] [<c104c943>] __lock_acquire+0x61e/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c12979f0>] _spin_lock_nested+0x34/0x64
[43633.647009] [<c1293ed9>] hrtimer_cpu_notify+0xf5/0x17d
[43633.647009] [<c1299ed1>] notifier_call_chain+0x51/0x7e
[43633.647009] [<c1040841>] raw_notifier_call_chain+0x11/0x13
[43633.647009] [<c128883f>] _cpu_down+0x16f/0x23a
[43633.647009] [<c102ad11>] disable_nonboot_cpus+0x5d/0xf4
[43633.647009] [<c1057a92>] suspend_devices_and_enter+0xbe/0x178
[43633.647009] [<c1057c19>] enter_state+0xcd/0x119
[43633.647009] [<c10573d5>] state_store+0x98/0xac
[43633.647009] [<c114e6b5>] kobj_attr_store+0x16/0x22
[43633.647009] [<c10daed5>] sysfs_write_file+0xcd/0xf8
[43633.647009] [<c109e7af>] vfs_write+0x8f/0x117
[43633.647009] [<c109e8f3>] sys_write+0x48/0x75
[43633.647009] [<c1002988>] sysenter_do_call+0x12/0x36
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] }
[43633.647009] ... key at: [<c1623539>] __key.20989+0x1/0x8
[43633.647009] ... acquired at:
[43633.647009] [<c104d315>] __lock_acquire+0xff0/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c12979f0>] _spin_lock_nested+0x34/0x64
[43633.647009] [<c1293ed9>] hrtimer_cpu_notify+0xf5/0x17d
[43633.647009] [<c1299ed1>] notifier_call_chain+0x51/0x7e
[43633.647009] [<c1040841>] raw_notifier_call_chain+0x11/0x13
[43633.647009] [<c128883f>] _cpu_down+0x16f/0x23a
[43633.647009] [<c102ad11>] disable_nonboot_cpus+0x5d/0xf4
[43633.647009] [<c1057a92>] suspend_devices_and_enter+0xbe/0x178
[43633.647009] [<c1057c19>] enter_state+0xcd/0x119
[43633.647009] [<c10573d5>] state_store+0x98/0xac
[43633.647009] [<c114e6b5>] kobj_attr_store+0x16/0x22
[43633.647009] [<c10daed5>] sysfs_write_file+0xcd/0xf8
[43633.647009] [<c109e7af>] vfs_write+0x8f/0x117
[43633.647009] [<c109e8f3>] sys_write+0x48/0x75
[43633.647009] [<c1002988>] sysenter_do_call+0x12/0x36
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009]
[43633.647009] ... acquired at:
[43633.647009] [<c104d315>] __lock_acquire+0xff0/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c103f695>] lock_hrtimer_base+0x1d/0x38
[43633.647009] [<c103f7b8>] __hrtimer_start_range_ns+0x34/0x326
[43633.647009] [<c1027662>] enqueue_task_rt+0x1b1/0x232
[43633.647009] [<c101ad56>] enqueue_task+0x2f/0x3b
[43633.647009] [<c101ae2c>] activate_task+0x24/0x2a
[43633.647009] [<c102294b>] try_to_wake_up+0xcb/0x20b
[43633.647009] [<c1022ac2>] wake_up_process+0x14/0x16
[43633.647009] [<c1293248>] migration_call+0xbc/0x470
[43633.647009] [<c1457218>] migration_init+0x3b/0x4b
[43633.647009] [<c1001141>] do_one_initcall+0x4f/0x116
[43633.647009] [<c14481e7>] kernel_init+0x4d/0x16a
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009]
[43633.647009] -> (&rt_rq->rt_runtime_lock){-.-...} ops: 0 {
[43633.647009] IN-HARDIRQ-W at:
[43633.647009] [<c104c85e>] __lock_acquire+0x539/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c101f3eb>] update_curr_rt+0x123/0x1b0
[43633.647009] [<c101f48c>] task_tick_rt+0x14/0xb1
[43633.647009] [<c1026234>] scheduler_tick+0xd8/0x1dc
[43633.647009] [<c1032ca6>] update_process_times+0x47/0x53
[43633.647009] [<c1047d9b>] tick_sched_timer+0x71/0x9f
[43633.647009] [<c103f290>] __run_hrtimer+0x6b/0x9d
[43633.647009] [<c103fe59>] hrtimer_interrupt+0x112/0x16c
[43633.647009] [<c10121a1>] smp_apic_timer_interrupt+0x6e/0x81
[43633.647009] [<c100333b>] apic_timer_interrupt+0x2f/0x34
[43633.647009] [<c1038a94>] worker_thread+0x1aa/0x287
[43633.647009] [<c103c78b>] kthread+0x70/0x75
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] IN-SOFTIRQ-W at:
[43633.647009] [<c104c87d>] __lock_acquire+0x558/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c101fc8f>] sched_rt_period_timer+0xbc/0x201
[43633.647009] [<c103f290>] __run_hrtimer+0x6b/0x9d
[43633.647009] [<c103fe59>] hrtimer_interrupt+0x112/0x16c
[43633.647009] [<c1047138>] tick_do_broadcast+0x32/0x5b
[43633.647009] [<c1047210>] tick_handle_oneshot_broadcast+0xaf/0xe7
[43633.647009] [<c1004c76>] timer_interrupt+0x3e/0x45
[43633.647009] [<c105fcef>] handle_IRQ_event+0x6a/0x12f
[43633.647009] [<c1061365>] handle_edge_irq+0xcf/0x112
[43633.647009] [<c100489d>] handle_irq+0x40/0x4b
[43633.647009] [<c100401c>] do_IRQ+0x49/0x9c
[43633.647009] [<c100302e>] common_interrupt+0x2e/0x34
[43633.647009] [<c102e9d7>] do_softirq+0x30/0x48
[43633.647009] [<c102eb53>] irq_exit+0x3d/0x74
[43633.647009] [<c100405b>] do_IRQ+0x88/0x9c
[43633.647009] [<c100302e>] common_interrupt+0x2e/0x34
[43633.647009] [<c1214ab7>] cpuidle_idle_call+0x6a/0xa3
[43633.647009] [<c1001beb>] cpu_idle+0x53/0x88
[43633.647009] [<c12880c4>] rest_init+0x6c/0x6e
[43633.647009] [<c1448753>] start_kernel+0x28b/0x290
[43633.647009] [<c1448038>] __init_begin+0x38/0x40
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] INITIAL USE at:
[43633.647009] [<c104c943>] __lock_acquire+0x61e/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c101f3eb>] update_curr_rt+0x123/0x1b0
[43633.647009] [<c101fa28>] dequeue_task_rt+0x22/0x62
[43633.647009] [<c101adfa>] dequeue_task+0x98/0xa6
[43633.647009] [<c101ae56>] deactivate_task+0x24/0x2a
[43633.647009] [<c129519c>] schedule+0x13e/0x81f
[43633.647009] [<c10259bb>] migration_thread+0x179/0x1de
[43633.647009] [<c103c78b>] kthread+0x70/0x75
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] }
[43633.647009] ... key at: [<c15e036c>] __key.51698+0x0/0x8
[43633.647009] ... acquired at:
[43633.647009] [<c104d315>] __lock_acquire+0xff0/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c101dc40>] __enable_runtime+0x34/0x7f
[43633.647009] [<c101f866>] rq_online_rt+0x44/0x61
[43633.647009] [<c101cdc8>] set_rq_online+0x40/0x4a
[43633.647009] [<c129327c>] migration_call+0xf0/0x470
[43633.647009] [<c1299ed1>] notifier_call_chain+0x51/0x7e
[43633.647009] [<c1040841>] raw_notifier_call_chain+0x11/0x13
[43633.647009] [<c1293738>] _cpu_up+0xc6/0x105
[43633.647009] [<c12937c3>] cpu_up+0x4c/0x5c
[43633.647009] [<c1448233>] kernel_init+0x99/0x16a
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009]
[43633.647009] ... acquired at:
[43633.647009] [<c104d315>] __lock_acquire+0xff0/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c1027611>] enqueue_task_rt+0x160/0x232
[43633.647009] [<c101ad56>] enqueue_task+0x2f/0x3b
[43633.647009] [<c101ae2c>] activate_task+0x24/0x2a
[43633.647009] [<c102294b>] try_to_wake_up+0xcb/0x20b
[43633.647009] [<c1022ac2>] wake_up_process+0x14/0x16
[43633.647009] [<c1293248>] migration_call+0xbc/0x470
[43633.647009] [<c1457218>] migration_init+0x3b/0x4b
[43633.647009] [<c1001141>] do_one_initcall+0x4f/0x116
[43633.647009] [<c14481e7>] kernel_init+0x4d/0x16a
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009]
[43633.647009] ... acquired at:
[43633.647009] [<c104d315>] __lock_acquire+0xff0/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c101f3eb>] update_curr_rt+0x123/0x1b0
[43633.647009] [<c101fa28>] dequeue_task_rt+0x22/0x62
[43633.647009] [<c101adfa>] dequeue_task+0x98/0xa6
[43633.647009] [<c101ae56>] deactivate_task+0x24/0x2a
[43633.647009] [<c129519c>] schedule+0x13e/0x81f
[43633.647009] [<c10259bb>] migration_thread+0x179/0x1de
[43633.647009] [<c103c78b>] kthread+0x70/0x75
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009]
[43633.647009] -> (&rq->lock/1){..-...} ops: 0 {
[43633.647009] IN-SOFTIRQ-W at:
[43633.647009] [<c104c87d>] __lock_acquire+0x558/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c12979f0>] _spin_lock_nested+0x34/0x64
[43633.647009] [<c102232a>] double_rq_lock+0x4c/0x7f
[43633.647009] [<c1025ba9>] rebalance_domains+0x189/0x3b6
[43633.647009] [<c1025e0a>] run_rebalance_domains+0x34/0xa7
[43633.647009] [<c102e8d6>] __do_softirq+0xdb/0x1ac
[43633.647009] [<c102e9d7>] do_softirq+0x30/0x48
[43633.647009] [<c102eb53>] irq_exit+0x3d/0x74
[43633.647009] [<c10121a6>] smp_apic_timer_interrupt+0x73/0x81
[43633.647009] [<c100333b>] apic_timer_interrupt+0x2f/0x34
[43633.647009] [<c1001beb>] cpu_idle+0x53/0x88
[43633.647009] [<c12927c1>] start_secondary+0x1ad/0x1b4
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] INITIAL USE at:
[43633.647009] [<c104c943>] __lock_acquire+0x61e/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c12979f0>] _spin_lock_nested+0x34/0x64
[43633.647009] [<c102232a>] double_rq_lock+0x4c/0x7f
[43633.647009] [<c1024c11>] __migrate_task+0x4d/0xc1
[43633.647009] [<c10259ef>] migration_thread+0x1ad/0x1de
[43633.647009] [<c103c78b>] kthread+0x70/0x75
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] }
[43633.647009] ... key at: [<c15e035d>] __key.51718+0x1/0x8
[43633.647009] -> (&sig->cputimer.lock){-.-...} ops: 0 {
[43633.647009] IN-HARDIRQ-W at:
[43633.647009] [<c104c85e>] __lock_acquire+0x539/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c101debd>] account_system_time+0x105/0x157
[43633.647009] [<c101df78>] account_process_tick+0x69/0x7e
[43633.647009] [<c1032c83>] update_process_times+0x24/0x53
[43633.647009] [<c1047d9b>] tick_sched_timer+0x71/0x9f
[43633.647009] [<c103f290>] __run_hrtimer+0x6b/0x9d
[43633.647009] [<c103fe59>] hrtimer_interrupt+0x112/0x16c
[43633.647009] [<c10121a1>] smp_apic_timer_interrupt+0x6e/0x81
[43633.647009] [<c100333b>] apic_timer_interrupt+0x2f/0x34
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c10ac78c>] __d_lookup+0x96/0x140
[43633.647009] [<c10a50c6>] do_lookup+0x23/0x158
[43633.647009] [<c10a6584>] __link_path_walk+0x30d/0xae6
[43633.647009] [<c10a6eb2>] path_walk+0x3e/0x77
[43633.647009] [<c10a6f78>] do_path_lookup+0x26/0x47
[43633.647009] [<c10a79fe>] do_filp_open+0xcc/0x6e1
[43633.647009] [<c109c965>] do_sys_open+0x4d/0xe9
[43633.647009] [<c109ca4d>] sys_open+0x23/0x2b
[43633.647009] [<c1002988>] sysenter_do_call+0x12/0x36
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] IN-SOFTIRQ-W at:
[43633.647009] [<c104c87d>] __lock_acquire+0x558/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c101d7df>] update_curr+0x128/0x149
[43633.647009] [<c101ed63>] enqueue_task_fair+0x40/0xdc
[43633.647009] [<c101ad56>] enqueue_task+0x2f/0x3b
[43633.647009] [<c101ae2c>] activate_task+0x24/0x2a
[43633.647009] [<c102294b>] try_to_wake_up+0xcb/0x20b
[43633.647009] [<c1022a9b>] default_wake_function+0x10/0x12
[43633.647009] [<c103ca74>] autoremove_wake_function+0x14/0x34
[43633.647009] [<c103cac3>] wake_bit_function+0x2f/0x3c
[43633.647009] [<c101b00a>] __wake_up_common+0x39/0x61
[43633.647009] [<c101d557>] __wake_up+0x2e/0x40
[43633.647009] [<c103c9fd>] __wake_up_bit+0x2c/0x2f
[43633.647009] [<c107921f>] end_page_writeback+0x65/0x68
[43633.647009] [<c10ba9e5>] end_buffer_async_write+0x139/0x189
[43633.647009] [<c10b9449>] end_bio_bh_io_sync+0x33/0x3d
[43633.647009] [<c10bc824>] bio_endio+0x28/0x2a
[43633.647009] [<c113e468>] req_bio_endio+0x89/0xa6
[43633.647009] [<c113e66b>] blk_update_request+0x1e6/0x379
[43633.647009] [<c113e811>] blk_update_bidi_request+0x13/0x41
[43633.647009] [<c1140320>] blk_end_bidi_request+0x1d/0x55
[43633.647009] [<c1140396>] blk_end_request+0xf/0x11
[43633.647009] [<c11cb225>] scsi_io_completion+0x196/0x3c4
[43633.647009] [<c11c5785>] scsi_finish_command+0xd3/0xdb
[43633.647009] [<c11cb554>] scsi_softirq_done+0xed/0xf5
[43633.647009] [<c1145c63>] blk_done_softirq+0x63/0x70
[43633.647009] [<c102e8d6>] __do_softirq+0xdb/0x1ac
[43633.647009] [<c102e9d7>] do_softirq+0x30/0x48
[43633.647009] [<c102eb53>] irq_exit+0x3d/0x74
[43633.647009] [<c100405b>] do_IRQ+0x88/0x9c
[43633.647009] [<c100302e>] common_interrupt+0x2e/0x34
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<f8043d41>] unix_stream_recvmsg+0xf7/0x416 [unix]
[43633.647009] [<c12259bd>] sock_aio_read+0xd7/0xe1
[43633.647009] [<c109df9b>] do_sync_read+0xb0/0xeb
[43633.647009] [<c109e9bd>] vfs_read+0x9d/0x115
[43633.647009] [<c109eaf1>] sys_read+0x48/0x75
[43633.647009] [<c1002988>] sysenter_do_call+0x12/0x36
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] INITIAL USE at:
[43633.647009] [<c104c943>] __lock_acquire+0x61e/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c103d893>] thread_group_cputimer+0x26/0xae
[43633.647009] [<c103d93e>] cpu_timer_sample_group+0x23/0x66
[43633.647009] [<c103d9af>] set_process_cpu_timer+0x2e/0xb4
[43633.647009] [<c103da8f>] update_rlimit_cpu+0x5a/0x73
[43633.647009] [<c1036739>] sys_setrlimit+0xdf/0xf6
[43633.647009] [<c1002988>] sysenter_do_call+0x12/0x36
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] }
[43633.647009] ... key at: [<c15e1668>] __key.21973+0x0/0x8
[43633.647009] ... acquired at:
[43633.647009] [<c104d315>] __lock_acquire+0xff0/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c101d7df>] update_curr+0x128/0x149
[43633.647009] [<c101ed63>] enqueue_task_fair+0x40/0xdc
[43633.647009] [<c101ad56>] enqueue_task+0x2f/0x3b
[43633.647009] [<c101ae2c>] activate_task+0x24/0x2a
[43633.647009] [<c1024c55>] __migrate_task+0x91/0xc1
[43633.647009] [<c10259ef>] migration_thread+0x1ad/0x1de
[43633.647009] [<c103c78b>] kthread+0x70/0x75
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009]
[43633.647009] ... acquired at:
[43633.647009] [<c104d315>] __lock_acquire+0xff0/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c12979f0>] _spin_lock_nested+0x34/0x64
[43633.647009] [<c102232a>] double_rq_lock+0x4c/0x7f
[43633.647009] [<c1024c11>] __migrate_task+0x4d/0xc1
[43633.647009] [<c10259ef>] migration_thread+0x1ad/0x1de
[43633.647009] [<c103c78b>] kthread+0x70/0x75
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009]
[43633.647009] ... acquired at:
[43633.647009] [<c104d315>] __lock_acquire+0xff0/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c101d7df>] update_curr+0x128/0x149
[43633.647009] [<c101e7b5>] dequeue_task_fair+0x40/0x188
[43633.647009] [<c101adfa>] dequeue_task+0x98/0xa6
[43633.647009] [<c101ae56>] deactivate_task+0x24/0x2a
[43633.647009] [<c129519c>] schedule+0x13e/0x81f
[43633.647009] [<c12958a0>] io_schedule+0x23/0x2d
[43633.647009] [<c1079186>] sync_page+0x47/0x4b
[43633.647009] [<c1079197>] sync_page_killable+0xd/0x30
[43633.647009] [<c1295bf3>] __wait_on_bit_lock+0x39/0x75
[43633.647009] [<c10790ae>] __lock_page_killable+0x74/0x7b
[43633.647009] [<c107adb5>] generic_file_aio_read+0x383/0x532
[43633.647009] [<c109df9b>] do_sync_read+0xb0/0xeb
[43633.647009] [<c109e9ad>] vfs_read+0x8d/0x115
[43633.647009] [<c109eaf1>] sys_read+0x48/0x75
[43633.647009] [<c1002988>] sysenter_do_call+0x12/0x36
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009]
[43633.647009] ... acquired at:
[43633.647009] [<c104d315>] __lock_acquire+0xff0/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c101d62c>] task_rq_lock+0x3b/0x65
[43633.647009] [<c10228b1>] try_to_wake_up+0x31/0x20b
[43633.647009] [<c1022a9b>] default_wake_function+0x10/0x12
[43633.647009] [<c103ca74>] autoremove_wake_function+0x14/0x34
[43633.647009] [<c101b00a>] __wake_up_common+0x39/0x61
[43633.647009] [<c101d557>] __wake_up+0x2e/0x40
[43633.647009] [<c1038ccd>] insert_work+0x9a/0xa3
[43633.647009] [<c10394f4>] __queue_work+0x26/0x34
[43633.647009] [<c103957c>] queue_work_on+0x40/0x49
[43633.647009] [<c10396a2>] queue_work+0x26/0x4a
[43633.647009] [<c1037fe7>] call_usermodehelper_exec+0x8f/0xe1
[43633.647009] [<c114f357>] kobject_uevent_env+0x333/0x368
[43633.647009] [<c114f396>] kobject_uevent+0xa/0xc
[43633.647009] [<c114eb0c>] kset_register+0x2e/0x34
[43633.647009] [<c11b74fe>] bus_register+0xe4/0x232
[43633.647009] [<c146315e>] platform_bus_init+0x23/0x38
[43633.647009] [<c14631f6>] driver_init+0x1c/0x28
[43633.647009] [<c144828c>] kernel_init+0xf2/0x16a
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009]
[43633.647009] ... acquired at:
[43633.647009] [<c104d315>] __lock_acquire+0xff0/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c101d543>] __wake_up+0x1a/0x40
[43633.647009] [<c1038ccd>] insert_work+0x9a/0xa3
[43633.647009] [<c10394f4>] __queue_work+0x26/0x34
[43633.647009] [<c103957c>] queue_work_on+0x40/0x49
[43633.647009] [<c10396a2>] queue_work+0x26/0x4a
[43633.647009] [<c1037fe7>] call_usermodehelper_exec+0x8f/0xe1
[43633.647009] [<c114f357>] kobject_uevent_env+0x333/0x368
[43633.647009] [<c114f396>] kobject_uevent+0xa/0xc
[43633.647009] [<c114eb0c>] kset_register+0x2e/0x34
[43633.647009] [<c11b74fe>] bus_register+0xe4/0x232
[43633.647009] [<c146315e>] platform_bus_init+0x23/0x38
[43633.647009] [<c14631f6>] driver_init+0x1c/0x28
[43633.647009] [<c144828c>] kernel_init+0xf2/0x16a
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009]
[43633.647009] ... acquired at:
[43633.647009] [<c104d315>] __lock_acquire+0xff0/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c10394e5>] __queue_work+0x17/0x34
[43633.647009] [<c103957c>] queue_work_on+0x40/0x49
[43633.647009] [<c10396a2>] queue_work+0x26/0x4a
[43633.647009] [<c10396da>] schedule_work+0x14/0x16
[43633.647009] [<fa2558ff>] add_todo+0x4a/0x58 [mac80211]
[43633.647009] [<fa256173>] ieee80211_key_link+0x11a/0x138 [mac80211]
[43633.647009] [<fa2505ff>] ieee80211_add_key+0xee/0x128 [mac80211]
[43633.647009] [<f8f34451>] cfg80211_set_encryption+0xf2/0x163 [cfg80211]
[43633.647009] [<f8f34618>] cfg80211_wext_siwencodeext+0x156/0x16f [cfg80211]
[43633.647009] [<c128779c>] ioctl_standard_call+0x1cc/0x27f
[43633.647009] [<c1287922>] wext_handle_ioctl+0xd3/0x15d
[43633.647009] [<c12353e5>] dev_ioctl+0x564/0x584
[43633.647009] [<c1225eb5>] sock_ioctl+0x1e6/0x1f2
[43633.647009] [<c10a8d82>] vfs_ioctl+0x1d/0x76
[43633.647009] [<c10a9321>] do_vfs_ioctl+0x4a0/0x4de
[43633.647009] [<c10a9392>] sys_ioctl+0x33/0x4d
[43633.647009] [<c1002988>] sysenter_do_call+0x12/0x36
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009]
[43633.647009] ... acquired at:
[43633.647009] [<c104d315>] __lock_acquire+0xff0/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<fa2558d1>] add_todo+0x1c/0x58 [mac80211]
[43633.647009] [<fa25594d>] ieee80211_set_default_key+0x40/0x54 [mac80211]
[43633.647009] [<fa2503dc>] ieee80211_config_default_key+0x6a/0xa1 [mac80211]
[43633.647009] [<f8f34477>] cfg80211_set_encryption+0x118/0x163 [cfg80211]
[43633.647009] [<f8f34618>] cfg80211_wext_siwencodeext+0x156/0x16f [cfg80211]
[43633.647009] [<c128779c>] ioctl_standard_call+0x1cc/0x27f
[43633.647009] [<c1287922>] wext_handle_ioctl+0xd3/0x15d
[43633.647009] [<c12353e5>] dev_ioctl+0x564/0x584
[43633.647009] [<c1225eb5>] sock_ioctl+0x1e6/0x1f2
[43633.647009] [<c10a8d82>] vfs_ioctl+0x1d/0x76
[43633.647009] [<c10a9321>] do_vfs_ioctl+0x4a0/0x4de
[43633.647009] [<c10a9392>] sys_ioctl+0x33/0x4d
[43633.647009] [<c1002988>] sysenter_do_call+0x12/0x36
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009]
[43633.647009] ... acquired at:
[43633.647009] [<c104d315>] __lock_acquire+0xff0/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<fa255e6b>] ieee80211_key_free+0x41/0x60 [mac80211]
[43633.647009] [<fa2440e0>] __sta_info_unlink+0x69/0x162 [mac80211]
[43633.647009] [<fa244201>] sta_info_unlink+0x28/0x36 [mac80211]
[43633.647009] [<fa249908>] ieee80211_set_disassoc+0x27b/0x2bb [mac80211]
[43633.647009] [<fa249985>] ieee80211_sta_disassociate+0x3d/0x47 [mac80211]
[43633.647009] [<fa24f085>] ieee80211_disassoc+0x3d/0x3f [mac80211]
[43633.647009] [<f8f34265>] cfg80211_wext_siwmlme+0xc2/0xd8 [cfg80211]
[43633.647009] [<c128779c>] ioctl_standard_call+0x1cc/0x27f
[43633.647009] [<c1287922>] wext_handle_ioctl+0xd3/0x15d
[43633.647009] [<c12353e5>] dev_ioctl+0x564/0x584
[43633.647009] [<c1225eb5>] sock_ioctl+0x1e6/0x1f2
[43633.647009] [<c10a8d82>] vfs_ioctl+0x1d/0x76
[43633.647009] [<c10a9321>] do_vfs_ioctl+0x4a0/0x4de
[43633.647009] [<c10a9392>] sys_ioctl+0x33/0x4d
[43633.647009] [<c1002988>] sysenter_do_call+0x12/0x36
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009]
[43633.647009] -> (&sta->flaglock){..-.-.} ops: 0 {
[43633.647009] IN-SOFTIRQ-W at:
[43633.647009] [<c104c87d>] __lock_acquire+0x558/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<fa2511ff>] ieee80211_invoke_rx_handlers+0x117/0x125e [mac80211]
[43633.647009] [<fa25286b>] __ieee80211_rx_handle_packet+0x525/0x552 [mac80211]
[43633.647009] [<fa25311f>] __ieee80211_rx+0x500/0x581 [mac80211]
[43633.647009] [<fa4ecf17>] ath5k_tasklet_rx+0x51b/0x56c [ath5k]
[43633.647009] [<c102e209>] tasklet_action+0x93/0xe6
[43633.647009] [<c102e8d6>] __do_softirq+0xdb/0x1ac
[43633.647009] [<c102e9d7>] do_softirq+0x30/0x48
[43633.647009] [<c102eb53>] irq_exit+0x3d/0x74
[43633.647009] [<c100405b>] do_IRQ+0x88/0x9c
[43633.647009] [<c100302e>] common_interrupt+0x2e/0x34
[43633.647009] [<c1278acf>] fib_netdev_event+0x6c/0x75
[43633.647009] [<c1299ed1>] notifier_call_chain+0x51/0x7e
[43633.647009] [<c1040841>] raw_notifier_call_chain+0x11/0x13
[43633.647009] [<c123377f>] call_netdevice_notifiers+0x16/0x18
[43633.647009] [<c1233dd9>] netdev_state_change+0x20/0x31
[43633.647009] [<c123cb3d>] __linkwatch_run_queue+0x146/0x16e
[43633.647009] [<c123cb85>] linkwatch_event+0x20/0x27
[43633.647009] [<c1038a94>] worker_thread+0x1aa/0x287
[43633.647009] [<c103c78b>] kthread+0x70/0x75
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] IN-RECLAIM_FS-W at:
[43633.647009] [<c104c92d>] __lock_acquire+0x608/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<fa250965>] ieee80211_drop_unencrypted+0x6d/0x19a [mac80211]
[43633.647009] [<fa2510ad>] ieee80211_rx_h_mgmt+0x4b/0x86 [mac80211]
[43633.647009] [<fa252115>] ieee80211_invoke_rx_handlers+0x102d/0x125e [mac80211]
[43633.647009] [<fa25286b>] __ieee80211_rx_handle_packet+0x525/0x552 [mac80211]
[43633.647009] [<fa25311f>] __ieee80211_rx+0x500/0x581 [mac80211]
[43633.647009] [<fa4ecf17>] ath5k_tasklet_rx+0x51b/0x56c [ath5k]
[43633.647009] [<c102e209>] tasklet_action+0x93/0xe6
[43633.647009] [<c102e8d6>] __do_softirq+0xdb/0x1ac
[43633.647009] [<c102e9d7>] do_softirq+0x30/0x48
[43633.647009] [<c102eb53>] irq_exit+0x3d/0x74
[43633.647009] [<c100405b>] do_IRQ+0x88/0x9c
[43633.647009] [<c100302e>] common_interrupt+0x2e/0x34
[43633.647009] [<c107d7e6>] free_hot_cold_page+0x8e/0x1fb
[43633.647009] [<c107d975>] __pagevec_free+0x22/0x2a
[43633.647009] [<c108079a>] release_pages+0x12b/0x165
[43633.647009] [<c1080cea>] __pagevec_release+0x1d/0x26
[43633.647009] [<c10811c5>] invalidate_mapping_pages+0xc3/0xf0
[43633.647009] [<c10ae121>] shrink_icache_memory+0xdf/0x1de
[43633.647009] [<c108321b>] shrink_slab+0xda/0x15f
[43633.647009] [<c10836a1>] kswapd+0x401/0x587
[43633.647009] [<c103c78b>] kthread+0x70/0x75
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] INITIAL USE at:
[43633.647009] [<c104c943>] __lock_acquire+0x61e/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<fa24b30e>] ieee80211_rx_mgmt_assoc_resp+0x344/0xa13 [mac80211]
[43633.647009] [<fa24c38b>] ieee80211_sta_work+0x776/0xd3b [mac80211]
[43633.647009] [<c1038a94>] worker_thread+0x1aa/0x287
[43633.647009] [<c103c78b>] kthread+0x70/0x75
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] }
[43633.647009] ... key at: [<fa26a9d8>] __key.38223+0x0/0xffff0e6f [mac80211]
[43633.647009] ... acquired at:
[43633.647009] [<c104d315>] __lock_acquire+0xff0/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<fa24410e>] __sta_info_unlink+0x97/0x162 [mac80211]
[43633.647009] [<fa244201>] sta_info_unlink+0x28/0x36 [mac80211]
[43633.647009] [<fa249908>] ieee80211_set_disassoc+0x27b/0x2bb [mac80211]
[43633.647009] [<fa249985>] ieee80211_sta_disassociate+0x3d/0x47 [mac80211]
[43633.647009] [<fa24f085>] ieee80211_disassoc+0x3d/0x3f [mac80211]
[43633.647009] [<f8f34265>] cfg80211_wext_siwmlme+0xc2/0xd8 [cfg80211]
[43633.647009] [<c128779c>] ioctl_standard_call+0x1cc/0x27f
[43633.647009] [<c1287922>] wext_handle_ioctl+0xd3/0x15d
[43633.647009] [<c12353e5>] dev_ioctl+0x564/0x584
[43633.647009] [<c1225eb5>] sock_ioctl+0x1e6/0x1f2
[43633.647009] [<c10a8d82>] vfs_ioctl+0x1d/0x76
[43633.647009] [<c10a9321>] do_vfs_ioctl+0x4a0/0x4de
[43633.647009] [<c10a9392>] sys_ioctl+0x33/0x4d
[43633.647009] [<c1002988>] sysenter_do_call+0x12/0x36
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009]
[43633.647009]
[43633.647009] the second lock's dependencies:
[43633.647009] -> (todo_lock){+.+...} ops: 0 {
[43633.647009] HARDIRQ-ON-W at:
[43633.647009] [<c104c8d3>] __lock_acquire+0x5ae/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<fa255e06>] __ieee80211_key_todo+0x1cb/0x1ef [mac80211]
[43633.647009] [<fa255f29>] ieee80211_key_todo+0x19/0x25 [mac80211]
[43633.647009] [<fa255fb6>] ieee80211_todo_for_each_key+0x72/0x79 [mac80211]
[43633.647009] [<fa256054>] ieee80211_enable_keys+0x56/0x5b [mac80211]
[43633.647009] [<fa24d7f4>] ieee80211_open+0x47a/0x5f4 [mac80211]
[43633.647009] [<c123430c>] dev_open+0x8b/0xc0
[43633.647009] [<c1233a5c>] dev_change_flags+0x9b/0x14c
[43633.647009] [<c123b01d>] do_setlink+0x2a2/0x348
[43633.647009] [<c123b1a8>] rtnl_setlink+0xe5/0xe9
[43633.647009] [<c123bf67>] rtnetlink_rcv_msg+0x18a/0x1a0
[43633.647009] [<c12442cc>] netlink_rcv_skb+0x35/0x7d
[43633.647009] [<c123bdd6>] rtnetlink_rcv+0x20/0x27
[43633.647009] [<c1243e4c>] netlink_unicast+0x1b1/0x212
[43633.647009] [<c12440d0>] netlink_sendmsg+0x223/0x230
[43633.647009] [<c1226655>] sock_sendmsg+0xcc/0xe2
[43633.647009] [<c12267b9>] sys_sendmsg+0x14e/0x19b
[43633.647009] [<c122770c>] sys_socketcall+0x147/0x170
[43633.647009] [<c1002988>] sysenter_do_call+0x12/0x36
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] SOFTIRQ-ON-W at:
[43633.647009] [<c104c8f2>] __lock_acquire+0x5cd/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<fa255e06>] __ieee80211_key_todo+0x1cb/0x1ef [mac80211]
[43633.647009] [<fa255f29>] ieee80211_key_todo+0x19/0x25 [mac80211]
[43633.647009] [<fa255fb6>] ieee80211_todo_for_each_key+0x72/0x79 [mac80211]
[43633.647009] [<fa256054>] ieee80211_enable_keys+0x56/0x5b [mac80211]
[43633.647009] [<fa24d7f4>] ieee80211_open+0x47a/0x5f4 [mac80211]
[43633.647009] [<c123430c>] dev_open+0x8b/0xc0
[43633.647009] [<c1233a5c>] dev_change_flags+0x9b/0x14c
[43633.647009] [<c123b01d>] do_setlink+0x2a2/0x348
[43633.647009] [<c123b1a8>] rtnl_setlink+0xe5/0xe9
[43633.647009] [<c123bf67>] rtnetlink_rcv_msg+0x18a/0x1a0
[43633.647009] [<c12442cc>] netlink_rcv_skb+0x35/0x7d
[43633.647009] [<c123bdd6>] rtnetlink_rcv+0x20/0x27
[43633.647009] [<c1243e4c>] netlink_unicast+0x1b1/0x212
[43633.647009] [<c12440d0>] netlink_sendmsg+0x223/0x230
[43633.647009] [<c1226655>] sock_sendmsg+0xcc/0xe2
[43633.647009] [<c12267b9>] sys_sendmsg+0x14e/0x19b
[43633.647009] [<c122770c>] sys_socketcall+0x147/0x170
[43633.647009] [<c1002988>] sysenter_do_call+0x12/0x36
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] INITIAL USE at:
[43633.647009] [<c104c943>] __lock_acquire+0x61e/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<fa255e06>] __ieee80211_key_todo+0x1cb/0x1ef [mac80211]
[43633.647009] [<fa255f29>] ieee80211_key_todo+0x19/0x25 [mac80211]
[43633.647009] [<fa255fb6>] ieee80211_todo_for_each_key+0x72/0x79 [mac80211]
[43633.647009] [<fa256054>] ieee80211_enable_keys+0x56/0x5b [mac80211]
[43633.647009] [<fa24d7f4>] ieee80211_open+0x47a/0x5f4 [mac80211]
[43633.647009] [<c123430c>] dev_open+0x8b/0xc0
[43633.647009] [<c1233a5c>] dev_change_flags+0x9b/0x14c
[43633.647009] [<c123b01d>] do_setlink+0x2a2/0x348
[43633.647009] [<c123b1a8>] rtnl_setlink+0xe5/0xe9
[43633.647009] [<c123bf67>] rtnetlink_rcv_msg+0x18a/0x1a0
[43633.647009] [<c12442cc>] netlink_rcv_skb+0x35/0x7d
[43633.647009] [<c123bdd6>] rtnetlink_rcv+0x20/0x27
[43633.647009] [<c1243e4c>] netlink_unicast+0x1b1/0x212
[43633.647009] [<c12440d0>] netlink_sendmsg+0x223/0x230
[43633.647009] [<c1226655>] sock_sendmsg+0xcc/0xe2
[43633.647009] [<c12267b9>] sys_sendmsg+0x14e/0x19b
[43633.647009] [<c122770c>] sys_socketcall+0x147/0x170
[43633.647009] [<c1002988>] sysenter_do_call+0x12/0x36
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] }
[43633.647009] ... key at: [<fa26a70c>] todo_lock+0x10/0xffff114b [mac80211]
[43633.647009] -> (&cwq->lock){-.-.-.} ops: 0 {
[43633.647009] IN-HARDIRQ-W at:
[43633.647009] [<c104c85e>] __lock_acquire+0x539/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c10394e5>] __queue_work+0x17/0x34
[43633.647009] [<c103957c>] queue_work_on+0x40/0x49
[43633.647009] [<c10396a2>] queue_work+0x26/0x4a
[43633.647009] [<c1175b27>] __acpi_os_execute+0xf1/0x119
[43633.647009] [<c1175b75>] acpi_os_execute+0xf/0x11
[43633.647009] [<c1179697>] acpi_ec_gpe_handler+0x6f/0xa3
[43633.647009] [<c1184640>] acpi_ev_gpe_dispatch+0x51/0x10f
[43633.647009] [<c118478a>] acpi_ev_gpe_detect+0x8c/0xce
[43633.647009] [<c1182ae9>] acpi_ev_sci_xrupt_handler+0x1a/0x20
[43633.647009] [<c1175373>] acpi_irq+0x13/0x2e
[43633.647009] [<c105fcef>] handle_IRQ_event+0x6a/0x12f
[43633.647009] [<c1061426>] handle_fasteoi_irq+0x7e/0xb5
[43633.647009] [<c100489d>] handle_irq+0x40/0x4b
[43633.647009] [<c100401c>] do_IRQ+0x49/0x9c
[43633.647009] [<c100302e>] common_interrupt+0x2e/0x34
[43633.647009] [<c1021bbc>] finish_task_switch+0x6c/0xe8
[43633.647009] [<c129580d>] schedule+0x7af/0x81f
[43633.647009] [<c1001c11>] cpu_idle+0x79/0x88
[43633.647009] [<c12880c4>] rest_init+0x6c/0x6e
[43633.647009] [<c1448753>] start_kernel+0x28b/0x290
[43633.647009] [<c1448038>] __init_begin+0x38/0x40
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] IN-SOFTIRQ-W at:
[43633.647009] [<c104c87d>] __lock_acquire+0x558/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c10394e5>] __queue_work+0x17/0x34
[43633.647009] [<c103957c>] queue_work_on+0x40/0x49
[43633.647009] [<c10396a2>] queue_work+0x26/0x4a
[43633.647009] [<c113dd5e>] kblockd_schedule_work+0x12/0x14
[43633.647009] [<c11496ac>] as_antic_timeout+0x58/0xa4
[43633.647009] [<c10325ca>] run_timer_softirq+0x17b/0x1f0
[43633.647009] [<c102e8d6>] __do_softirq+0xdb/0x1ac
[43633.647009] [<c102e9d7>] do_softirq+0x30/0x48
[43633.647009] [<c102eb53>] irq_exit+0x3d/0x74
[43633.647009] [<c10121a6>] smp_apic_timer_interrupt+0x73/0x81
[43633.647009] [<c100333b>] apic_timer_interrupt+0x2f/0x34
[43633.647009] [<c1001beb>] cpu_idle+0x53/0x88
[43633.647009] [<c12880c4>] rest_init+0x6c/0x6e
[43633.647009] [<c1448753>] start_kernel+0x28b/0x290
[43633.647009] [<c1448038>] __init_begin+0x38/0x40
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] IN-RECLAIM_FS-W at:
[43633.647009] [<c104c92d>] __lock_acquire+0x608/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c10394e5>] __queue_work+0x17/0x34
[43633.647009] [<c103957c>] queue_work_on+0x40/0x49
[43633.647009] [<c10396a2>] queue_work+0x26/0x4a
[43633.647009] [<c113dd5e>] kblockd_schedule_work+0x12/0x14
[43633.647009] [<c113e21f>] blk_unplug_timeout+0x57/0x5b
[43633.647009] [<c10325ca>] run_timer_softirq+0x17b/0x1f0
[43633.647009] [<c102e8d6>] __do_softirq+0xdb/0x1ac
[43633.647009] [<c102e9d7>] do_softirq+0x30/0x48
[43633.647009] [<c102eb53>] irq_exit+0x3d/0x74
[43633.647009] [<c10121a6>] smp_apic_timer_interrupt+0x73/0x81
[43633.647009] [<c100333b>] apic_timer_interrupt+0x2f/0x34
[43633.647009] [<c10adf79>] destroy_inode+0x32/0x35
[43633.647009] [<c10ae3fa>] generic_delete_inode+0xe4/0xe8
[43633.647009] [<c10ad740>] iput+0x50/0x53
[43633.647009] [<c10dbd0d>] sysfs_d_iput+0x28/0x2b
[43633.647009] [<c10ab44e>] dentry_iput+0x96/0xb8
[43633.647009] [<c10ab50d>] d_kill+0x21/0x3b
[43633.647009] [<c10ab6fa>] __shrink_dcache_sb+0x1d3/0x255
[43633.647009] [<c10ab855>] shrink_dcache_memory+0xd9/0x15e
[43633.647009] [<c108321b>] shrink_slab+0xda/0x15f
[43633.647009] [<c10836a1>] kswapd+0x401/0x587
[43633.647009] [<c103c78b>] kthread+0x70/0x75
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] INITIAL USE at:
[43633.647009] [<c104c943>] __lock_acquire+0x61e/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c10394e5>] __queue_work+0x17/0x34
[43633.647009] [<c103957c>] queue_work_on+0x40/0x49
[43633.647009] [<c10396a2>] queue_work+0x26/0x4a
[43633.647009] [<c1037fe7>] call_usermodehelper_exec+0x8f/0xe1
[43633.647009] [<c114f357>] kobject_uevent_env+0x333/0x368
[43633.647009] [<c114f396>] kobject_uevent+0xa/0xc
[43633.647009] [<c114eb0c>] kset_register+0x2e/0x34
[43633.647009] [<c11b74fe>] bus_register+0xe4/0x232
[43633.647009] [<c146315e>] platform_bus_init+0x23/0x38
[43633.647009] [<c14631f6>] driver_init+0x1c/0x28
[43633.647009] [<c144828c>] kernel_init+0xf2/0x16a
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] }
[43633.647009] ... key at: [<c16231b4>] __key.25893+0x0/0x8
[43633.647009] -> (key#3){-.-.-.} ops: 0 {
[43633.647009] IN-HARDIRQ-W at:
[43633.647009] [<c104c85e>] __lock_acquire+0x539/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c101d543>] __wake_up+0x1a/0x40
[43633.647009] [<c1038ccd>] insert_work+0x9a/0xa3
[43633.647009] [<c10394f4>] __queue_work+0x26/0x34
[43633.647009] [<c103957c>] queue_work_on+0x40/0x49
[43633.647009] [<c10396a2>] queue_work+0x26/0x4a
[43633.647009] [<c1175b27>] __acpi_os_execute+0xf1/0x119
[43633.647009] [<c1175b75>] acpi_os_execute+0xf/0x11
[43633.647009] [<c1179697>] acpi_ec_gpe_handler+0x6f/0xa3
[43633.647009] [<c1184640>] acpi_ev_gpe_dispatch+0x51/0x10f
[43633.647009] [<c118478a>] acpi_ev_gpe_detect+0x8c/0xce
[43633.647009] [<c1182ae9>] acpi_ev_sci_xrupt_handler+0x1a/0x20
[43633.647009] [<c1175373>] acpi_irq+0x13/0x2e
[43633.647009] [<c105fcef>] handle_IRQ_event+0x6a/0x12f
[43633.647009] [<c1061426>] handle_fasteoi_irq+0x7e/0xb5
[43633.647009] [<c100489d>] handle_irq+0x40/0x4b
[43633.647009] [<c100401c>] do_IRQ+0x49/0x9c
[43633.647009] [<c100302e>] common_interrupt+0x2e/0x34
[43633.647009] [<c1021bbc>] finish_task_switch+0x6c/0xe8
[43633.647009] [<c129580d>] schedule+0x7af/0x81f
[43633.647009] [<c1001c11>] cpu_idle+0x79/0x88
[43633.647009] [<c12880c4>] rest_init+0x6c/0x6e
[43633.647009] [<c1448753>] start_kernel+0x28b/0x290
[43633.647009] [<c1448038>] __init_begin+0x38/0x40
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] IN-SOFTIRQ-W at:
[43633.647009] [<c104c87d>] __lock_acquire+0x558/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c101d543>] __wake_up+0x1a/0x40
[43633.647009] [<c1038ccd>] insert_work+0x9a/0xa3
[43633.647009] [<c10394f4>] __queue_work+0x26/0x34
[43633.647009] [<c103957c>] queue_work_on+0x40/0x49
[43633.647009] [<c10396a2>] queue_work+0x26/0x4a
[43633.647009] [<c113dd5e>] kblockd_schedule_work+0x12/0x14
[43633.647009] [<c11496ac>] as_antic_timeout+0x58/0xa4
[43633.647009] [<c10325ca>] run_timer_softirq+0x17b/0x1f0
[43633.647009] [<c102e8d6>] __do_softirq+0xdb/0x1ac
[43633.647009] [<c102e9d7>] do_softirq+0x30/0x48
[43633.647009] [<c102eb53>] irq_exit+0x3d/0x74
[43633.647009] [<c10121a6>] smp_apic_timer_interrupt+0x73/0x81
[43633.647009] [<c100333b>] apic_timer_interrupt+0x2f/0x34
[43633.647009] [<c1001beb>] cpu_idle+0x53/0x88
[43633.647009] [<c12880c4>] rest_init+0x6c/0x6e
[43633.647009] [<c1448753>] start_kernel+0x28b/0x290
[43633.647009] [<c1448038>] __init_begin+0x38/0x40
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] IN-RECLAIM_FS-W at:
[43633.647009] [<c104c92d>] __lock_acquire+0x608/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c101d543>] __wake_up+0x1a/0x40
[43633.647009] [<c1038ccd>] insert_work+0x9a/0xa3
[43633.647009] [<c10394f4>] __queue_work+0x26/0x34
[43633.647009] [<c103957c>] queue_work_on+0x40/0x49
[43633.647009] [<c10396a2>] queue_work+0x26/0x4a
[43633.647009] [<c113dd5e>] kblockd_schedule_work+0x12/0x14
[43633.647009] [<c113e21f>] blk_unplug_timeout+0x57/0x5b
[43633.647009] [<c10325ca>] run_timer_softirq+0x17b/0x1f0
[43633.647009] [<c102e8d6>] __do_softirq+0xdb/0x1ac
[43633.647009] [<c102e9d7>] do_softirq+0x30/0x48
[43633.647009] [<c102eb53>] irq_exit+0x3d/0x74
[43633.647009] [<c10121a6>] smp_apic_timer_interrupt+0x73/0x81
[43633.647009] [<c100333b>] apic_timer_interrupt+0x2f/0x34
[43633.647009] [<c10adf79>] destroy_inode+0x32/0x35
[43633.647009] [<c10ae3fa>] generic_delete_inode+0xe4/0xe8
[43633.647009] [<c10ad740>] iput+0x50/0x53
[43633.647009] [<c10dbd0d>] sysfs_d_iput+0x28/0x2b
[43633.647009] [<c10ab44e>] dentry_iput+0x96/0xb8
[43633.647009] [<c10ab50d>] d_kill+0x21/0x3b
[43633.647009] [<c10ab6fa>] __shrink_dcache_sb+0x1d3/0x255
[43633.647009] [<c10ab855>] shrink_dcache_memory+0xd9/0x15e
[43633.647009] [<c108321b>] shrink_slab+0xda/0x15f
[43633.647009] [<c10836a1>] kswapd+0x401/0x587
[43633.647009] [<c103c78b>] kthread+0x70/0x75
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] INITIAL USE at:
[43633.647009] [<c104c943>] __lock_acquire+0x61e/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c103cc23>] prepare_to_wait+0x1c/0x4c
[43633.647009] [<c1038962>] worker_thread+0x78/0x287
[43633.647009] [<c103c78b>] kthread+0x70/0x75
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] }
[43633.647009] ... key at: [<c16231ac>] __key.25894+0x0/0x8
[43633.647009] -> (&rq->lock){-.-.-.} ops: 0 {
[43633.647009] IN-HARDIRQ-W at:
[43633.647009] [<c104c85e>] __lock_acquire+0x539/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c1026192>] scheduler_tick+0x36/0x1dc
[43633.647009] [<c1032ca6>] update_process_times+0x47/0x53
[43633.647009] [<c1046e81>] tick_periodic+0x6c/0x79
[43633.647009] [<c1046eab>] tick_handle_periodic+0x1d/0x76
[43633.647009] [<c1004c76>] timer_interrupt+0x3e/0x45
[43633.647009] [<c105fcef>] handle_IRQ_event+0x6a/0x12f
[43633.647009] [<c10614e4>] handle_level_irq+0x87/0xcd
[43633.647009] [<c100489d>] handle_irq+0x40/0x4b
[43633.647009] [<c100401c>] do_IRQ+0x49/0x9c
[43633.647009] [<c100302e>] common_interrupt+0x2e/0x34
[43633.647009] [<c114dc68>] get_from_free_list+0x32/0x39
[43633.647009] [<c114dda8>] idr_get_empty_slot+0x26/0x1e7
[43633.647009] [<c114df99>] ida_get_new_above+0x30/0x166
[43633.647009] [<c10b18f0>] alloc_vfsmnt+0x57/0x11d
[43633.647009] [<c109f585>] vfs_kern_mount+0x2b/0x7b
[43633.647009] [<c109f5ea>] kern_mount_data+0x15/0x17
[43633.647009] [<c145d44f>] sysfs_init+0x50/0xa0
[43633.647009] [<c145c95b>] mnt_init+0x87/0x147
[43633.647009] [<c145c634>] vfs_caches_init+0xd9/0xeb
[43633.647009] [<c144872b>] start_kernel+0x263/0x290
[43633.647009] [<c1448038>] __init_begin+0x38/0x40
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] IN-SOFTIRQ-W at:
[43633.647009] [<c104c87d>] __lock_acquire+0x558/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c101d62c>] task_rq_lock+0x3b/0x65
[43633.647009] [<c10228b1>] try_to_wake_up+0x31/0x20b
[43633.647009] [<c1022ac2>] wake_up_process+0x14/0x16
[43633.647009] [<c1032b63>] process_timeout+0xd/0xf
[43633.647009] [<c10325ca>] run_timer_softirq+0x17b/0x1f0
[43633.647009] [<c102e8d6>] __do_softirq+0xdb/0x1ac
[43633.647009] [<c102e9d7>] do_softirq+0x30/0x48
[43633.647009] [<c102eb53>] irq_exit+0x3d/0x74
[43633.647009] [<c10121a6>] smp_apic_timer_interrupt+0x73/0x81
[43633.647009] [<c100333b>] apic_timer_interrupt+0x2f/0x34
[43633.647009] [<c1001beb>] cpu_idle+0x53/0x88
[43633.647009] [<c12880c4>] rest_init+0x6c/0x6e
[43633.647009] [<c1448753>] start_kernel+0x28b/0x290
[43633.647009] [<c1448038>] __init_begin+0x38/0x40
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] IN-RECLAIM_FS-W at:
[43633.647009] [<c104c92d>] __lock_acquire+0x608/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c101d62c>] task_rq_lock+0x3b/0x65
[43633.647009] [<c1025e97>] set_cpus_allowed_ptr+0x1a/0xdc
[43633.647009] [<c10832fe>] kswapd+0x5e/0x587
[43633.647009] [<c103c78b>] kthread+0x70/0x75
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] INITIAL USE at:
[43633.647009] [<c104c943>] __lock_acquire+0x61e/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c1020b4d>] rq_attach_root+0x17/0xa9
[43633.647009] [<c1456efd>] sched_init+0x290/0x3a1
[43633.647009] [<c1448625>] start_kernel+0x15d/0x290
[43633.647009] [<c1448038>] __init_begin+0x38/0x40
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] }
[43633.647009] ... key at: [<c15e035c>] __key.51718+0x0/0x8
[43633.647009] -> (&vec->lock){..-...} ops: 0 {
[43633.647009] IN-SOFTIRQ-W at:
[43633.647009] [<c104c87d>] __lock_acquire+0x558/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c1078184>] cpupri_set+0x66/0xf0
[43633.647009] [<c1027584>] enqueue_task_rt+0xd3/0x232
[43633.647009] [<c101ad56>] enqueue_task+0x2f/0x3b
[43633.647009] [<c101ae2c>] activate_task+0x24/0x2a
[43633.647009] [<c102294b>] try_to_wake_up+0xcb/0x20b
[43633.647009] [<c1022ac2>] wake_up_process+0x14/0x16
[43633.647009] [<c1025cf7>] rebalance_domains+0x2d7/0x3b6
[43633.647009] [<c1025e0a>] run_rebalance_domains+0x34/0xa7
[43633.647009] [<c102e8d6>] __do_softirq+0xdb/0x1ac
[43633.647009] [<c102e9d7>] do_softirq+0x30/0x48
[43633.647009] [<c102eb53>] irq_exit+0x3d/0x74
[43633.647009] [<c10121a6>] smp_apic_timer_interrupt+0x73/0x81
[43633.647009] [<c100333b>] apic_timer_interrupt+0x2f/0x34
[43633.647009] [<c1214ab7>] cpuidle_idle_call+0x6a/0xa3
[43633.647009] [<c1001beb>] cpu_idle+0x53/0x88
[43633.647009] [<c12927c1>] start_secondary+0x1ad/0x1b4
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] INITIAL USE at:
[43633.647009] [<c104c943>] __lock_acquire+0x61e/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c10781c7>] cpupri_set+0xa9/0xf0
[43633.647009] [<c101f880>] rq_online_rt+0x5e/0x61
[43633.647009] [<c101cdc8>] set_rq_online+0x40/0x4a
[43633.647009] [<c1020bbc>] rq_attach_root+0x86/0xa9
[43633.647009] [<c1456efd>] sched_init+0x290/0x3a1
[43633.647009] [<c1448625>] start_kernel+0x15d/0x290
[43633.647009] [<c1448038>] __init_begin+0x38/0x40
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] }
[43633.647009] ... key at: [<c1b5e218>] __key.14809+0x0/0x28
[43633.647009] ... acquired at:
[43633.647009] [<c104d315>] __lock_acquire+0xff0/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c10781c7>] cpupri_set+0xa9/0xf0
[43633.647009] [<c101f880>] rq_online_rt+0x5e/0x61
[43633.647009] [<c101cdc8>] set_rq_online+0x40/0x4a
[43633.647009] [<c1020bbc>] rq_attach_root+0x86/0xa9
[43633.647009] [<c1456efd>] sched_init+0x290/0x3a1
[43633.647009] [<c1448625>] start_kernel+0x15d/0x290
[43633.647009] [<c1448038>] __init_begin+0x38/0x40
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009]
[43633.647009] -> (&rt_b->rt_runtime_lock){..-...} ops: 0 {
[43633.647009] IN-SOFTIRQ-W at:
[43633.647009] [<c104c87d>] __lock_acquire+0x558/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c1027611>] enqueue_task_rt+0x160/0x232
[43633.647009] [<c101ad56>] enqueue_task+0x2f/0x3b
[43633.647009] [<c101ae2c>] activate_task+0x24/0x2a
[43633.647009] [<c102294b>] try_to_wake_up+0xcb/0x20b
[43633.647009] [<c1022ac2>] wake_up_process+0x14/0x16
[43633.647009] [<c1025cf7>] rebalance_domains+0x2d7/0x3b6
[43633.647009] [<c1025e0a>] run_rebalance_domains+0x34/0xa7
[43633.647009] [<c102e8d6>] __do_softirq+0xdb/0x1ac
[43633.647009] [<c102e9d7>] do_softirq+0x30/0x48
[43633.647009] [<c102eb53>] irq_exit+0x3d/0x74
[43633.647009] [<c10121a6>] smp_apic_timer_interrupt+0x73/0x81
[43633.647009] [<c100333b>] apic_timer_interrupt+0x2f/0x34
[43633.647009] [<c1214ab7>] cpuidle_idle_call+0x6a/0xa3
[43633.647009] [<c1001beb>] cpu_idle+0x53/0x88
[43633.647009] [<c12927c1>] start_secondary+0x1ad/0x1b4
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] INITIAL USE at:
[43633.647009] [<c104c943>] __lock_acquire+0x61e/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c1027611>] enqueue_task_rt+0x160/0x232
[43633.647009] [<c101ad56>] enqueue_task+0x2f/0x3b
[43633.647009] [<c101ae2c>] activate_task+0x24/0x2a
[43633.647009] [<c102294b>] try_to_wake_up+0xcb/0x20b
[43633.647009] [<c1022ac2>] wake_up_process+0x14/0x16
[43633.647009] [<c1293248>] migration_call+0xbc/0x470
[43633.647009] [<c1457218>] migration_init+0x3b/0x4b
[43633.647009] [<c1001141>] do_one_initcall+0x4f/0x116
[43633.647009] [<c14481e7>] kernel_init+0x4d/0x16a
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] }
[43633.647009] ... key at: [<c15e0364>] __key.41387+0x0/0x8
[43633.647009] -> (&cpu_base->lock){-.-.-.} ops: 0 {
[43633.647009] IN-HARDIRQ-W at:
[43633.647009] [<c104c85e>] __lock_acquire+0x539/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c103f3a0>] hrtimer_run_queues+0xde/0x11c
[43633.647009] [<c1032c4e>] run_local_timers+0xd/0x1e
[43633.647009] [<c1032c88>] update_process_times+0x29/0x53
[43633.647009] [<c1046e81>] tick_periodic+0x6c/0x79
[43633.647009] [<c1046eab>] tick_handle_periodic+0x1d/0x76
[43633.647009] [<c10121a1>] smp_apic_timer_interrupt+0x6e/0x81
[43633.647009] [<c100333b>] apic_timer_interrupt+0x2f/0x34
[43633.647009] [<c10991d4>] cache_alloc_debugcheck_after+0x5d/0x194
[43633.647009] [<c109aa5f>] kmem_cache_alloc+0xd4/0x16e
[43633.647009] [<c109a3f6>] cache_alloc_refill+0x371/0x5c3
[43633.647009] [<c109a8d2>] __kmalloc+0xea/0x1a3
[43633.647009] [<c109adc3>] alloc_arraycache+0x1e/0x50
[43633.647009] [<c129484a>] cpuup_callback+0x14d/0x261
[43633.647009] [<c1299ed1>] notifier_call_chain+0x51/0x7e
[43633.647009] [<c104082e>] __raw_notifier_call_chain+0x13/0x15
[43633.647009] [<c12936d4>] _cpu_up+0x62/0x105
[43633.647009] [<c12937c3>] cpu_up+0x4c/0x5c
[43633.647009] [<c1448233>] kernel_init+0x99/0x16a
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] IN-SOFTIRQ-W at:
[43633.647009] [<c104c87d>] __lock_acquire+0x558/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c103f695>] lock_hrtimer_base+0x1d/0x38
[43633.647009] [<c103f7b8>] __hrtimer_start_range_ns+0x34/0x326
[43633.647009] [<c103fade>] hrtimer_start_range_ns+0x18/0x1d
[43633.647009] [<c1047f3e>] tick_setup_sched_timer+0x10b/0x133
[43633.647009] [<c103f536>] hrtimer_run_pending+0xb7/0xed
[43633.647009] [<c1032476>] run_timer_softirq+0x27/0x1f0
[43633.647009] [<c102e8d6>] __do_softirq+0xdb/0x1ac
[43633.647009] [<c102e9d7>] do_softirq+0x30/0x48
[43633.647009] [<c102eb53>] irq_exit+0x3d/0x74
[43633.647009] [<c10121a6>] smp_apic_timer_interrupt+0x73/0x81
[43633.647009] [<c100333b>] apic_timer_interrupt+0x2f/0x34
[43633.647009] [<c1001beb>] cpu_idle+0x53/0x88
[43633.647009] [<c12927c1>] start_secondary+0x1ad/0x1b4
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] IN-RECLAIM_FS-W at:
[43633.647009] [<c104c92d>] __lock_acquire+0x608/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c103fdf4>] hrtimer_interrupt+0xad/0x16c
[43633.647009] [<c10121a1>] smp_apic_timer_interrupt+0x6e/0x81
[43633.647009] [<c100333b>] apic_timer_interrupt+0x2f/0x34
[43633.647009] [<c103c78b>] kthread+0x70/0x75
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] INITIAL USE at:
[43633.647009] [<c104c943>] __lock_acquire+0x61e/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c103f695>] lock_hrtimer_base+0x1d/0x38
[43633.647009] [<c103f7b8>] __hrtimer_start_range_ns+0x34/0x326
[43633.647009] [<c1027662>] enqueue_task_rt+0x1b1/0x232
[43633.647009] [<c101ad56>] enqueue_task+0x2f/0x3b
[43633.647009] [<c101ae2c>] activate_task+0x24/0x2a
[43633.647009] [<c102294b>] try_to_wake_up+0xcb/0x20b
[43633.647009] [<c1022ac2>] wake_up_process+0x14/0x16
[43633.647009] [<c1293248>] migration_call+0xbc/0x470
[43633.647009] [<c1457218>] migration_init+0x3b/0x4b
[43633.647009] [<c1001141>] do_one_initcall+0x4f/0x116
[43633.647009] [<c14481e7>] kernel_init+0x4d/0x16a
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] }
[43633.647009] ... key at: [<c1623538>] __key.20989+0x0/0x8
[43633.647009] -> (&cpu_base->lock/1){......} ops: 0 {
[43633.647009] INITIAL USE at:
[43633.647009] [<c104c943>] __lock_acquire+0x61e/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c12979f0>] _spin_lock_nested+0x34/0x64
[43633.647009] [<c1293ed9>] hrtimer_cpu_notify+0xf5/0x17d
[43633.647009] [<c1299ed1>] notifier_call_chain+0x51/0x7e
[43633.647009] [<c1040841>] raw_notifier_call_chain+0x11/0x13
[43633.647009] [<c128883f>] _cpu_down+0x16f/0x23a
[43633.647009] [<c102ad11>] disable_nonboot_cpus+0x5d/0xf4
[43633.647009] [<c1057a92>] suspend_devices_and_enter+0xbe/0x178
[43633.647009] [<c1057c19>] enter_state+0xcd/0x119
[43633.647009] [<c10573d5>] state_store+0x98/0xac
[43633.647009] [<c114e6b5>] kobj_attr_store+0x16/0x22
[43633.647009] [<c10daed5>] sysfs_write_file+0xcd/0xf8
[43633.647009] [<c109e7af>] vfs_write+0x8f/0x117
[43633.647009] [<c109e8f3>] sys_write+0x48/0x75
[43633.647009] [<c1002988>] sysenter_do_call+0x12/0x36
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] }
[43633.647009] ... key at: [<c1623539>] __key.20989+0x1/0x8
[43633.647009] ... acquired at:
[43633.647009] [<c104d315>] __lock_acquire+0xff0/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c12979f0>] _spin_lock_nested+0x34/0x64
[43633.647009] [<c1293ed9>] hrtimer_cpu_notify+0xf5/0x17d
[43633.647009] [<c1299ed1>] notifier_call_chain+0x51/0x7e
[43633.647009] [<c1040841>] raw_notifier_call_chain+0x11/0x13
[43633.647009] [<c128883f>] _cpu_down+0x16f/0x23a
[43633.647009] [<c102ad11>] disable_nonboot_cpus+0x5d/0xf4
[43633.647009] [<c1057a92>] suspend_devices_and_enter+0xbe/0x178
[43633.647009] [<c1057c19>] enter_state+0xcd/0x119
[43633.647009] [<c10573d5>] state_store+0x98/0xac
[43633.647009] [<c114e6b5>] kobj_attr_store+0x16/0x22
[43633.647009] [<c10daed5>] sysfs_write_file+0xcd/0xf8
[43633.647009] [<c109e7af>] vfs_write+0x8f/0x117
[43633.647009] [<c109e8f3>] sys_write+0x48/0x75
[43633.647009] [<c1002988>] sysenter_do_call+0x12/0x36
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009]
[43633.647009] ... acquired at:
[43633.647009] [<c104d315>] __lock_acquire+0xff0/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c103f695>] lock_hrtimer_base+0x1d/0x38
[43633.647009] [<c103f7b8>] __hrtimer_start_range_ns+0x34/0x326
[43633.647009] [<c1027662>] enqueue_task_rt+0x1b1/0x232
[43633.647009] [<c101ad56>] enqueue_task+0x2f/0x3b
[43633.647009] [<c101ae2c>] activate_task+0x24/0x2a
[43633.647009] [<c102294b>] try_to_wake_up+0xcb/0x20b
[43633.647009] [<c1022ac2>] wake_up_process+0x14/0x16
[43633.647009] [<c1293248>] migration_call+0xbc/0x470
[43633.647009] [<c1457218>] migration_init+0x3b/0x4b
[43633.647009] [<c1001141>] do_one_initcall+0x4f/0x116
[43633.647009] [<c14481e7>] kernel_init+0x4d/0x16a
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009]
[43633.647009] -> (&rt_rq->rt_runtime_lock){-.-...} ops: 0 {
[43633.647009] IN-HARDIRQ-W at:
[43633.647009] [<c104c85e>] __lock_acquire+0x539/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c101f3eb>] update_curr_rt+0x123/0x1b0
[43633.647009] [<c101f48c>] task_tick_rt+0x14/0xb1
[43633.647009] [<c1026234>] scheduler_tick+0xd8/0x1dc
[43633.647009] [<c1032ca6>] update_process_times+0x47/0x53
[43633.647009] [<c1047d9b>] tick_sched_timer+0x71/0x9f
[43633.647009] [<c103f290>] __run_hrtimer+0x6b/0x9d
[43633.647009] [<c103fe59>] hrtimer_interrupt+0x112/0x16c
[43633.647009] [<c10121a1>] smp_apic_timer_interrupt+0x6e/0x81
[43633.647009] [<c100333b>] apic_timer_interrupt+0x2f/0x34
[43633.647009] [<c1038a94>] worker_thread+0x1aa/0x287
[43633.647009] [<c103c78b>] kthread+0x70/0x75
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] IN-SOFTIRQ-W at:
[43633.647009] [<c104c87d>] __lock_acquire+0x558/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c101fc8f>] sched_rt_period_timer+0xbc/0x201
[43633.647009] [<c103f290>] __run_hrtimer+0x6b/0x9d
[43633.647009] [<c103fe59>] hrtimer_interrupt+0x112/0x16c
[43633.647009] [<c1047138>] tick_do_broadcast+0x32/0x5b
[43633.647009] [<c1047210>] tick_handle_oneshot_broadcast+0xaf/0xe7
[43633.647009] [<c1004c76>] timer_interrupt+0x3e/0x45
[43633.647009] [<c105fcef>] handle_IRQ_event+0x6a/0x12f
[43633.647009] [<c1061365>] handle_edge_irq+0xcf/0x112
[43633.647009] [<c100489d>] handle_irq+0x40/0x4b
[43633.647009] [<c100401c>] do_IRQ+0x49/0x9c
[43633.647009] [<c100302e>] common_interrupt+0x2e/0x34
[43633.647009] [<c102e9d7>] do_softirq+0x30/0x48
[43633.647009] [<c102eb53>] irq_exit+0x3d/0x74
[43633.647009] [<c100405b>] do_IRQ+0x88/0x9c
[43633.647009] [<c100302e>] common_interrupt+0x2e/0x34
[43633.647009] [<c1214ab7>] cpuidle_idle_call+0x6a/0xa3
[43633.647009] [<c1001beb>] cpu_idle+0x53/0x88
[43633.647009] [<c12880c4>] rest_init+0x6c/0x6e
[43633.647009] [<c1448753>] start_kernel+0x28b/0x290
[43633.647009] [<c1448038>] __init_begin+0x38/0x40
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] INITIAL USE at:
[43633.647009] [<c104c943>] __lock_acquire+0x61e/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c101f3eb>] update_curr_rt+0x123/0x1b0
[43633.647009] [<c101fa28>] dequeue_task_rt+0x22/0x62
[43633.647009] [<c101adfa>] dequeue_task+0x98/0xa6
[43633.647009] [<c101ae56>] deactivate_task+0x24/0x2a
[43633.647009] [<c129519c>] schedule+0x13e/0x81f
[43633.647009] [<c10259bb>] migration_thread+0x179/0x1de
[43633.647009] [<c103c78b>] kthread+0x70/0x75
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] }
[43633.647009] ... key at: [<c15e036c>] __key.51698+0x0/0x8
[43633.647009] ... acquired at:
[43633.647009] [<c104d315>] __lock_acquire+0xff0/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c101dc40>] __enable_runtime+0x34/0x7f
[43633.647009] [<c101f866>] rq_online_rt+0x44/0x61
[43633.647009] [<c101cdc8>] set_rq_online+0x40/0x4a
[43633.647009] [<c129327c>] migration_call+0xf0/0x470
[43633.647009] [<c1299ed1>] notifier_call_chain+0x51/0x7e
[43633.647009] [<c1040841>] raw_notifier_call_chain+0x11/0x13
[43633.647009] [<c1293738>] _cpu_up+0xc6/0x105
[43633.647009] [<c12937c3>] cpu_up+0x4c/0x5c
[43633.647009] [<c1448233>] kernel_init+0x99/0x16a
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009]
[43633.647009] ... acquired at:
[43633.647009] [<c104d315>] __lock_acquire+0xff0/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c1027611>] enqueue_task_rt+0x160/0x232
[43633.647009] [<c101ad56>] enqueue_task+0x2f/0x3b
[43633.647009] [<c101ae2c>] activate_task+0x24/0x2a
[43633.647009] [<c102294b>] try_to_wake_up+0xcb/0x20b
[43633.647009] [<c1022ac2>] wake_up_process+0x14/0x16
[43633.647009] [<c1293248>] migration_call+0xbc/0x470
[43633.647009] [<c1457218>] migration_init+0x3b/0x4b
[43633.647009] [<c1001141>] do_one_initcall+0x4f/0x116
[43633.647009] [<c14481e7>] kernel_init+0x4d/0x16a
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009]
[43633.647009] ... acquired at:
[43633.647009] [<c104d315>] __lock_acquire+0xff0/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c101f3eb>] update_curr_rt+0x123/0x1b0
[43633.647009] [<c101fa28>] dequeue_task_rt+0x22/0x62
[43633.647009] [<c101adfa>] dequeue_task+0x98/0xa6
[43633.647009] [<c101ae56>] deactivate_task+0x24/0x2a
[43633.647009] [<c129519c>] schedule+0x13e/0x81f
[43633.647009] [<c10259bb>] migration_thread+0x179/0x1de
[43633.647009] [<c103c78b>] kthread+0x70/0x75
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009]
[43633.647009] -> (&rq->lock/1){..-...} ops: 0 {
[43633.647009] IN-SOFTIRQ-W at:
[43633.647009] [<c104c87d>] __lock_acquire+0x558/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c12979f0>] _spin_lock_nested+0x34/0x64
[43633.647009] [<c102232a>] double_rq_lock+0x4c/0x7f
[43633.647009] [<c1025ba9>] rebalance_domains+0x189/0x3b6
[43633.647009] [<c1025e0a>] run_rebalance_domains+0x34/0xa7
[43633.647009] [<c102e8d6>] __do_softirq+0xdb/0x1ac
[43633.647009] [<c102e9d7>] do_softirq+0x30/0x48
[43633.647009] [<c102eb53>] irq_exit+0x3d/0x74
[43633.647009] [<c10121a6>] smp_apic_timer_interrupt+0x73/0x81
[43633.647009] [<c100333b>] apic_timer_interrupt+0x2f/0x34
[43633.647009] [<c1001beb>] cpu_idle+0x53/0x88
[43633.647009] [<c12927c1>] start_secondary+0x1ad/0x1b4
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] INITIAL USE at:
[43633.647009] [<c104c943>] __lock_acquire+0x61e/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c12979f0>] _spin_lock_nested+0x34/0x64
[43633.647009] [<c102232a>] double_rq_lock+0x4c/0x7f
[43633.647009] [<c1024c11>] __migrate_task+0x4d/0xc1
[43633.647009] [<c10259ef>] migration_thread+0x1ad/0x1de
[43633.647009] [<c103c78b>] kthread+0x70/0x75
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] }
[43633.647009] ... key at: [<c15e035d>] __key.51718+0x1/0x8
[43633.647009] -> (&sig->cputimer.lock){-.-...} ops: 0 {
[43633.647009] IN-HARDIRQ-W at:
[43633.647009] [<c104c85e>] __lock_acquire+0x539/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c101debd>] account_system_time+0x105/0x157
[43633.647009] [<c101df78>] account_process_tick+0x69/0x7e
[43633.647009] [<c1032c83>] update_process_times+0x24/0x53
[43633.647009] [<c1047d9b>] tick_sched_timer+0x71/0x9f
[43633.647009] [<c103f290>] __run_hrtimer+0x6b/0x9d
[43633.647009] [<c103fe59>] hrtimer_interrupt+0x112/0x16c
[43633.647009] [<c10121a1>] smp_apic_timer_interrupt+0x6e/0x81
[43633.647009] [<c100333b>] apic_timer_interrupt+0x2f/0x34
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c10ac78c>] __d_lookup+0x96/0x140
[43633.647009] [<c10a50c6>] do_lookup+0x23/0x158
[43633.647009] [<c10a6584>] __link_path_walk+0x30d/0xae6
[43633.647009] [<c10a6eb2>] path_walk+0x3e/0x77
[43633.647009] [<c10a6f78>] do_path_lookup+0x26/0x47
[43633.647009] [<c10a79fe>] do_filp_open+0xcc/0x6e1
[43633.647009] [<c109c965>] do_sys_open+0x4d/0xe9
[43633.647009] [<c109ca4d>] sys_open+0x23/0x2b
[43633.647009] [<c1002988>] sysenter_do_call+0x12/0x36
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] IN-SOFTIRQ-W at:
[43633.647009] [<c104c87d>] __lock_acquire+0x558/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c101d7df>] update_curr+0x128/0x149
[43633.647009] [<c101ed63>] enqueue_task_fair+0x40/0xdc
[43633.647009] [<c101ad56>] enqueue_task+0x2f/0x3b
[43633.647009] [<c101ae2c>] activate_task+0x24/0x2a
[43633.647009] [<c102294b>] try_to_wake_up+0xcb/0x20b
[43633.647009] [<c1022a9b>] default_wake_function+0x10/0x12
[43633.647009] [<c103ca74>] autoremove_wake_function+0x14/0x34
[43633.647009] [<c103cac3>] wake_bit_function+0x2f/0x3c
[43633.647009] [<c101b00a>] __wake_up_common+0x39/0x61
[43633.647009] [<c101d557>] __wake_up+0x2e/0x40
[43633.647009] [<c103c9fd>] __wake_up_bit+0x2c/0x2f
[43633.647009] [<c107921f>] end_page_writeback+0x65/0x68
[43633.647009] [<c10ba9e5>] end_buffer_async_write+0x139/0x189
[43633.647009] [<c10b9449>] end_bio_bh_io_sync+0x33/0x3d
[43633.647009] [<c10bc824>] bio_endio+0x28/0x2a
[43633.647009] [<c113e468>] req_bio_endio+0x89/0xa6
[43633.647009] [<c113e66b>] blk_update_request+0x1e6/0x379
[43633.647009] [<c113e811>] blk_update_bidi_request+0x13/0x41
[43633.647009] [<c1140320>] blk_end_bidi_request+0x1d/0x55
[43633.647009] [<c1140396>] blk_end_request+0xf/0x11
[43633.647009] [<c11cb225>] scsi_io_completion+0x196/0x3c4
[43633.647009] [<c11c5785>] scsi_finish_command+0xd3/0xdb
[43633.647009] [<c11cb554>] scsi_softirq_done+0xed/0xf5
[43633.647009] [<c1145c63>] blk_done_softirq+0x63/0x70
[43633.647009] [<c102e8d6>] __do_softirq+0xdb/0x1ac
[43633.647009] [<c102e9d7>] do_softirq+0x30/0x48
[43633.647009] [<c102eb53>] irq_exit+0x3d/0x74
[43633.647009] [<c100405b>] do_IRQ+0x88/0x9c
[43633.647009] [<c100302e>] common_interrupt+0x2e/0x34
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<f8043d41>] unix_stream_recvmsg+0xf7/0x416 [unix]
[43633.647009] [<c12259bd>] sock_aio_read+0xd7/0xe1
[43633.647009] [<c109df9b>] do_sync_read+0xb0/0xeb
[43633.647009] [<c109e9bd>] vfs_read+0x9d/0x115
[43633.647009] [<c109eaf1>] sys_read+0x48/0x75
[43633.647009] [<c1002988>] sysenter_do_call+0x12/0x36
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] INITIAL USE at:
[43633.647009] [<c104c943>] __lock_acquire+0x61e/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c103d893>] thread_group_cputimer+0x26/0xae
[43633.647009] [<c103d93e>] cpu_timer_sample_group+0x23/0x66
[43633.647009] [<c103d9af>] set_process_cpu_timer+0x2e/0xb4
[43633.647009] [<c103da8f>] update_rlimit_cpu+0x5a/0x73
[43633.647009] [<c1036739>] sys_setrlimit+0xdf/0xf6
[43633.647009] [<c1002988>] sysenter_do_call+0x12/0x36
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009] }
[43633.647009] ... key at: [<c15e1668>] __key.21973+0x0/0x8
[43633.647009] ... acquired at:
[43633.647009] [<c104d315>] __lock_acquire+0xff0/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c101d7df>] update_curr+0x128/0x149
[43633.647009] [<c101ed63>] enqueue_task_fair+0x40/0xdc
[43633.647009] [<c101ad56>] enqueue_task+0x2f/0x3b
[43633.647009] [<c101ae2c>] activate_task+0x24/0x2a
[43633.647009] [<c1024c55>] __migrate_task+0x91/0xc1
[43633.647009] [<c10259ef>] migration_thread+0x1ad/0x1de
[43633.647009] [<c103c78b>] kthread+0x70/0x75
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009]
[43633.647009] ... acquired at:
[43633.647009] [<c104d315>] __lock_acquire+0xff0/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c12979f0>] _spin_lock_nested+0x34/0x64
[43633.647009] [<c102232a>] double_rq_lock+0x4c/0x7f
[43633.647009] [<c1024c11>] __migrate_task+0x4d/0xc1
[43633.647009] [<c10259ef>] migration_thread+0x1ad/0x1de
[43633.647009] [<c103c78b>] kthread+0x70/0x75
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009]
[43633.647009] ... acquired at:
[43633.647009] [<c104d315>] __lock_acquire+0xff0/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c101d7df>] update_curr+0x128/0x149
[43633.647009] [<c101e7b5>] dequeue_task_fair+0x40/0x188
[43633.647009] [<c101adfa>] dequeue_task+0x98/0xa6
[43633.647009] [<c101ae56>] deactivate_task+0x24/0x2a
[43633.647009] [<c129519c>] schedule+0x13e/0x81f
[43633.647009] [<c12958a0>] io_schedule+0x23/0x2d
[43633.647009] [<c1079186>] sync_page+0x47/0x4b
[43633.647009] [<c1079197>] sync_page_killable+0xd/0x30
[43633.647009] [<c1295bf3>] __wait_on_bit_lock+0x39/0x75
[43633.647009] [<c10790ae>] __lock_page_killable+0x74/0x7b
[43633.647009] [<c107adb5>] generic_file_aio_read+0x383/0x532
[43633.647009] [<c109df9b>] do_sync_read+0xb0/0xeb
[43633.647009] [<c109e9ad>] vfs_read+0x8d/0x115
[43633.647009] [<c109eaf1>] sys_read+0x48/0x75
[43633.647009] [<c1002988>] sysenter_do_call+0x12/0x36
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009]
[43633.647009] ... acquired at:
[43633.647009] [<c104d315>] __lock_acquire+0xff0/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297a4d>] _spin_lock+0x2d/0x5d
[43633.647009] [<c101d62c>] task_rq_lock+0x3b/0x65
[43633.647009] [<c10228b1>] try_to_wake_up+0x31/0x20b
[43633.647009] [<c1022a9b>] default_wake_function+0x10/0x12
[43633.647009] [<c103ca74>] autoremove_wake_function+0x14/0x34
[43633.647009] [<c101b00a>] __wake_up_common+0x39/0x61
[43633.647009] [<c101d557>] __wake_up+0x2e/0x40
[43633.647009] [<c1038ccd>] insert_work+0x9a/0xa3
[43633.647009] [<c10394f4>] __queue_work+0x26/0x34
[43633.647009] [<c103957c>] queue_work_on+0x40/0x49
[43633.647009] [<c10396a2>] queue_work+0x26/0x4a
[43633.647009] [<c1037fe7>] call_usermodehelper_exec+0x8f/0xe1
[43633.647009] [<c114f357>] kobject_uevent_env+0x333/0x368
[43633.647009] [<c114f396>] kobject_uevent+0xa/0xc
[43633.647009] [<c114eb0c>] kset_register+0x2e/0x34
[43633.647009] [<c11b74fe>] bus_register+0xe4/0x232
[43633.647009] [<c146315e>] platform_bus_init+0x23/0x38
[43633.647009] [<c14631f6>] driver_init+0x1c/0x28
[43633.647009] [<c144828c>] kernel_init+0xf2/0x16a
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009]
[43633.647009] ... acquired at:
[43633.647009] [<c104d315>] __lock_acquire+0xff0/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c101d543>] __wake_up+0x1a/0x40
[43633.647009] [<c1038ccd>] insert_work+0x9a/0xa3
[43633.647009] [<c10394f4>] __queue_work+0x26/0x34
[43633.647009] [<c103957c>] queue_work_on+0x40/0x49
[43633.647009] [<c10396a2>] queue_work+0x26/0x4a
[43633.647009] [<c1037fe7>] call_usermodehelper_exec+0x8f/0xe1
[43633.647009] [<c114f357>] kobject_uevent_env+0x333/0x368
[43633.647009] [<c114f396>] kobject_uevent+0xa/0xc
[43633.647009] [<c114eb0c>] kset_register+0x2e/0x34
[43633.647009] [<c11b74fe>] bus_register+0xe4/0x232
[43633.647009] [<c146315e>] platform_bus_init+0x23/0x38
[43633.647009] [<c14631f6>] driver_init+0x1c/0x28
[43633.647009] [<c144828c>] kernel_init+0xf2/0x16a
[43633.647009] [<c10034f7>] kernel_thread_helper+0x7/0x10
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009]
[43633.647009] ... acquired at:
[43633.647009] [<c104d315>] __lock_acquire+0xff0/0x12d3
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<c10394e5>] __queue_work+0x17/0x34
[43633.647009] [<c103957c>] queue_work_on+0x40/0x49
[43633.647009] [<c10396a2>] queue_work+0x26/0x4a
[43633.647009] [<c10396da>] schedule_work+0x14/0x16
[43633.647009] [<fa2558ff>] add_todo+0x4a/0x58 [mac80211]
[43633.647009] [<fa256173>] ieee80211_key_link+0x11a/0x138 [mac80211]
[43633.647009] [<fa2505ff>] ieee80211_add_key+0xee/0x128 [mac80211]
[43633.647009] [<f8f34451>] cfg80211_set_encryption+0xf2/0x163 [cfg80211]
[43633.647009] [<f8f34618>] cfg80211_wext_siwencodeext+0x156/0x16f [cfg80211]
[43633.647009] [<c128779c>] ioctl_standard_call+0x1cc/0x27f
[43633.647009] [<c1287922>] wext_handle_ioctl+0xd3/0x15d
[43633.647009] [<c12353e5>] dev_ioctl+0x564/0x584
[43633.647009] [<c1225eb5>] sock_ioctl+0x1e6/0x1f2
[43633.647009] [<c10a8d82>] vfs_ioctl+0x1d/0x76
[43633.647009] [<c10a9321>] do_vfs_ioctl+0x4a0/0x4de
[43633.647009] [<c10a9392>] sys_ioctl+0x33/0x4d
[43633.647009] [<c1002988>] sysenter_do_call+0x12/0x36
[43633.647009] [<ffffffff>] 0xffffffff
[43633.647009]
[43633.647009]
[43633.647009] stack backtrace:
[43633.647009] Pid: 18756, comm: cc1 Not tainted 2.6.31-rc6 #179
[43633.647009] Call Trace:
[43633.647009] [<c1294dcf>] ? printk+0x14/0x1d
[43633.647009] [<c104bbdb>] print_irq_inversion_bug+0x12d/0x139
[43633.647009] [<c104bc5c>] check_usage_forwards+0x75/0x7e
[43633.647009] [<c104bbe7>] ? check_usage_forwards+0x0/0x7e
[43633.647009] [<c104b447>] mark_lock+0x2bc/0x49f
[43633.647009] [<c104c87d>] __lock_acquire+0x558/0x12d3
[43633.647009] [<fa244acd>] ? sta_info_insert+0x91/0x174 [mac80211]
[43633.647009] [<fa244acd>] ? sta_info_insert+0x91/0x174 [mac80211]
[43633.647009] [<c104d6a4>] lock_acquire+0xac/0xc9
[43633.647009] [<fa244acd>] ? sta_info_insert+0x91/0x174 [mac80211]
[43633.647009] [<c1297b78>] _spin_lock_irqsave+0x36/0x69
[43633.647009] [<fa244acd>] ? sta_info_insert+0x91/0x174 [mac80211]
[43633.647009] [<fa244acd>] sta_info_insert+0x91/0x174 [mac80211]
[43633.647009] [<fa248b2a>] ieee80211_ibss_add_sta+0x119/0x12a [mac80211]
[43633.647009] [<c104b66d>] ? mark_held_locks+0x43/0x5b
[43633.647009] [<fa25268f>] __ieee80211_rx_handle_packet+0x349/0x552 [mac80211]
[43633.647009] [<c104c943>] ? __lock_acquire+0x61e/0x12d3
[43633.647009] [<fa252cbe>] ? __ieee80211_rx+0x9f/0x581 [mac80211]
[43633.647009] [<c104b8a6>] ? trace_hardirqs_on_caller+0xf7/0x131
[43633.647009] [<fa252cbe>] ? __ieee80211_rx+0x9f/0x581 [mac80211]
[43633.647009] [<fa25311f>] __ieee80211_rx+0x500/0x581 [mac80211]
[43633.647009] [<fa4ecf17>] ath5k_tasklet_rx+0x51b/0x56c [ath5k]
[43633.647009] [<c102e209>] tasklet_action+0x93/0xe6
[43633.647009] [<c102e8d6>] __do_softirq+0xdb/0x1ac
[43633.647009] [<c102e9d7>] do_softirq+0x30/0x48
[43633.647009] [<c102eb53>] irq_exit+0x3d/0x74
[43633.647009] [<c100405b>] do_IRQ+0x88/0x9c
[43633.647009] [<c100302e>] common_interrupt+0x2e/0x34
[43633.647009] phy0: Inserted STA 00:1e:c2:3b:f4:e3
[43646.000209] phy0: Removed STA 00:21:e9:94:5e:93
[43646.003063] phy0: Destroyed STA 00:21:e9:94:5e:93
[43713.997314] wlan0: No active IBSS STAs - trying to scan for other IBSS networks with same SSID (merge)
--
Bob Copeland %% www.bobcopeland.com
^ permalink raw reply
* Re: [PATCH] mac80211: allow configure_filter callback to sleep
From: Johannes Berg @ 2009-08-17 15:00 UTC (permalink / raw)
To: John Linville; +Cc: linux-wireless
In-Reply-To: <1250518613.15103.7.camel@johannes.local>
[-- Attachment #1: Type: text/plain, Size: 725 bytes --]
On Mon, 2009-08-17 at 16:16 +0200, Johannes Berg wrote:
> Over time, a whole bunch of drivers have come up
> with their own scheme to delay the configure_filter
> operation to a workqueue. To be able to simplify
> things, allow configure_filter to sleep, and add
> a new prepare_multicast callback that drivers that
> need the multicast address list implement. This new
> callback must be atomic, but most drivers either
> don't care or just calculate a hash which can be
> done atomically and then uploaded to the hardware
> non-atomically.
Oh I should probably mention that
1) I only tested with hwsim, but
2) I don't think it will break much since it doesn't really change most
drivers.
johannes
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 801 bytes --]
^ permalink raw reply
* Re: [PATCH] mac80211: allow configure_filter callback to sleep
From: Kalle Valo @ 2009-08-17 14:24 UTC (permalink / raw)
To: Johannes Berg; +Cc: John Linville, linux-wireless
In-Reply-To: <1250518613.15103.7.camel@johannes.local>
Johannes Berg <johannes@sipsolutions.net> writes:
> Over time, a whole bunch of drivers have come up
> with their own scheme to delay the configure_filter
> operation to a workqueue. To be able to simplify
> things, allow configure_filter to sleep, and add
> a new prepare_multicast callback that drivers that
> need the multicast address list implement. This new
> callback must be atomic, but most drivers either
> don't care or just calculate a hash which can be
> done atomically and then uploaded to the hardware
> non-atomically.
>
> A cursory look suggests that at76c50x-usb,
BTW, at76c50x-usb is broken currently. The change of providing bssid to
the driver only after association broke it. I don't have time to fix it
right now, but I try to find some time next week.
> ar9170, mwl8k (which is actually very broken now), rt2x00, wl1251,
> wl1271 and zd1211 should make use of this new capability.
This will make things a lot easier for wl1251 and wl1271. Thank you for
this.
--
Kalle Valo
^ permalink raw reply
* Re: [PATCH] mac80211: remove deprecated API
From: Kalle Valo @ 2009-08-17 14:21 UTC (permalink / raw)
To: Johannes Berg; +Cc: John Linville, linux-wireless
In-Reply-To: <1250518687.15103.9.camel@johannes.local>
Johannes Berg <johannes@sipsolutions.net> writes:
> All but two drivers have now stopped using the two
> deprecated members radio_enabled and beacon_int,
> so it's about time to remove them for good.
>
> Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
> ---
> drivers/net/wireless/at76c50x-usb.c | 5 ++---
For the at76 part:
Acked-by: Kalle Valo <kalle.valo@iki.fi>
--
Kalle Valo
^ permalink raw reply
* [PATCH] mac80211: remove deprecated API
From: Johannes Berg @ 2009-08-17 14:18 UTC (permalink / raw)
To: John Linville; +Cc: linux-wireless
All but two drivers have now stopped using the two
deprecated members radio_enabled and beacon_int,
so it's about time to remove them for good.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
---
drivers/net/wireless/at76c50x-usb.c | 5 ++---
drivers/net/wireless/mwl8k.c | 7 -------
include/net/mac80211.h | 15 ---------------
net/mac80211/main.c | 4 ----
4 files changed, 2 insertions(+), 29 deletions(-)
--- wireless-testing.orig/drivers/net/wireless/at76c50x-usb.c 2009-08-17 15:39:28.000000000 +0200
+++ wireless-testing/drivers/net/wireless/at76c50x-usb.c 2009-08-17 15:47:48.000000000 +0200
@@ -1950,9 +1950,8 @@ static int at76_config(struct ieee80211_
{
struct at76_priv *priv = hw->priv;
- at76_dbg(DBG_MAC80211, "%s(): channel %d radio %d",
- __func__, hw->conf.channel->hw_value,
- hw->conf.radio_enabled);
+ at76_dbg(DBG_MAC80211, "%s(): channel %d",
+ __func__, hw->conf.channel->hw_value);
at76_dbg_dump(DBG_MAC80211, priv->bssid, ETH_ALEN, "bssid:");
mutex_lock(&priv->mtx);
--- wireless-testing.orig/drivers/net/wireless/mwl8k.c 2009-08-17 15:39:28.000000000 +0200
+++ wireless-testing/drivers/net/wireless/mwl8k.c 2009-08-17 15:47:48.000000000 +0200
@@ -3031,13 +3031,6 @@ static int mwl8k_config_wt(struct work_s
struct mwl8k_priv *priv = hw->priv;
int rc = 0;
- if (!conf->radio_enabled) {
- mwl8k_cmd_802_11_radio_control(hw, MWL8K_RADIO_DISABLE);
- priv->current_channel = NULL;
- rc = 0;
- goto mwl8k_config_exit;
- }
-
if (mwl8k_cmd_802_11_radio_control(hw, MWL8K_RADIO_ENABLE)) {
rc = -EINVAL;
goto mwl8k_config_exit;
--- wireless-testing.orig/include/net/mac80211.h 2009-08-17 15:39:28.000000000 +0200
+++ wireless-testing/include/net/mac80211.h 2009-08-17 15:47:48.000000000 +0200
@@ -583,7 +583,6 @@ enum ieee80211_conf_flags {
/**
* enum ieee80211_conf_changed - denotes which configuration changed
*
- * @_IEEE80211_CONF_CHANGE_RADIO_ENABLED: DEPRECATED
* @IEEE80211_CONF_CHANGE_LISTEN_INTERVAL: the listen interval changed
* @IEEE80211_CONF_CHANGE_RADIOTAP: the radiotap flag changed
* @IEEE80211_CONF_CHANGE_PS: the PS flag or dynamic PS timeout changed
@@ -593,7 +592,6 @@ enum ieee80211_conf_flags {
* @IEEE80211_CONF_CHANGE_IDLE: Idle flag changed
*/
enum ieee80211_conf_changed {
- _IEEE80211_CONF_CHANGE_RADIO_ENABLED = BIT(0),
IEEE80211_CONF_CHANGE_LISTEN_INTERVAL = BIT(2),
IEEE80211_CONF_CHANGE_RADIOTAP = BIT(3),
IEEE80211_CONF_CHANGE_PS = BIT(4),
@@ -603,14 +601,6 @@ enum ieee80211_conf_changed {
IEEE80211_CONF_CHANGE_IDLE = BIT(8),
};
-static inline __deprecated enum ieee80211_conf_changed
-__IEEE80211_CONF_CHANGE_RADIO_ENABLED(void)
-{
- return _IEEE80211_CONF_CHANGE_RADIO_ENABLED;
-}
-#define IEEE80211_CONF_CHANGE_RADIO_ENABLED \
- __IEEE80211_CONF_CHANGE_RADIO_ENABLED()
-
/**
* struct ieee80211_conf - configuration of the device
*
@@ -618,9 +608,6 @@ __IEEE80211_CONF_CHANGE_RADIO_ENABLED(vo
*
* @flags: configuration flags defined above
*
- * @radio_enabled: when zero, driver is required to switch off the radio.
- * @beacon_int: DEPRECATED, DO NOT USE
- *
* @listen_interval: listen interval in units of beacon interval
* @max_sleep_period: the maximum number of beacon intervals to sleep for
* before checking the beacon for a TIM bit (managed mode only); this
@@ -644,13 +631,11 @@ __IEEE80211_CONF_CHANGE_RADIO_ENABLED(vo
* number of transmissions not the number of retries
*/
struct ieee80211_conf {
- int __deprecated beacon_int;
u32 flags;
int power_level, dynamic_ps_timeout;
int max_sleep_period;
u16 listen_interval;
- bool __deprecated radio_enabled;
u8 long_frame_max_tx_count, short_frame_max_tx_count;
--- wireless-testing.orig/net/mac80211/main.c 2009-08-17 15:39:28.000000000 +0200
+++ wireless-testing/net/mac80211/main.c 2009-08-17 15:47:48.000000000 +0200
@@ -241,9 +241,6 @@ void ieee80211_bss_info_change_notify(st
drv_bss_info_changed(local, &sdata->vif,
&sdata->vif.bss_conf, changed);
-
- /* DEPRECATED */
- local->hw.conf.beacon_int = sdata->vif.bss_conf.beacon_int;
}
u32 ieee80211_reset_erp_info(struct ieee80211_sub_if_data *sdata)
@@ -687,7 +684,6 @@ struct ieee80211_hw *ieee80211_alloc_hw(
local->hw.max_rates = 1;
local->hw.conf.long_frame_max_tx_count = wiphy->retry_long;
local->hw.conf.short_frame_max_tx_count = wiphy->retry_short;
- local->hw.conf.radio_enabled = true;
local->user_power_level = -1;
INIT_LIST_HEAD(&local->interfaces);
^ permalink raw reply
* [PATCH] mac80211: allow configure_filter callback to sleep
From: Johannes Berg @ 2009-08-17 14:16 UTC (permalink / raw)
To: John Linville; +Cc: linux-wireless
Over time, a whole bunch of drivers have come up
with their own scheme to delay the configure_filter
operation to a workqueue. To be able to simplify
things, allow configure_filter to sleep, and add
a new prepare_multicast callback that drivers that
need the multicast address list implement. This new
callback must be atomic, but most drivers either
don't care or just calculate a hash which can be
done atomically and then uploaded to the hardware
non-atomically.
A cursory look suggests that at76c50x-usb, ar9170,
mwl8k (which is actually very broken now), rt2x00,
wl1251, wl1271 and zd1211 should make use of this
new capability.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
---
drivers/net/wireless/adm8211.c | 42 ++++++++++++-------
drivers/net/wireless/at76c50x-usb.c | 7 +--
drivers/net/wireless/ath/ar9170/main.c | 43 +++++++++++--------
drivers/net/wireless/ath/ath5k/base.c | 64 +++++++++++++++++------------
drivers/net/wireless/ath/ath9k/main.c | 3 -
drivers/net/wireless/b43/main.c | 2
drivers/net/wireless/b43legacy/main.c | 4 -
drivers/net/wireless/iwlwifi/iwl-core.c | 2
drivers/net/wireless/iwlwifi/iwl-core.h | 3 -
drivers/net/wireless/libertas_tf/main.c | 37 +++++++++++-----
drivers/net/wireless/mac80211_hwsim.c | 4 -
drivers/net/wireless/mwl8k.c | 34 ++++++++++++---
drivers/net/wireless/p54/main.c | 2
drivers/net/wireless/rt2x00/rt2x00.h | 2
drivers/net/wireless/rt2x00/rt2x00mac.c | 2
drivers/net/wireless/rtl818x/rtl8180_dev.c | 11 ++++
drivers/net/wireless/rtl818x/rtl8187_dev.c | 11 ++++
drivers/net/wireless/wl12xx/wl1251_main.c | 4 -
drivers/net/wireless/wl12xx/wl1271_main.c | 4 -
drivers/net/wireless/zd1211rw/zd_mac.c | 44 +++++++++++++------
include/net/mac80211.h | 21 ++++++---
net/mac80211/driver-ops.h | 24 +++++++++-
net/mac80211/driver-trace.h | 36 +++++++++++++---
net/mac80211/ieee80211_i.h | 3 +
net/mac80211/iface.c | 15 +-----
net/mac80211/main.c | 24 ++++++++--
net/mac80211/scan.c | 16 -------
net/mac80211/util.c | 2
28 files changed, 297 insertions(+), 169 deletions(-)
--- wireless-testing.orig/include/net/mac80211.h 2009-08-17 15:13:13.000000000 +0200
+++ wireless-testing/include/net/mac80211.h 2009-08-17 15:50:50.000000000 +0200
@@ -1219,10 +1219,13 @@ ieee80211_get_alt_retry_rate(const struc
* the driver's configure_filter() function which frames should be
* passed to mac80211 and which should be filtered out.
*
- * The configure_filter() callback is invoked with the parameters
- * @mc_count and @mc_list for the combined multicast address list
- * of all virtual interfaces, @changed_flags telling which flags
- * were changed and @total_flags with the new flag states.
+ * Before configure_filter() is invoked, the prepare_multicast()
+ * callback is invoked with the parameters @mc_count and @mc_list
+ * for the combined multicast address list of all virtual interfaces.
+ * It's use is optional, and it returns a u64 that is passed to
+ * configure_filter(). Additionally, configure_filter() has the
+ * arguments @changed_flags telling which flags were changed and
+ * @total_flags with the new flag states.
*
* If your device has no multicast address filters your driver will
* need to check both the %FIF_ALLMULTI flag and the @mc_count
@@ -1375,9 +1378,13 @@ enum ieee80211_ampdu_mlme_action {
* for association indication. The @changed parameter indicates which
* of the bss parameters has changed when a call is made.
*
+ * @prepare_multicast: Prepare for multicast filter configuration.
+ * This callback is optional, and its return value is passed
+ * to configure_filter(). This callback must be atomic.
+ *
* @configure_filter: Configure the device's RX filter.
* See the section "Frame filtering" for more information.
- * This callback must be implemented and atomic.
+ * This callback must be implemented.
*
* @set_tim: Set TIM bit. mac80211 calls this function when a TIM bit
* must be set or cleared for a given STA. Must be atomic.
@@ -1479,10 +1486,12 @@ struct ieee80211_ops {
struct ieee80211_vif *vif,
struct ieee80211_bss_conf *info,
u32 changed);
+ u64 (*prepare_multicast)(struct ieee80211_hw *hw,
+ int mc_count, struct dev_addr_list *mc_list);
void (*configure_filter)(struct ieee80211_hw *hw,
unsigned int changed_flags,
unsigned int *total_flags,
- int mc_count, struct dev_addr_list *mc_list);
+ u64 multicast);
int (*set_tim)(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
bool set);
int (*set_key)(struct ieee80211_hw *hw, enum set_key_cmd cmd,
--- wireless-testing.orig/net/mac80211/driver-ops.h 2009-08-17 15:12:58.000000000 +0200
+++ wireless-testing/net/mac80211/driver-ops.h 2009-08-17 15:53:56.000000000 +0200
@@ -55,16 +55,32 @@ static inline void drv_bss_info_changed(
trace_drv_bss_info_changed(local, vif, info, changed);
}
+static inline u64 drv_prepare_multicast(struct ieee80211_local *local,
+ int mc_count,
+ struct dev_addr_list *mc_list)
+{
+ u64 ret = 0;
+
+ if (local->ops->prepare_multicast)
+ ret = local->ops->prepare_multicast(&local->hw, mc_count,
+ mc_list);
+
+ trace_drv_prepare_multicast(local, mc_count, ret);
+
+ return ret;
+}
+
static inline void drv_configure_filter(struct ieee80211_local *local,
unsigned int changed_flags,
unsigned int *total_flags,
- int mc_count,
- struct dev_addr_list *mc_list)
+ u64 multicast)
{
+ might_sleep();
+
local->ops->configure_filter(&local->hw, changed_flags, total_flags,
- mc_count, mc_list);
+ multicast);
trace_drv_configure_filter(local, changed_flags, total_flags,
- mc_count);
+ multicast);
}
static inline int drv_set_tim(struct ieee80211_local *local,
--- wireless-testing.orig/net/mac80211/driver-trace.h 2009-08-17 15:12:58.000000000 +0200
+++ wireless-testing/net/mac80211/driver-trace.h 2009-08-17 15:13:18.000000000 +0200
@@ -191,31 +191,55 @@ TRACE_EVENT(drv_bss_info_changed,
)
);
+TRACE_EVENT(drv_prepare_multicast,
+ TP_PROTO(struct ieee80211_local *local, int mc_count, u64 ret),
+
+ TP_ARGS(local, mc_count, ret),
+
+ TP_STRUCT__entry(
+ LOCAL_ENTRY
+ __field(int, mc_count)
+ __field(u64, ret)
+ ),
+
+ TP_fast_assign(
+ LOCAL_ASSIGN;
+ __entry->mc_count = mc_count;
+ __entry->ret = ret;
+ ),
+
+ TP_printk(
+ LOCAL_PR_FMT " prepare mc (%d): %llx",
+ LOCAL_PR_ARG, __entry->mc_count,
+ (unsigned long long) __entry->ret
+ )
+);
+
TRACE_EVENT(drv_configure_filter,
TP_PROTO(struct ieee80211_local *local,
unsigned int changed_flags,
unsigned int *total_flags,
- int mc_count),
+ u64 multicast),
- TP_ARGS(local, changed_flags, total_flags, mc_count),
+ TP_ARGS(local, changed_flags, total_flags, multicast),
TP_STRUCT__entry(
LOCAL_ENTRY
__field(unsigned int, changed)
__field(unsigned int, total)
- __field(int, mc)
+ __field(u64, multicast)
),
TP_fast_assign(
LOCAL_ASSIGN;
__entry->changed = changed_flags;
__entry->total = *total_flags;
- __entry->mc = mc_count;
+ __entry->multicast = multicast;
),
TP_printk(
- LOCAL_PR_FMT " changed:%#x total:%#x mc:%d",
- LOCAL_PR_ARG, __entry->changed, __entry->total, __entry->mc
+ LOCAL_PR_FMT " changed:%#x total:%#x",
+ LOCAL_PR_ARG, __entry->changed, __entry->total
)
);
--- wireless-testing.orig/net/mac80211/iface.c 2009-08-17 15:12:58.000000000 +0200
+++ wireless-testing/net/mac80211/iface.c 2009-08-17 15:13:18.000000000 +0200
@@ -227,9 +227,7 @@ static int ieee80211_open(struct net_dev
if (sdata->u.mntr_flags & MONITOR_FLAG_OTHER_BSS)
local->fif_other_bss++;
- spin_lock_bh(&local->filter_lock);
ieee80211_configure_filter(local);
- spin_unlock_bh(&local->filter_lock);
break;
default:
conf.vif = &sdata->vif;
@@ -241,17 +239,13 @@ static int ieee80211_open(struct net_dev
if (ieee80211_vif_is_mesh(&sdata->vif)) {
local->fif_other_bss++;
- spin_lock_bh(&local->filter_lock);
ieee80211_configure_filter(local);
- spin_unlock_bh(&local->filter_lock);
ieee80211_start_mesh(sdata);
} else if (sdata->vif.type == NL80211_IFTYPE_AP) {
local->fif_pspoll++;
- spin_lock_bh(&local->filter_lock);
ieee80211_configure_filter(local);
- spin_unlock_bh(&local->filter_lock);
}
changed |= ieee80211_reset_erp_info(sdata);
@@ -404,10 +398,11 @@ static int ieee80211_stop(struct net_dev
spin_lock_bh(&local->filter_lock);
__dev_addr_unsync(&local->mc_list, &local->mc_count,
&dev->mc_list, &dev->mc_count);
- ieee80211_configure_filter(local);
spin_unlock_bh(&local->filter_lock);
netif_addr_unlock_bh(dev);
+ ieee80211_configure_filter(local);
+
del_timer_sync(&local->dynamic_ps_timer);
cancel_work_sync(&local->dynamic_ps_enable_work);
@@ -458,9 +453,7 @@ static int ieee80211_stop(struct net_dev
if (sdata->u.mntr_flags & MONITOR_FLAG_OTHER_BSS)
local->fif_other_bss--;
- spin_lock_bh(&local->filter_lock);
ieee80211_configure_filter(local);
- spin_unlock_bh(&local->filter_lock);
break;
case NL80211_IFTYPE_STATION:
del_timer_sync(&sdata->u.mgd.chswitch_timer);
@@ -503,9 +496,7 @@ static int ieee80211_stop(struct net_dev
local->fif_other_bss--;
atomic_dec(&local->iff_allmultis);
- spin_lock_bh(&local->filter_lock);
ieee80211_configure_filter(local);
- spin_unlock_bh(&local->filter_lock);
ieee80211_stop_mesh(sdata);
}
@@ -622,8 +613,8 @@ static void ieee80211_set_multicast_list
spin_lock_bh(&local->filter_lock);
__dev_addr_sync(&local->mc_list, &local->mc_count,
&dev->mc_list, &dev->mc_count);
- ieee80211_configure_filter(local);
spin_unlock_bh(&local->filter_lock);
+ ieee80211_queue_work(&local->hw, &local->reconfig_filter);
}
/*
--- wireless-testing.orig/net/mac80211/main.c 2009-08-17 15:12:58.000000000 +0200
+++ wireless-testing/net/mac80211/main.c 2009-08-17 16:13:09.000000000 +0200
@@ -50,9 +50,9 @@ struct ieee80211_tx_status_rtap_hdr {
} __attribute__ ((packed));
-/* must be called under mdev tx lock */
void ieee80211_configure_filter(struct ieee80211_local *local)
{
+ u64 mc;
unsigned int changed_flags;
unsigned int new_flags = 0;
@@ -62,7 +62,7 @@ void ieee80211_configure_filter(struct i
if (atomic_read(&local->iff_allmultis))
new_flags |= FIF_ALLMULTI;
- if (local->monitors)
+ if (local->monitors || local->scanning)
new_flags |= FIF_BCN_PRBRESP_PROMISC;
if (local->fif_fcsfail)
@@ -80,20 +80,30 @@ void ieee80211_configure_filter(struct i
if (local->fif_pspoll)
new_flags |= FIF_PSPOLL;
+ spin_lock_bh(&local->filter_lock);
changed_flags = local->filter_flags ^ new_flags;
+ mc = drv_prepare_multicast(local, local->mc_count, local->mc_list);
+ spin_unlock_bh(&local->filter_lock);
+
/* be a bit nasty */
new_flags |= (1<<31);
- drv_configure_filter(local, changed_flags, &new_flags,
- local->mc_count,
- local->mc_list);
+ drv_configure_filter(local, changed_flags, &new_flags, mc);
WARN_ON(new_flags & (1<<31));
local->filter_flags = new_flags & ~(1<<31);
}
+static void ieee80211_reconfig_filter(struct work_struct *work)
+{
+ struct ieee80211_local *local =
+ container_of(work, struct ieee80211_local, reconfig_filter);
+
+ ieee80211_configure_filter(local);
+}
+
int ieee80211_hw_config(struct ieee80211_local *local, u32 changed)
{
struct ieee80211_channel *chan, *scan_chan;
@@ -692,6 +702,8 @@ struct ieee80211_hw *ieee80211_alloc_hw(
INIT_WORK(&local->restart_work, ieee80211_restart_work);
+ INIT_WORK(&local->reconfig_filter, ieee80211_reconfig_filter);
+
INIT_WORK(&local->dynamic_ps_enable_work,
ieee80211_dynamic_ps_enable_work);
INIT_WORK(&local->dynamic_ps_disable_work,
@@ -946,6 +958,8 @@ void ieee80211_unregister_hw(struct ieee
rtnl_unlock();
+ cancel_work_sync(&local->reconfig_filter);
+
ieee80211_clear_tx_pending(local);
sta_info_stop(local);
rate_control_deinitialize(local);
--- wireless-testing.orig/net/mac80211/scan.c 2009-08-17 15:12:58.000000000 +0200
+++ wireless-testing/net/mac80211/scan.c 2009-08-17 15:13:18.000000000 +0200
@@ -292,13 +292,7 @@ void ieee80211_scan_completed(struct iee
if (was_hw_scan)
goto done;
- spin_lock_bh(&local->filter_lock);
- local->filter_flags &= ~FIF_BCN_PRBRESP_PROMISC;
- drv_configure_filter(local, FIF_BCN_PRBRESP_PROMISC,
- &local->filter_flags,
- local->mc_count,
- local->mc_list);
- spin_unlock_bh(&local->filter_lock);
+ ieee80211_configure_filter(local);
drv_sw_scan_complete(local);
@@ -376,13 +370,7 @@ static int ieee80211_start_sw_scan(struc
local->next_scan_state = SCAN_DECISION;
local->scan_channel_idx = 0;
- spin_lock_bh(&local->filter_lock);
- local->filter_flags |= FIF_BCN_PRBRESP_PROMISC;
- drv_configure_filter(local, FIF_BCN_PRBRESP_PROMISC,
- &local->filter_flags,
- local->mc_count,
- local->mc_list);
- spin_unlock_bh(&local->filter_lock);
+ ieee80211_configure_filter(local);
/* TODO: start scan as soon as all nullfunc frames are ACKed */
ieee80211_queue_delayed_work(&local->hw,
--- wireless-testing.orig/net/mac80211/util.c 2009-08-17 15:12:58.000000000 +0200
+++ wireless-testing/net/mac80211/util.c 2009-08-17 15:13:18.000000000 +0200
@@ -1076,9 +1076,7 @@ int ieee80211_reconfig(struct ieee80211_
/* reconfigure hardware */
ieee80211_hw_config(local, ~0);
- spin_lock_bh(&local->filter_lock);
ieee80211_configure_filter(local);
- spin_unlock_bh(&local->filter_lock);
/* Finally also reconfigure all the BSS information */
list_for_each_entry(sdata, &local->interfaces, list) {
--- wireless-testing.orig/net/mac80211/ieee80211_i.h 2009-08-17 15:12:58.000000000 +0200
+++ wireless-testing/net/mac80211/ieee80211_i.h 2009-08-17 15:13:18.000000000 +0200
@@ -636,6 +636,9 @@ struct ieee80211_local {
/* protects the aggregated multicast list and filter calls */
spinlock_t filter_lock;
+ /* used for uploading changed mc list */
+ struct work_struct reconfig_filter;
+
/* aggregated multicast list */
struct dev_addr_list *mc_list;
int mc_count;
--- wireless-testing.orig/drivers/net/wireless/at76c50x-usb.c 2009-08-17 15:12:59.000000000 +0200
+++ wireless-testing/drivers/net/wireless/at76c50x-usb.c 2009-08-17 15:50:50.000000000 +0200
@@ -1997,15 +1997,14 @@ static void at76_bss_info_changed(struct
/* must be atomic */
static void at76_configure_filter(struct ieee80211_hw *hw,
unsigned int changed_flags,
- unsigned int *total_flags, int mc_count,
- struct dev_addr_list *mc_list)
+ unsigned int *total_flags, u64 multicast)
{
struct at76_priv *priv = hw->priv;
int flags;
at76_dbg(DBG_MAC80211, "%s(): changed_flags=0x%08x "
- "total_flags=0x%08x mc_count=%d",
- __func__, changed_flags, *total_flags, mc_count);
+ "total_flags=0x%08x",
+ __func__, changed_flags, *total_flags);
flags = changed_flags & AT76_SUPPORTED_FILTERS;
*total_flags = AT76_SUPPORTED_FILTERS;
--- wireless-testing.orig/drivers/net/wireless/b43/main.c 2009-08-17 15:12:58.000000000 +0200
+++ wireless-testing/drivers/net/wireless/b43/main.c 2009-08-17 15:13:18.000000000 +0200
@@ -3646,7 +3646,7 @@ out_unlock:
static void b43_op_configure_filter(struct ieee80211_hw *hw,
unsigned int changed, unsigned int *fflags,
- int mc_count, struct dev_addr_list *mc_list)
+ u64 multicast)
{
struct b43_wl *wl = hw_to_b43_wl(hw);
struct b43_wldev *dev = wl->current_dev;
--- wireless-testing.orig/drivers/net/wireless/b43legacy/main.c 2009-08-17 15:12:58.000000000 +0200
+++ wireless-testing/drivers/net/wireless/b43legacy/main.c 2009-08-17 15:13:18.000000000 +0200
@@ -2836,9 +2836,7 @@ static void b43legacy_op_bss_info_change
static void b43legacy_op_configure_filter(struct ieee80211_hw *hw,
unsigned int changed,
- unsigned int *fflags,
- int mc_count,
- struct dev_addr_list *mc_list)
+ unsigned int *fflags,u64 multicast)
{
struct b43legacy_wl *wl = hw_to_b43legacy_wl(hw);
struct b43legacy_wldev *dev = wl->current_dev;
--- wireless-testing.orig/drivers/net/wireless/mac80211_hwsim.c 2009-08-17 15:12:59.000000000 +0200
+++ wireless-testing/drivers/net/wireless/mac80211_hwsim.c 2009-08-17 15:13:18.000000000 +0200
@@ -582,9 +582,7 @@ static int mac80211_hwsim_config(struct
static void mac80211_hwsim_configure_filter(struct ieee80211_hw *hw,
unsigned int changed_flags,
- unsigned int *total_flags,
- int mc_count,
- struct dev_addr_list *mc_list)
+ unsigned int *total_flags,u64 multicast)
{
struct mac80211_hwsim_data *data = hw->priv;
--- wireless-testing.orig/drivers/net/wireless/mwl8k.c 2009-08-17 15:12:58.000000000 +0200
+++ wireless-testing/drivers/net/wireless/mwl8k.c 2009-08-17 15:50:50.000000000 +0200
@@ -3251,31 +3251,50 @@ mwl8k_configure_filter_exit:
return rc;
}
+static u64 mwl8k_prepare_multicast(struct ieee80211_hw *hw,
+ int mc_count, struct dev_addr_list *mclist)
+{
+ struct mwl8k_configure_filter_worker *worker;
+
+ worker = kzalloc(sizeof(*worker), GFP_ATOMIC);
+
+ if (!worker)
+ return 0;
+
+ /*
+ * XXX: This is _HORRIBLY_ broken!!
+ *
+ * No locking, the mclist pointer might be invalid as soon as this
+ * function returns, something in the list might be invalidated
+ * once we get to the worker, etc...
+ */
+ worker->mc_count = mc_count;
+ worker->mclist = mclist;
+
+ return (u64)worker;
+}
+
static void mwl8k_configure_filter(struct ieee80211_hw *hw,
unsigned int changed_flags,
unsigned int *total_flags,
- int mc_count,
- struct dev_addr_list *mclist)
+ u64 multicast)
{
- struct mwl8k_configure_filter_worker *worker;
+ struct mwl8k_configure_filter_worker *worker = (void *)multicast;
struct mwl8k_priv *priv = hw->priv;
/* Clear unsupported feature flags */
*total_flags &= MWL8K_SUPPORTED_IF_FLAGS;
- if (!(changed_flags & MWL8K_SUPPORTED_IF_FLAGS) && !mc_count)
+ if (!(changed_flags & MWL8K_SUPPORTED_IF_FLAGS))
return;
- worker = kzalloc(sizeof(*worker), GFP_ATOMIC);
if (worker == NULL)
return;
worker->header.options = MWL8K_WQ_QUEUE_ONLY | MWL8K_WQ_TX_WAIT_EMPTY;
worker->changed_flags = changed_flags;
worker->total_flags = total_flags;
- worker->mc_count = mc_count;
- worker->mclist = mclist;
mwl8k_queue_work(hw, &worker->header, priv->config_wq,
mwl8k_configure_filter_wt);
@@ -3441,6 +3460,7 @@ static const struct ieee80211_ops mwl8k_
.remove_interface = mwl8k_remove_interface,
.config = mwl8k_config,
.bss_info_changed = mwl8k_bss_info_changed,
+ .prepare_multicast = mwl8k_prepare_multicast,
.configure_filter = mwl8k_configure_filter,
.set_rts_threshold = mwl8k_set_rts_threshold,
.conf_tx = mwl8k_conf_tx,
--- wireless-testing.orig/drivers/net/wireless/rtl818x/rtl8180_dev.c 2009-08-17 15:12:58.000000000 +0200
+++ wireless-testing/drivers/net/wireless/rtl818x/rtl8180_dev.c 2009-08-17 15:13:18.000000000 +0200
@@ -728,10 +728,16 @@ static void rtl8180_bss_info_changed(str
priv->rf->conf_erp(dev, info);
}
+static u64 rtl8180_prepare_multicast(struct ieee80211_hw *dev, int mc_count,
+ struct dev_addr_list *mc_list)
+{
+ return mc_count;
+}
+
static void rtl8180_configure_filter(struct ieee80211_hw *dev,
unsigned int changed_flags,
unsigned int *total_flags,
- int mc_count, struct dev_addr_list *mclist)
+ u64 multicast)
{
struct rtl8180_priv *priv = dev->priv;
@@ -741,7 +747,7 @@ static void rtl8180_configure_filter(str
priv->rx_conf ^= RTL818X_RX_CONF_CTRL;
if (changed_flags & FIF_OTHER_BSS)
priv->rx_conf ^= RTL818X_RX_CONF_MONITOR;
- if (*total_flags & FIF_ALLMULTI || mc_count > 0)
+ if (*total_flags & FIF_ALLMULTI || multicast > 0)
priv->rx_conf |= RTL818X_RX_CONF_MULTICAST;
else
priv->rx_conf &= ~RTL818X_RX_CONF_MULTICAST;
@@ -768,6 +774,7 @@ static const struct ieee80211_ops rtl818
.remove_interface = rtl8180_remove_interface,
.config = rtl8180_config,
.bss_info_changed = rtl8180_bss_info_changed,
+ .prepare_multicast = rtl8180_prepare_multicast,
.configure_filter = rtl8180_configure_filter,
};
--- wireless-testing.orig/drivers/net/wireless/rtl818x/rtl8187_dev.c 2009-08-17 15:12:58.000000000 +0200
+++ wireless-testing/drivers/net/wireless/rtl818x/rtl8187_dev.c 2009-08-17 15:13:18.000000000 +0200
@@ -1192,10 +1192,16 @@ static void rtl8187_bss_info_changed(str
info->use_short_preamble);
}
+static u64 rtl8187_prepare_multicast(struct ieee80211_hw *dev,
+ int mc_count, struct dev_addr_list *mc_list)
+{
+ return mc_count;
+}
+
static void rtl8187_configure_filter(struct ieee80211_hw *dev,
unsigned int changed_flags,
unsigned int *total_flags,
- int mc_count, struct dev_addr_list *mclist)
+ u64 multicast)
{
struct rtl8187_priv *priv = dev->priv;
@@ -1205,7 +1211,7 @@ static void rtl8187_configure_filter(str
priv->rx_conf ^= RTL818X_RX_CONF_CTRL;
if (changed_flags & FIF_OTHER_BSS)
priv->rx_conf ^= RTL818X_RX_CONF_MONITOR;
- if (*total_flags & FIF_ALLMULTI || mc_count > 0)
+ if (*total_flags & FIF_ALLMULTI || multicast > 0)
priv->rx_conf |= RTL818X_RX_CONF_MULTICAST;
else
priv->rx_conf &= ~RTL818X_RX_CONF_MULTICAST;
@@ -1268,6 +1274,7 @@ static const struct ieee80211_ops rtl818
.remove_interface = rtl8187_remove_interface,
.config = rtl8187_config,
.bss_info_changed = rtl8187_bss_info_changed,
+ .prepare_multicast = rtl8187_prepare_multicast,
.configure_filter = rtl8187_configure_filter,
.conf_tx = rtl8187_conf_tx
};
--- wireless-testing.orig/drivers/net/wireless/wl12xx/wl1251_main.c 2009-08-17 15:12:59.000000000 +0200
+++ wireless-testing/drivers/net/wireless/wl12xx/wl1251_main.c 2009-08-17 15:13:18.000000000 +0200
@@ -652,9 +652,7 @@ out:
static void wl1251_op_configure_filter(struct ieee80211_hw *hw,
unsigned int changed,
- unsigned int *total,
- int mc_count,
- struct dev_addr_list *mc_list)
+ unsigned int *total,u64 multicast)
{
struct wl1251 *wl = hw->priv;
--- wireless-testing.orig/drivers/net/wireless/wl12xx/wl1271_main.c 2009-08-17 15:12:59.000000000 +0200
+++ wireless-testing/drivers/net/wireless/wl12xx/wl1271_main.c 2009-08-17 15:13:18.000000000 +0200
@@ -793,9 +793,7 @@ out:
static void wl1271_op_configure_filter(struct ieee80211_hw *hw,
unsigned int changed,
- unsigned int *total,
- int mc_count,
- struct dev_addr_list *mc_list)
+ unsigned int *total,u64 multicast)
{
struct wl1271 *wl = hw->priv;
--- wireless-testing.orig/drivers/net/wireless/adm8211.c 2009-08-17 15:12:59.000000000 +0200
+++ wireless-testing/drivers/net/wireless/adm8211.c 2009-08-17 15:46:38.000000000 +0200
@@ -1328,16 +1328,39 @@ static void adm8211_bss_info_changed(str
}
}
+static u64 adm8211_prepare_multicast(struct ieee80211_hw *hw,
+ int mc_count, struct dev_addr_list *mclist)
+{
+ unsigned int bit_nr, i;
+ u32 mc_filter[2];
+
+ mc_filter[1] = mc_filter[0] = 0;
+
+ for (i = 0; i < mc_count; i++) {
+ if (!mclist)
+ break;
+ bit_nr = ether_crc(ETH_ALEN, mclist->dmi_addr) >> 26;
+
+ bit_nr &= 0x3F;
+ mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31);
+ mclist = mclist->next;
+ }
+
+ return mc_filter[0] | ((u64)(mc_filter[1]) << 32);
+}
+
static void adm8211_configure_filter(struct ieee80211_hw *dev,
unsigned int changed_flags,
unsigned int *total_flags,
- int mc_count, struct dev_mc_list *mclist)
+ u64 multicast)
{
static const u8 bcast[ETH_ALEN] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
struct adm8211_priv *priv = dev->priv;
- unsigned int bit_nr, new_flags;
+ unsigned int new_flags;
u32 mc_filter[2];
- int i;
+
+ mc_filter[0] = multicast;
+ mc_filter[1] = multicast >> 32;
new_flags = 0;
@@ -1346,23 +1369,13 @@ static void adm8211_configure_filter(str
priv->nar |= ADM8211_NAR_PR;
priv->nar &= ~ADM8211_NAR_MM;
mc_filter[1] = mc_filter[0] = ~0;
- } else if ((*total_flags & FIF_ALLMULTI) || (mc_count > 32)) {
+ } else if (*total_flags & FIF_ALLMULTI || multicast == ~(0ULL)) {
new_flags |= FIF_ALLMULTI;
priv->nar &= ~ADM8211_NAR_PR;
priv->nar |= ADM8211_NAR_MM;
mc_filter[1] = mc_filter[0] = ~0;
} else {
priv->nar &= ~(ADM8211_NAR_MM | ADM8211_NAR_PR);
- mc_filter[1] = mc_filter[0] = 0;
- for (i = 0; i < mc_count; i++) {
- if (!mclist)
- break;
- bit_nr = ether_crc(ETH_ALEN, mclist->dmi_addr) >> 26;
-
- bit_nr &= 0x3F;
- mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31);
- mclist = mclist->next;
- }
}
ADM8211_IDLE_RX();
@@ -1757,6 +1770,7 @@ static const struct ieee80211_ops adm821
.remove_interface = adm8211_remove_interface,
.config = adm8211_config,
.bss_info_changed = adm8211_bss_info_changed,
+ .prepare_multicast = adm8211_prepare_multicast,
.configure_filter = adm8211_configure_filter,
.get_stats = adm8211_get_stats,
.get_tx_stats = adm8211_get_tx_stats,
--- wireless-testing.orig/drivers/net/wireless/ath/ar9170/main.c 2009-08-17 15:12:59.000000000 +0200
+++ wireless-testing/drivers/net/wireless/ath/ar9170/main.c 2009-08-17 15:45:42.000000000 +0200
@@ -2100,10 +2100,29 @@ unlock:
mutex_unlock(&ar->mutex);
}
+static u64 ar9170_op_prepare_multicast(struct ieee80211_hw *hw, int mc_count,
+ struct dev_addr_list *mclist)
+{
+ u64 mchash;
+ int i;
+
+ /* always get broadcast frames */
+ mchash = 1ULL << (0xff >> 2);
+
+ for (i = 0; i < mc_count; i++) {
+ if (WARN_ON(!mclist))
+ break;
+ mchash |= 1ULL << (mclist->dmi_addr[5] >> 2);
+ mclist = mclist->next;
+ }
+
+ return mchash;
+}
+
static void ar9170_op_configure_filter(struct ieee80211_hw *hw,
unsigned int changed_flags,
unsigned int *new_flags,
- int mc_count, struct dev_mc_list *mclist)
+ u64 multicast)
{
struct ar9170 *ar = hw->priv;
@@ -2116,24 +2135,11 @@ static void ar9170_op_configure_filter(s
* then checking the error flags, later.
*/
- if (changed_flags & FIF_ALLMULTI) {
- if (*new_flags & FIF_ALLMULTI) {
- ar->want_mc_hash = ~0ULL;
- } else {
- u64 mchash;
- int i;
-
- /* always get broadcast frames */
- mchash = 1ULL << (0xff >> 2);
+ if (changed_flags & FIF_ALLMULTI && *new_flags & FIF_ALLMULTI)
+ multicast = ~0ULL;
- for (i = 0; i < mc_count; i++) {
- if (WARN_ON(!mclist))
- break;
- mchash |= 1ULL << (mclist->dmi_addr[5] >> 2);
- mclist = mclist->next;
- }
- ar->want_mc_hash = mchash;
- }
+ if (multicast != ar->want_mc_hash) {
+ ar->want_mc_hash = multicast;
set_bit(AR9170_FILTER_CHANGED_MULTICAST, &ar->filter_changed);
}
@@ -2543,6 +2549,7 @@ static const struct ieee80211_ops ar9170
.add_interface = ar9170_op_add_interface,
.remove_interface = ar9170_op_remove_interface,
.config = ar9170_op_config,
+ .prepare_multicast = ar9170_op_prepare_multicast,
.configure_filter = ar9170_op_configure_filter,
.conf_tx = ar9170_conf_tx,
.bss_info_changed = ar9170_op_bss_info_changed,
--- wireless-testing.orig/drivers/net/wireless/ath/ath5k/base.c 2009-08-17 15:12:59.000000000 +0200
+++ wireless-testing/drivers/net/wireless/ath/ath5k/base.c 2009-08-17 15:13:18.000000000 +0200
@@ -229,10 +229,12 @@ static int ath5k_add_interface(struct ie
static void ath5k_remove_interface(struct ieee80211_hw *hw,
struct ieee80211_if_init_conf *conf);
static int ath5k_config(struct ieee80211_hw *hw, u32 changed);
+static u64 ath5k_prepare_multicast(struct ieee80211_hw *hw,
+ int mc_count, struct dev_addr_list *mc_list);
static void ath5k_configure_filter(struct ieee80211_hw *hw,
unsigned int changed_flags,
unsigned int *new_flags,
- int mc_count, struct dev_mc_list *mclist);
+ u64 multicast);
static int ath5k_set_key(struct ieee80211_hw *hw,
enum set_key_cmd cmd,
struct ieee80211_vif *vif, struct ieee80211_sta *sta,
@@ -260,6 +262,7 @@ static const struct ieee80211_ops ath5k_
.add_interface = ath5k_add_interface,
.remove_interface = ath5k_remove_interface,
.config = ath5k_config,
+ .prepare_multicast = ath5k_prepare_multicast,
.configure_filter = ath5k_configure_filter,
.set_key = ath5k_set_key,
.get_stats = ath5k_get_stats,
@@ -2853,6 +2856,37 @@ unlock:
return ret;
}
+static u64 ath5k_prepare_multicast(struct ieee80211_hw *hw,
+ int mc_count, struct dev_addr_list *mclist)
+{
+ u32 mfilt[2], val;
+ int i;
+ u8 pos;
+
+ mfilt[0] = 0;
+ mfilt[1] = 1;
+
+ for (i = 0; i < mc_count; i++) {
+ if (!mclist)
+ break;
+ /* calculate XOR of eight 6-bit values */
+ val = get_unaligned_le32(mclist->dmi_addr + 0);
+ pos = (val >> 18) ^ (val >> 12) ^ (val >> 6) ^ val;
+ val = get_unaligned_le32(mclist->dmi_addr + 3);
+ pos ^= (val >> 18) ^ (val >> 12) ^ (val >> 6) ^ val;
+ pos &= 0x3f;
+ mfilt[pos / 32] |= (1 << (pos % 32));
+ /* XXX: we might be able to just do this instead,
+ * but not sure, needs testing, if we do use this we'd
+ * neet to inform below to not reset the mcast */
+ /* ath5k_hw_set_mcast_filterindex(ah,
+ * mclist->dmi_addr[5]); */
+ mclist = mclist->next;
+ }
+
+ return ((u64)(mfilt[1]) << 32) | mfilt[0];
+}
+
#define SUPPORTED_FIF_FLAGS \
FIF_PROMISC_IN_BSS | FIF_ALLMULTI | FIF_FCSFAIL | \
FIF_PLCPFAIL | FIF_CONTROL | FIF_OTHER_BSS | \
@@ -2878,16 +2912,14 @@ unlock:
static void ath5k_configure_filter(struct ieee80211_hw *hw,
unsigned int changed_flags,
unsigned int *new_flags,
- int mc_count, struct dev_mc_list *mclist)
+ u64 multicast)
{
struct ath5k_softc *sc = hw->priv;
struct ath5k_hw *ah = sc->ah;
- u32 mfilt[2], val, rfilt;
- u8 pos;
- int i;
+ u32 mfilt[2], rfilt;
- mfilt[0] = 0;
- mfilt[1] = 0;
+ mfilt[0] = multicast;
+ mfilt[1] = multicast >> 32;
/* Only deal with supported flags */
changed_flags &= SUPPORTED_FIF_FLAGS;
@@ -2913,24 +2945,6 @@ static void ath5k_configure_filter(struc
if (*new_flags & FIF_ALLMULTI) {
mfilt[0] = ~0;
mfilt[1] = ~0;
- } else {
- for (i = 0; i < mc_count; i++) {
- if (!mclist)
- break;
- /* calculate XOR of eight 6-bit values */
- val = get_unaligned_le32(mclist->dmi_addr + 0);
- pos = (val >> 18) ^ (val >> 12) ^ (val >> 6) ^ val;
- val = get_unaligned_le32(mclist->dmi_addr + 3);
- pos ^= (val >> 18) ^ (val >> 12) ^ (val >> 6) ^ val;
- pos &= 0x3f;
- mfilt[pos / 32] |= (1 << (pos % 32));
- /* XXX: we might be able to just do this instead,
- * but not sure, needs testing, if we do use this we'd
- * neet to inform below to not reset the mcast */
- /* ath5k_hw_set_mcast_filterindex(ah,
- * mclist->dmi_addr[5]); */
- mclist = mclist->next;
- }
}
/* This is the best we can do */
--- wireless-testing.orig/drivers/net/wireless/ath/ath9k/main.c 2009-08-17 15:12:59.000000000 +0200
+++ wireless-testing/drivers/net/wireless/ath/ath9k/main.c 2009-08-17 15:13:18.000000000 +0200
@@ -2389,8 +2389,7 @@ skip_chan_change:
static void ath9k_configure_filter(struct ieee80211_hw *hw,
unsigned int changed_flags,
unsigned int *total_flags,
- int mc_count,
- struct dev_mc_list *mclist)
+ u64 multicast)
{
struct ath_wiphy *aphy = hw->priv;
struct ath_softc *sc = aphy->sc;
--- wireless-testing.orig/drivers/net/wireless/libertas_tf/main.c 2009-08-17 15:12:59.000000000 +0200
+++ wireless-testing/drivers/net/wireless/libertas_tf/main.c 2009-08-17 15:13:18.000000000 +0200
@@ -366,15 +366,35 @@ static int lbtf_op_config(struct ieee802
return 0;
}
+static u64 lbtf_op_prepare_multicast(struct ieee80211_hw *hw,
+ int mc_count, struct dev_addr_list *mclist)
+{
+ struct lbtf_private *priv = hw->priv;
+ int i;
+
+ if (!mc_count || mc_count > MRVDRV_MAX_MULTICAST_LIST_SIZE)
+ return mc_count;
+
+ priv->nr_of_multicastmacaddr = mc_count;
+ for (i = 0; i < mc_count; i++) {
+ if (!mclist)
+ break;
+ memcpy(&priv->multicastlist[i], mclist->da_addr,
+ ETH_ALEN);
+ mclist = mclist->next;
+ }
+
+ return mc_count;
+}
+
#define SUPPORTED_FIF_FLAGS (FIF_PROMISC_IN_BSS | FIF_ALLMULTI)
static void lbtf_op_configure_filter(struct ieee80211_hw *hw,
unsigned int changed_flags,
unsigned int *new_flags,
- int mc_count, struct dev_mc_list *mclist)
+ u64 multicast)
{
struct lbtf_private *priv = hw->priv;
int old_mac_control = priv->mac_control;
- int i;
changed_flags &= SUPPORTED_FIF_FLAGS;
*new_flags &= SUPPORTED_FIF_FLAGS;
@@ -386,20 +406,12 @@ static void lbtf_op_configure_filter(str
else
priv->mac_control &= ~CMD_ACT_MAC_PROMISCUOUS_ENABLE;
if (*new_flags & (FIF_ALLMULTI) ||
- mc_count > MRVDRV_MAX_MULTICAST_LIST_SIZE) {
+ multicast > MRVDRV_MAX_MULTICAST_LIST_SIZE) {
priv->mac_control |= CMD_ACT_MAC_ALL_MULTICAST_ENABLE;
priv->mac_control &= ~CMD_ACT_MAC_MULTICAST_ENABLE;
- } else if (mc_count) {
+ } else if (multicast) {
priv->mac_control |= CMD_ACT_MAC_MULTICAST_ENABLE;
priv->mac_control &= ~CMD_ACT_MAC_ALL_MULTICAST_ENABLE;
- priv->nr_of_multicastmacaddr = mc_count;
- for (i = 0; i < mc_count; i++) {
- if (!mclist)
- break;
- memcpy(&priv->multicastlist[i], mclist->da_addr,
- ETH_ALEN);
- mclist = mclist->next;
- }
lbtf_cmd_set_mac_multicast_addr(priv);
} else {
priv->mac_control &= ~(CMD_ACT_MAC_MULTICAST_ENABLE |
@@ -461,6 +473,7 @@ static const struct ieee80211_ops lbtf_o
.add_interface = lbtf_op_add_interface,
.remove_interface = lbtf_op_remove_interface,
.config = lbtf_op_config,
+ .prepare_multicast = lbtf_op_prepare_multicast,
.configure_filter = lbtf_op_configure_filter,
.bss_info_changed = lbtf_op_bss_info_changed,
};
--- wireless-testing.orig/drivers/net/wireless/p54/main.c 2009-08-17 15:12:59.000000000 +0200
+++ wireless-testing/drivers/net/wireless/p54/main.c 2009-08-17 15:13:18.000000000 +0200
@@ -302,7 +302,7 @@ out:
static void p54_configure_filter(struct ieee80211_hw *dev,
unsigned int changed_flags,
unsigned int *total_flags,
- int mc_count, struct dev_mc_list *mclist)
+ u64 multicast)
{
struct p54_common *priv = dev->priv;
--- wireless-testing.orig/drivers/net/wireless/zd1211rw/zd_mac.c 2009-08-17 15:12:59.000000000 +0200
+++ wireless-testing/drivers/net/wireless/zd1211rw/zd_mac.c 2009-08-17 15:13:18.000000000 +0200
@@ -796,18 +796,40 @@ static void set_rx_filter_handler(struct
dev_err(zd_mac_dev(mac), "set_rx_filter_handler error %d\n", r);
}
+static u64 zd_op_prepare_multicast(struct ieee80211_hw *hw,
+ int mc_count, struct dev_addr_list *mclist)
+{
+ struct zd_mac *mac = zd_hw_mac(hw);
+ struct zd_mc_hash hash;
+ int i;
+
+ zd_mc_clear(&hash);
+
+ for (i = 0; i < mc_count; i++) {
+ if (!mclist)
+ break;
+ dev_dbg_f(zd_mac_dev(mac), "mc addr %pM\n", mclist->dmi_addr);
+ zd_mc_add_addr(&hash, mclist->dmi_addr);
+ mclist = mclist->next;
+ }
+
+ return hash.low | ((u64)hash.high << 32);
+}
+
#define SUPPORTED_FIF_FLAGS \
(FIF_PROMISC_IN_BSS | FIF_ALLMULTI | FIF_FCSFAIL | FIF_CONTROL | \
FIF_OTHER_BSS | FIF_BCN_PRBRESP_PROMISC)
static void zd_op_configure_filter(struct ieee80211_hw *hw,
unsigned int changed_flags,
unsigned int *new_flags,
- int mc_count, struct dev_mc_list *mclist)
+ u64 multicast)
{
- struct zd_mc_hash hash;
+ struct zd_mc_hash hash = {
+ .low = multicast,
+ .high = multicast >> 32,
+ };
struct zd_mac *mac = zd_hw_mac(hw);
unsigned long flags;
- int i;
/* Only deal with supported flags */
changed_flags &= SUPPORTED_FIF_FLAGS;
@@ -819,25 +841,16 @@ static void zd_op_configure_filter(struc
if (!changed_flags)
return;
- if (*new_flags & (FIF_PROMISC_IN_BSS | FIF_ALLMULTI)) {
+ if (*new_flags & (FIF_PROMISC_IN_BSS | FIF_ALLMULTI))
zd_mc_add_all(&hash);
- } else {
- zd_mc_clear(&hash);
- for (i = 0; i < mc_count; i++) {
- if (!mclist)
- break;
- dev_dbg_f(zd_mac_dev(mac), "mc addr %pM\n",
- mclist->dmi_addr);
- zd_mc_add_addr(&hash, mclist->dmi_addr);
- mclist = mclist->next;
- }
- }
spin_lock_irqsave(&mac->lock, flags);
mac->pass_failed_fcs = !!(*new_flags & FIF_FCSFAIL);
mac->pass_ctrl = !!(*new_flags & FIF_CONTROL);
mac->multicast_hash = hash;
spin_unlock_irqrestore(&mac->lock, flags);
+
+ /* XXX: these can be called here now, can sleep now! */
queue_work(zd_workqueue, &mac->set_multicast_hash_work);
if (changed_flags & FIF_CONTROL)
@@ -940,6 +953,7 @@ static const struct ieee80211_ops zd_ops
.add_interface = zd_op_add_interface,
.remove_interface = zd_op_remove_interface,
.config = zd_op_config,
+ .prepare_multicast = zd_op_prepare_multicast,
.configure_filter = zd_op_configure_filter,
.bss_info_changed = zd_op_bss_info_changed,
.get_tsf = zd_op_get_tsf,
--- wireless-testing.orig/drivers/net/wireless/iwlwifi/iwl-core.c 2009-08-17 15:12:59.000000000 +0200
+++ wireless-testing/drivers/net/wireless/iwlwifi/iwl-core.c 2009-08-17 15:13:18.000000000 +0200
@@ -1513,7 +1513,7 @@ EXPORT_SYMBOL(iwl_irq_handle_error);
void iwl_configure_filter(struct ieee80211_hw *hw,
unsigned int changed_flags,
unsigned int *total_flags,
- int mc_count, struct dev_addr_list *mc_list)
+ u64 multicast)
{
struct iwl_priv *priv = hw->priv;
__le32 *filter_flags = &priv->staging_rxon.filter_flags;
--- wireless-testing.orig/drivers/net/wireless/iwlwifi/iwl-core.h 2009-08-17 15:12:58.000000000 +0200
+++ wireless-testing/drivers/net/wireless/iwlwifi/iwl-core.h 2009-08-17 15:13:18.000000000 +0200
@@ -277,8 +277,7 @@ int iwl_set_decrypted_flag(struct iwl_pr
void iwl_irq_handle_error(struct iwl_priv *priv);
void iwl_configure_filter(struct ieee80211_hw *hw,
unsigned int changed_flags,
- unsigned int *total_flags,
- int mc_count, struct dev_addr_list *mc_list);
+ unsigned int *total_flags, u64 multicast);
int iwl_hw_nic_init(struct iwl_priv *priv);
int iwl_setup_mac(struct iwl_priv *priv);
int iwl_set_hw_params(struct iwl_priv *priv);
--- wireless-testing.orig/drivers/net/wireless/rt2x00/rt2x00.h 2009-08-17 15:12:59.000000000 +0200
+++ wireless-testing/drivers/net/wireless/rt2x00/rt2x00.h 2009-08-17 15:13:18.000000000 +0200
@@ -978,7 +978,7 @@ int rt2x00mac_config(struct ieee80211_hw
void rt2x00mac_configure_filter(struct ieee80211_hw *hw,
unsigned int changed_flags,
unsigned int *total_flags,
- int mc_count, struct dev_addr_list *mc_list);
+ u64 multicast);
int rt2x00mac_set_tim(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
bool set);
#ifdef CONFIG_RT2X00_LIB_CRYPTO
--- wireless-testing.orig/drivers/net/wireless/rt2x00/rt2x00mac.c 2009-08-17 15:12:59.000000000 +0200
+++ wireless-testing/drivers/net/wireless/rt2x00/rt2x00mac.c 2009-08-17 15:13:18.000000000 +0200
@@ -379,7 +379,7 @@ EXPORT_SYMBOL_GPL(rt2x00mac_config);
void rt2x00mac_configure_filter(struct ieee80211_hw *hw,
unsigned int changed_flags,
unsigned int *total_flags,
- int mc_count, struct dev_addr_list *mc_list)
+ u64 multicast)
{
struct rt2x00_dev *rt2x00dev = hw->priv;
^ permalink raw reply
* Re: question about ieee80211_tx.c (fwd)
From: Gábor Stefanik @ 2009-08-17 11:50 UTC (permalink / raw)
To: Julia Lawall; +Cc: linux-wireless, gregkh
In-Reply-To: <Pine.LNX.4.64.0908171000500.20447@pc-004.diku.dk>
On Mon, Aug 17, 2009 at 10:03 AM, Julia Lawall<julia@diku.dk> wrote:
> The files ieee80211_tx.c in the directories
> drivers/staging/rtl8192su/ieee80211 and drivers/staging/rtl8192e/ieee80211
> both contain the following code in the function
> ieee80211_query_protectionmode:
>
> if (ieee->mode == IW_MODE_MASTER)
> goto NO_PROTECTION;
>
> Elsewhere in these files when there is a comparison against an IW_MODE
> value, the field that is compared is iw_mode. Should that be the case
> here as well?
>
> thanks,
> julia
I don't know; rtl8192su & rtl8192e use a modified version of the
libipw stack, rather than the mac80211 stack found behind non-staging
drivers.
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
--
Vista: [V]iruses, [I]ntruders, [S]pyware, [T]rojans and [A]dware. :-)
^ permalink raw reply
* Re: [RFT] Threaded IRQ handlers for b43
From: Michael Buesch @ 2009-08-17 11:48 UTC (permalink / raw)
To: bcm43xx-dev; +Cc: linux-wireless
In-Reply-To: <200908161539.57917.mb@bu3sch.de>
On Sunday 16 August 2009 15:39:57 Michael Buesch wrote:
> This request-for-test patch converts the b43 driver to use threaded
> interrupt handlers. This is needed to support b43 on SDIO. But it also
> simplifies the locking by removal of the wl->irq_lock spinlock.
>
> http://bu3sch.de/patches/wireless-testing/20090816-1535/patches/002-b43-threaded-irq-handler.patch
>
> A known regression is a new race between the interrupt handler and the
> beacon update handler. But as long as you don't run AP mode, it won't hurt.
> I'm working on a solution...
>
> Please test this patch whether it creates other regressions (performance and crashes).
>
> The patch also needs the following hack to the threaded IRQ code:
> http://bu3sch.de/patches/wireless-testing/20090816-1535/patches/001-hack-threaded-irqs.patch
>
This is the correct fix for the threaded IRQ code. Apply this instead of the hack:
http://bu3sch.de/patches/wireless-testing/20090817-1347/patches/001-fix-irq-thread-wakeup.patch
--
Greetings, Michael.
^ permalink raw reply
* Re: [PATCH] iw: fix output qualifier for unsigned values
From: Johannes Berg @ 2009-08-17 10:58 UTC (permalink / raw)
To: Arnd Hannemann; +Cc: linux-wireless@vger.kernel.org
In-Reply-To: <4A893520.1010901@nets.rwth-aachen.de>
[-- Attachment #1: Type: text/plain, Size: 253 bytes --]
On Mon, 2009-08-17 at 12:46 +0200, Arnd Hannemann wrote:
> Seems to be the output qualifier %d is used wrongly in some cases.
> This patch fixes that.
Applied, thanks, but please CC me in the future as explained in the
README file.
johannes
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 801 bytes --]
^ permalink raw reply
* [PATCH] iw: fix output qualifier for unsigned values
From: Arnd Hannemann @ 2009-08-17 10:46 UTC (permalink / raw)
To: linux-wireless@vger.kernel.org
[-- Attachment #1: Type: text/plain, Size: 353 bytes --]
Hi,
with 0.9.16 a "iw wlan0 station dump" gives the following output:
Station XX:XX:XX:XX:XX:XX (on wlan0)
inactive time: 4 ms
rx bytes: -1611945626
rx packets: 7643414
tx bytes: 1527923993
tx packets: 4829428
signal: -63 dBm
tx bitrate: 54.0 MBit/s
Seems to be the output qualifier %d is used wrongly in some cases.
This patch fixes that.
[-- Attachment #2: iw_use_unsigned.patch --]
[-- Type: text/x-patch, Size: 1198 bytes --]
Signed-off-by: Arnd Hannemann <hannemann@nets.rwth-aachen.de>
diff -Naur iw-0.9.16.orig/station.c iw-0.9.16/station.c
--- iw-0.9.16.orig/station.c 2009-08-16 16:03:36.000000000 +0200
+++ iw-0.9.16/station.c 2009-08-17 12:31:58.119502558 +0200
@@ -80,19 +80,19 @@
printf("Station %s (on %s)", mac_addr, dev);
if (sinfo[NL80211_STA_INFO_INACTIVE_TIME])
- printf("\n\tinactive time:\t%d ms",
+ printf("\n\tinactive time:\t%u ms",
nla_get_u32(sinfo[NL80211_STA_INFO_INACTIVE_TIME]));
if (sinfo[NL80211_STA_INFO_RX_BYTES])
- printf("\n\trx bytes:\t%d",
+ printf("\n\trx bytes:\t%u",
nla_get_u32(sinfo[NL80211_STA_INFO_RX_BYTES]));
if (sinfo[NL80211_STA_INFO_RX_PACKETS])
- printf("\n\trx packets:\t%d",
+ printf("\n\trx packets:\t%u",
nla_get_u32(sinfo[NL80211_STA_INFO_RX_PACKETS]));
if (sinfo[NL80211_STA_INFO_TX_BYTES])
- printf("\n\ttx bytes:\t%d",
+ printf("\n\ttx bytes:\t%u",
nla_get_u32(sinfo[NL80211_STA_INFO_TX_BYTES]));
if (sinfo[NL80211_STA_INFO_TX_PACKETS])
- printf("\n\ttx packets:\t%d",
+ printf("\n\ttx packets:\t%u",
nla_get_u32(sinfo[NL80211_STA_INFO_TX_PACKETS]));
if (sinfo[NL80211_STA_INFO_SIGNAL])
printf("\n\tsignal: \t%d dBm",
^ permalink raw reply
* Re: [ANN] iw: v0.9.16
From: Johannes Berg @ 2009-08-17 10:39 UTC (permalink / raw)
To: drago01; +Cc: linux-wireless
In-Reply-To: <f6ca9fed0908170336u50df5a48v80fa34549fc08e87@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 980 bytes --]
On Mon, 2009-08-17 at 12:36 +0200, drago01 wrote:
> On Mon, Aug 17, 2009 at 5:10 AM, <wireless@sipsolutions.net> wrote:
> >
> > A new release of iw (v0.9.16) is available at:
> >
> > http://wireless.kernel.org/download/iw/iw-0.9.16.tar.bz2
> >
> > SHA1 sum: e224b6698802498569854b475ae532d41ddbd719
> >
> > Here is the short log of the changes included in this
> > release:
>
> It is indeed very short ;)
Yeah, must be a bug in the script...
The real shortlog would have been
0.9.16
Revert "magically set interface up for connect/join"
mark a key default if none is marked manually
add iw commands for setting fragmentation and rts threshold
iw: fix typos in MCS set parsing code
print out wmm aifsn
some wmm parameter improvements
fix typo
fix bug parsing ACI
show WMM parameters
iw: add beacon hint event parsing
add warning about screenscraping
add missing newline
add link command
magically set interface up for connect/join
johannes
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 801 bytes --]
^ permalink raw reply
* Re: [ANN] iw: v0.9.16
From: drago01 @ 2009-08-17 10:36 UTC (permalink / raw)
To: linux-wireless
In-Reply-To: <E1McscB-0004xM-M5@sipsolutions.net>
On Mon, Aug 17, 2009 at 5:10 AM, <wireless@sipsolutions.net> wrote:
>
> A new release of iw (v0.9.16) is available at:
>
> http://wireless.kernel.org/download/iw/iw-0.9.16.tar.bz2
>
> SHA1 sum: e224b6698802498569854b475ae532d41ddbd719
>
> Here is the short log of the changes included in this
> release:
It is indeed very short ;)
^ permalink raw reply
* [PATCH v2] cfg80211: fix deadlock
From: Johannes Berg @ 2009-08-17 10:25 UTC (permalink / raw)
To: John Linville; +Cc: linux-wireless, Christian Lamparter
In-Reply-To: <1250422358.17522.0.camel@johannes.local>
When removing an interface with nl80211, cfg80211 will
deadlock in the netdev notifier because we're already
holding rdev->mtx and try to acquire it again to verify
the scan has been done.
This bug was introduced by my patch
"cfg80211: check for and abort dangling scan requests".
To fix this, move the dangling scan request check into
wiphy_unregister(). This will not be able to catch all
cases right away, but if the scan problem happens with
a manual ifdown or so it will be possible to remedy it
by removing the module/device.
Additionally, add comments about the deadlock scenario.
Reported-by: Christian Lamparter <chunkeey@web.de>
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
---
v2: don't move flush_work under cfg80211_mutex locked section
net/wireless/core.c | 30 ++++++++++++++++++------------
1 file changed, 18 insertions(+), 12 deletions(-)
--- wireless-testing.orig/net/wireless/core.c 2009-08-16 13:35:51.000000000 +0200
+++ wireless-testing/net/wireless/core.c 2009-08-17 12:22:50.000000000 +0200
@@ -586,9 +586,14 @@ void wiphy_unregister(struct wiphy *wiph
* get to lock contention here if userspace issues a command
* that identified the hardware by wiphy index.
*/
- mutex_lock(&rdev->mtx);
- /* unlock again before freeing */
- mutex_unlock(&rdev->mtx);
+ cfg80211_lock_rdev(rdev);
+
+ if (WARN_ON(rdev->scan_req)) {
+ rdev->scan_req->aborted = true;
+ ___cfg80211_scan_done(rdev);
+ }
+
+ cfg80211_unlock_rdev(rdev);
cfg80211_debugfs_rdev_del(rdev);
@@ -605,7 +610,6 @@ void wiphy_unregister(struct wiphy *wiph
flush_work(&rdev->scan_done_wk);
cancel_work_sync(&rdev->conn_work);
- kfree(rdev->scan_req);
flush_work(&rdev->event_work);
}
EXPORT_SYMBOL(wiphy_unregister);
@@ -653,6 +657,11 @@ static int cfg80211_netdev_notifier_call
switch (state) {
case NETDEV_REGISTER:
+ /*
+ * NB: cannot take rdev->mtx here because this may be
+ * called within code protected by it when interfaces
+ * are added with nl80211.
+ */
mutex_init(&wdev->mtx);
INIT_LIST_HEAD(&wdev->event_list);
spin_lock_init(&wdev->event_lock);
@@ -730,13 +739,11 @@ static int cfg80211_netdev_notifier_call
#endif
break;
case NETDEV_UNREGISTER:
- cfg80211_lock_rdev(rdev);
-
- if (WARN_ON(rdev->scan_req && rdev->scan_req->dev == dev)) {
- rdev->scan_req->aborted = true;
- ___cfg80211_scan_done(rdev);
- }
-
+ /*
+ * NB: cannot take rdev->mtx here because this may be
+ * called within code protected by it when interfaces
+ * are removed with nl80211.
+ */
mutex_lock(&rdev->devlist_mtx);
/*
* It is possible to get NETDEV_UNREGISTER
@@ -755,7 +762,6 @@ static int cfg80211_netdev_notifier_call
#endif
}
mutex_unlock(&rdev->devlist_mtx);
- cfg80211_unlock_rdev(rdev);
break;
case NETDEV_PRE_UP:
if (!(wdev->wiphy->interface_modes & BIT(wdev->iftype)))
^ permalink raw reply
* Re: Multiple BSSID problem with hostapd
From: Christian Felsing @ 2009-08-17 10:25 UTC (permalink / raw)
To: linux-wireless
In-Reply-To: <20090817102354.GA19258@jm.kir.nu>
Works with development branch :-)
regards
Christian
Jouni Malinen schrieb:
> checking the current development branch (0.7.x) would be a good idea
> when advanced AP functionality is desired.
>
^ permalink raw reply
* Re: Multiple BSSID problem with hostapd
From: Jouni Malinen @ 2009-08-17 10:23 UTC (permalink / raw)
To: Christian Felsing; +Cc: linux-wireless
In-Reply-To: <4A75333D.9070100@taunusstein.net>
On Sun, Aug 02, 2009 at 08:33:33AM +0200, Christian Felsing wrote:
> After investigating source code following function caused my problem:
>
> static int i802_bss_add(void *priv, const char *ifname, const u8 *bssid)
> {
> int ifidx;
>
> /*
> * The kernel supports that when the low-level driver does,
> * but we currently don't because we need per-BSS data that
> * currently we can't handle easily.
> */
> return -1;
Some more investigation would show that this does not exist in the
hostapd development branch..
> Obviously hostapd does not support multiple SSIDs because that function
> returns always an error.
That is the case for hostapd 0.6.9. In any case, there are number of new
kernel features that may not be fully supported by the 0.6.x branch and
checking the current development branch (0.7.x) would be a good idea
when advanced AP functionality is desired.
--
Jouni Malinen PGP id EFC895FA
^ permalink raw reply
* [PATCH] cfg80211: report userspace SME connected event properly
From: Johannes Berg @ 2009-08-17 10:22 UTC (permalink / raw)
To: John Linville; +Cc: Zhu Yi, linux-wireless
Instead of hacking the event reporting into the
__cfg80211_connect_result() function which is also
invoked by others, set up things correctly and then
invoke that function, so that it can do more sanity
checking.
Also, it is currently not possible to get a ROAMED
event from the userspace SME anyway since we send
out a DISCONNECTED event when it disassociates and
then a new CONNECTED event on the next association.
Thanks to Zhu Yi for pointing out that the code is
somewhat convoluted and doesn't warn when it should.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
---
net/wireless/mlme.c | 9 +++++++++
net/wireless/sme.c | 22 ++++++----------------
2 files changed, 15 insertions(+), 16 deletions(-)
--- wireless-testing.orig/net/wireless/mlme.c 2009-08-17 11:48:13.000000000 +0200
+++ wireless-testing/net/wireless/mlme.c 2009-08-17 12:17:54.000000000 +0200
@@ -96,6 +96,15 @@ void cfg80211_send_rx_assoc(struct net_d
WARN_ON(!bss);
}
+ if (!wdev->conn && wdev->sme_state == CFG80211_SME_IDLE) {
+ /*
+ * This is for the userspace SME, the CONNECTING
+ * state will be changed to CONNECTED by
+ * __cfg80211_connect_result() below.
+ */
+ wdev->sme_state = CFG80211_SME_CONNECTING;
+ }
+
/* this consumes one bss reference (unless bss is NULL) */
__cfg80211_connect_result(dev, mgmt->bssid, NULL, 0, ie, len - ieoffs,
status_code,
--- wireless-testing.orig/net/wireless/sme.c 2009-08-17 11:46:44.000000000 +0200
+++ wireless-testing/net/wireless/sme.c 2009-08-17 11:48:04.000000000 +0200
@@ -351,15 +351,13 @@ void __cfg80211_connect_result(struct ne
if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION))
return;
- if (wdev->sme_state == CFG80211_SME_CONNECTED)
- nl80211_send_roamed(wiphy_to_dev(wdev->wiphy), dev,
+ if (WARN_ON(wdev->sme_state != CFG80211_SME_CONNECTING))
+ return;
+
+ nl80211_send_connect_result(wiphy_to_dev(wdev->wiphy), dev,
bssid, req_ie, req_ie_len,
- resp_ie, resp_ie_len, GFP_KERNEL);
- else
- nl80211_send_connect_result(wiphy_to_dev(wdev->wiphy), dev,
- bssid, req_ie, req_ie_len,
- resp_ie, resp_ie_len,
- status, GFP_KERNEL);
+ resp_ie, resp_ie_len,
+ status, GFP_KERNEL);
#ifdef CONFIG_WIRELESS_EXT
if (wextev) {
@@ -392,13 +390,6 @@ void __cfg80211_connect_result(struct ne
wdev->current_bss = NULL;
}
- if (status == WLAN_STATUS_SUCCESS &&
- wdev->sme_state == CFG80211_SME_IDLE)
- goto success;
-
- if (wdev->sme_state != CFG80211_SME_CONNECTING)
- return;
-
if (wdev->conn)
wdev->conn->state = CFG80211_CONN_IDLE;
@@ -412,7 +403,6 @@ void __cfg80211_connect_result(struct ne
return;
}
- success:
if (!bss)
bss = cfg80211_get_bss(wdev->wiphy, NULL, bssid,
wdev->ssid, wdev->ssid_len,
^ permalink raw reply
* question about ieee80211_tx.c (fwd)
From: Julia Lawall @ 2009-08-17 8:03 UTC (permalink / raw)
To: linux-wireless; +Cc: gregkh
The files ieee80211_tx.c in the directories
drivers/staging/rtl8192su/ieee80211 and drivers/staging/rtl8192e/ieee80211
both contain the following code in the function
ieee80211_query_protectionmode:
if (ieee->mode == IW_MODE_MASTER)
goto NO_PROTECTION;
Elsewhere in these files when there is a comparison against an IW_MODE
value, the field that is compared is iw_mode. Should that be the case
here as well?
thanks,
julia
^ permalink raw reply
* Re: [PATCH] cfg80211: set SME state machine correctly for roam event
From: Johannes Berg @ 2009-08-17 7:23 UTC (permalink / raw)
To: Zhu Yi; +Cc: linville@tuxdriver.com, linux-wireless@vger.kernel.org
In-Reply-To: <1250476527.9651.21.camel@debian>
[-- Attachment #1: Type: text/plain, Size: 1290 bytes --]
On Mon, 2009-08-17 at 10:35 +0800, Zhu Yi wrote:
> Yes, the iwmc3200wifi device sends special disconnect and reassoc events
> for roaming. But since we know we'll be reassociated shortly, we don't
> propagate this special disconnect event outside (to kernel SME and
> userspace). I agree we should use cfg80211_roamed() to indicate a real
> roam event. But sometimes the device reassociated to the same BSSID. Do
> you think the driver should simply ignore this event or still call
> cfg80211_connect_result() as well?
You probably can't just ignore it since it might require re-doing WPA
handshake, so I think I'd just send a "roamed to the same" event.
> Continue with the above case, in my current implementation, I call
> cfg80211_connect_result(). Then I find the SME enters a weird state
> (CFG80211_SME_CONNECTED while wdev->current_bss is NULL). So I think if
> we don't allow cfg80211_connect_result() to be called while
> CFG80211_SME_CONNECTED, let's put a big WARN_ON at the beginning of
> __cfg80211_connect_result(). The current code seems allow this case
> (i.e. send some roam event), thus I'm confused.
Ok, I'll take a look. There probably was a reason that's somewhat
related to the cfg80211 SME, but it must be possible to change.
johannes
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 801 bytes --]
^ permalink raw reply
* [PATCH V2] nl80211 connect API support
From: Zhu Yi @ 2009-08-17 6:04 UTC (permalink / raw)
To: j; +Cc: hostap, linux-wireless, Zhu Yi, Johannes Berg, Samuel Ortiz
nl80211 driver connect API support.
Cc: Johannes Berg <johannes@sipsolutions.net>
Cc: Samuel Ortiz <sameo@linux.intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
V2: Use auth/assoc as the default operations if they are supported.
diff --git a/src/common/ieee802_11_defs.h b/src/common/ieee802_11_defs.h
index b4c804e..e1bd487 100644
--- a/src/common/ieee802_11_defs.h
+++ b/src/common/ieee802_11_defs.h
@@ -679,4 +679,19 @@ enum {
#define VENDOR_HT_CAPAB_OUI_TYPE 0x33 /* 00-90-4c:0x33 */
+/* cipher suite selectors */
+#define WLAN_CIPHER_SUITE_USE_GROUP 0x000FAC00
+#define WLAN_CIPHER_SUITE_WEP40 0x000FAC01
+#define WLAN_CIPHER_SUITE_TKIP 0x000FAC02
+/* reserved: 0x000FAC03 */
+#define WLAN_CIPHER_SUITE_CCMP 0x000FAC04
+#define WLAN_CIPHER_SUITE_WEP104 0x000FAC05
+#define WLAN_CIPHER_SUITE_AES_CMAC 0x000FAC06
+
+/* AKM suite selectors */
+#define WLAN_AKM_SUITE_8021X 0x000FAC01
+#define WLAN_AKM_SUITE_PSK 0x000FAC02
+
+#define WLAN_MAX_KEY_LEN 32
+
#endif /* IEEE802_11_DEFS_H */
diff --git a/src/common/nl80211_copy.h b/src/common/nl80211_copy.h
index dbea93b..c019a16 100644
--- a/src/common/nl80211_copy.h
+++ b/src/common/nl80211_copy.h
@@ -310,6 +310,14 @@ enum nl80211_commands {
NL80211_CMD_JOIN_IBSS,
NL80211_CMD_LEAVE_IBSS,
+ NL80211_CMD_TESTMODE,
+
+ NL80211_CMD_CONNECT,
+ NL80211_CMD_ROAM,
+ NL80211_CMD_DISCONNECT,
+
+ NL80211_CMD_SET_WIPHY_NETNS,
+
/* add new commands above here */
/* used to define NL80211_CMD_MAX below */
@@ -619,6 +627,28 @@ enum nl80211_attrs {
NL80211_ATTR_CONTROL_PORT,
+ NL80211_ATTR_TESTDATA,
+
+ NL80211_ATTR_PRIVACY,
+
+ NL80211_ATTR_DISCONNECTED_BY_AP,
+ NL80211_ATTR_STATUS_CODE,
+
+ NL80211_ATTR_CIPHER_SUITES_PAIRWISE,
+ NL80211_ATTR_CIPHER_SUITE_GROUP,
+ NL80211_ATTR_WPA_VERSIONS,
+ NL80211_ATTR_AKM_SUITES,
+
+ NL80211_ATTR_REQ_IE,
+ NL80211_ATTR_RESP_IE,
+
+ NL80211_ATTR_PREV_BSSID,
+
+ NL80211_ATTR_KEY,
+ NL80211_ATTR_KEYS,
+
+ NL80211_ATTR_PID,
+
/* add attributes here, update the policy in nl80211.c */
__NL80211_ATTR_AFTER_LAST,
@@ -1224,4 +1254,39 @@ enum nl80211_mfp {
NL80211_MFP_REQUIRED,
};
+enum nl80211_wpa_versions {
+ NL80211_WPA_VERSION_1 = 1 << 0,
+ NL80211_WPA_VERSION_2 = 1 << 1,
+};
+
+/**
+ * enum nl80211_key_attributes - key attributes
+ * @__NL80211_KEY_INVALID: invalid
+ * @NL80211_KEY_DATA: (temporal) key data; for TKIP this consists of
+ * 16 bytes encryption key followed by 8 bytes each for TX and RX MIC
+ * keys
+ * @NL80211_KEY_IDX: key ID (u8, 0-3)
+ * @NL80211_KEY_CIPHER: key cipher suite (u32, as defined by IEEE 802.11
+ * section 7.3.2.25.1, e.g. 0x000FAC04)
+ * @NL80211_KEY_SEQ: transmit key sequence number (IV/PN) for TKIP and
+ * CCMP keys, each six bytes in little endian
+ * @NL80211_KEY_DEFAULT: flag indicating default key
+ * @NL80211_KEY_DEFAULT_MGMT: flag indicating default management key
+ * @__NL80211_KEY_AFTER_LAST: internal
+ * @NL80211_KEY_MAX: highest key attribute
+ */
+enum nl80211_key_attributes {
+ __NL80211_KEY_INVALID,
+ NL80211_KEY_DATA,
+ NL80211_KEY_IDX,
+ NL80211_KEY_CIPHER,
+ NL80211_KEY_SEQ,
+ NL80211_KEY_DEFAULT,
+ NL80211_KEY_DEFAULT_MGMT,
+
+ /* keep last */
+ __NL80211_KEY_AFTER_LAST,
+ NL80211_KEY_MAX = __NL80211_KEY_AFTER_LAST - 1
+};
+
#endif /* __LINUX_NL80211_H */
diff --git a/src/drivers/driver.h b/src/drivers/driver.h
index 2ae5b1a..fcb602b 100644
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
@@ -441,9 +441,11 @@ struct wpa_driver_capa {
#define WPA_DRIVER_FLAGS_WIRED 0x00000010
/* Driver provides separate commands for authentication and association (SME in
* wpa_supplicant). */
-#define WPA_DRIVER_FLAGS_SME 0x00000020
+#define WPA_DRIVER_FLAGS_SME_AUTH 0x00000020
/* Driver supports AP mode */
#define WPA_DRIVER_FLAGS_AP 0x00000040
+/* Driver supports connect API */
+#define WPA_DRIVER_FLAGS_SME_CONNECT 0x00000080
unsigned int flags;
int max_scan_ssids;
@@ -1333,6 +1335,21 @@ struct wpa_driver_ops {
* Returns: 0 on success, -1 on failure
*/
int (*set_supp_port)(void *priv, int authorized);
+
+ /**
+ * connect - Request driver to connect
+ * @priv: private driver interface data
+ * @params: connect parameters
+ * Returns: 0 on success, -1 on failure
+ *
+ * This is an optional function that can be used with drivers that
+ * support connect (both authentication and association) API. If
+ * driver SME is not supported (both connect and authenticate are
+ * not implemented), associate() function is expected to take care
+ * of IEEE 802.11 authentication and association, too.
+ */
+ int (*connect)(void *priv, struct wpa_driver_associate_params *params);
+ int (*disconnect)(void *priv, u8 *addr, int reason_code);
};
/**
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index 9b2bf7c..c032ddc 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -739,6 +739,40 @@ static void mlme_event_assoc(struct wpa_driver_nl80211_data *drv,
wpa_supplicant_event(drv->ctx, EVENT_ASSOC, &event);
}
+static void mlme_event_connect(struct wpa_driver_nl80211_data *drv,
+ enum nl80211_commands cmd, struct nlattr *status,
+ struct nlattr *addr, struct nlattr *req_ie,
+ struct nlattr *resp_ie)
+{
+ union wpa_event_data event;
+
+ os_memset(&event, 0, sizeof(event));
+ if (cmd == NL80211_CMD_CONNECT &&
+ nla_get_u16(status) != WLAN_STATUS_SUCCESS) {
+ if (resp_ie) {
+ event.assoc_reject.resp_ies = nla_data(resp_ie);
+ event.assoc_reject.resp_ies_len = nla_len(resp_ie);
+ }
+ event.assoc_reject.status_code = nla_get_u16(status);
+ wpa_supplicant_event(drv->ctx, EVENT_ASSOC_REJECT, &event);
+ return;
+ }
+
+ drv->associated = 1;
+ if (addr)
+ os_memcpy(drv->bssid, nla_data(addr), ETH_ALEN);
+
+ if (req_ie) {
+ event.assoc_info.req_ies = nla_data(req_ie);
+ event.assoc_info.req_ies_len = nla_len(req_ie);
+ }
+ if (resp_ie) {
+ event.assoc_info.resp_ies = nla_data(resp_ie);
+ event.assoc_info.resp_ies_len = nla_len(resp_ie);
+ }
+
+ wpa_supplicant_event(drv->ctx, EVENT_ASSOC, &event);
+}
static void mlme_timeout_event(struct wpa_driver_nl80211_data *drv,
enum nl80211_commands cmd, struct nlattr *addr)
@@ -895,6 +929,17 @@ static int process_event(struct nl_msg *msg, void *arg)
mlme_event(drv, gnlh->cmd, tb[NL80211_ATTR_FRAME],
tb[NL80211_ATTR_MAC], tb[NL80211_ATTR_TIMED_OUT]);
break;
+ case NL80211_CMD_CONNECT:
+ case NL80211_CMD_ROAM:
+ mlme_event_connect(drv, gnlh->cmd, tb[NL80211_ATTR_STATUS_CODE],
+ tb[NL80211_ATTR_MAC],
+ tb[NL80211_ATTR_REQ_IE],
+ tb[NL80211_ATTR_RESP_IE]);
+ break;
+ case NL80211_CMD_DISCONNECT:
+ drv->associated = 0;
+ wpa_supplicant_event(drv->ctx, EVENT_DISASSOC, NULL);
+ break;
#endif /* HOSTAPD */
case NL80211_CMD_MICHAEL_MIC_FAILURE:
mlme_event_michael_mic_failure(drv, tb);
@@ -1003,6 +1048,8 @@ nla_put_failure:
struct wiphy_info_data {
int max_scan_ssids;
int ap_supported;
+ int auth_supported;
+ int connect_supported;
};
@@ -1031,6 +1078,19 @@ static int wiphy_info_handler(struct nl_msg *msg, void *arg)
}
}
+ if (tb[NL80211_ATTR_SUPPORTED_COMMANDS]) {
+ struct nlattr *nl_cmd;
+ int i;
+
+ nla_for_each_nested(nl_cmd,
+ tb[NL80211_ATTR_SUPPORTED_COMMANDS], i) {
+ if (nla_get_u32(nl_cmd) == NL80211_CMD_AUTHENTICATE)
+ info->auth_supported = 1;
+ if (nla_get_u32(nl_cmd) == NL80211_CMD_CONNECT)
+ info->connect_supported = 1;
+ }
+ }
+
return NL_SKIP;
}
@@ -1078,6 +1138,12 @@ static void wpa_driver_nl80211_capa(struct wpa_driver_nl80211_data *drv)
drv->capa.max_scan_ssids = info.max_scan_ssids;
if (info.ap_supported)
drv->capa.flags |= WPA_DRIVER_FLAGS_AP;
+
+ if (info.auth_supported)
+ drv->capa.flags |= WPA_DRIVER_FLAGS_SME_AUTH;
+
+ if (info.connect_supported)
+ drv->capa.flags |= WPA_DRIVER_FLAGS_SME_CONNECT;
}
#endif /* HOSTAPD */
@@ -1227,8 +1293,6 @@ static void * wpa_driver_nl80211_init(void *ctx, const char *ifname)
return NULL;
}
- drv->capa.flags |= WPA_DRIVER_FLAGS_SME;
-
drv->ioctl_sock = socket(PF_INET, SOCK_DGRAM, 0);
if (drv->ioctl_sock < 0) {
perror("socket(PF_INET,SOCK_DGRAM)");
@@ -1658,19 +1722,22 @@ static int nl_set_encr(int ifindex, struct wpa_driver_nl80211_data *drv,
case WPA_ALG_WEP:
if (key_len == 5)
NLA_PUT_U32(msg, NL80211_ATTR_KEY_CIPHER,
- 0x000FAC01);
+ WLAN_CIPHER_SUITE_WEP40);
else
NLA_PUT_U32(msg, NL80211_ATTR_KEY_CIPHER,
- 0x000FAC05);
+ WLAN_CIPHER_SUITE_WEP104);
break;
case WPA_ALG_TKIP:
- NLA_PUT_U32(msg, NL80211_ATTR_KEY_CIPHER, 0x000FAC02);
+ NLA_PUT_U32(msg, NL80211_ATTR_KEY_CIPHER,
+ WLAN_CIPHER_SUITE_TKIP);
break;
case WPA_ALG_CCMP:
- NLA_PUT_U32(msg, NL80211_ATTR_KEY_CIPHER, 0x000FAC04);
+ NLA_PUT_U32(msg, NL80211_ATTR_KEY_CIPHER,
+ WLAN_CIPHER_SUITE_CCMP);
break;
case WPA_ALG_IGTK:
- NLA_PUT_U32(msg, NL80211_ATTR_KEY_CIPHER, 0x000FAC06);
+ NLA_PUT_U32(msg, NL80211_ATTR_KEY_CIPHER,
+ WLAN_CIPHER_SUITE_AES_CMAC);
break;
default:
wpa_printf(MSG_ERROR, "%s: Unsupported encryption "
@@ -1737,6 +1804,60 @@ nla_put_failure:
#ifndef HOSTAPD
+static int nl80211_set_conn_keys(void *priv,
+ struct wpa_driver_associate_params *params,
+ struct nl_msg *msg)
+{
+ int i, privacy = 0;
+ struct nlattr *nl_keys, *nl_key;
+
+ for (i = 0; i < 4; i++) {
+ if (!params->wep_key[i])
+ continue;
+ privacy = 1;
+ break;
+ }
+ if (!privacy)
+ return 0;
+
+ NLA_PUT_FLAG(msg, NL80211_ATTR_PRIVACY);
+
+ nl_keys = nla_nest_start(msg, NL80211_ATTR_KEYS);
+ if (!nl_keys)
+ goto nla_put_failure;
+
+ for (i = 0; i < 4; i++) {
+ if (!params->wep_key[i])
+ continue;
+
+ nl_key = nla_nest_start(msg, i);
+ if (!nl_key)
+ goto nla_put_failure;
+
+ NLA_PUT(msg, NL80211_KEY_DATA, params->wep_key_len[i],
+ params->wep_key[i]);
+ if (params->wep_key_len[i] == 5)
+ NLA_PUT_U32(msg, NL80211_KEY_CIPHER,
+ WLAN_CIPHER_SUITE_WEP40);
+ else
+ NLA_PUT_U32(msg, NL80211_KEY_CIPHER,
+ WLAN_CIPHER_SUITE_WEP104);
+
+ NLA_PUT_U8(msg, NL80211_KEY_IDX, i);
+
+ if (i == params->wep_tx_keyidx)
+ NLA_PUT_FLAG(msg, NL80211_KEY_DEFAULT);
+
+ nla_nest_end(msg, nl_key);
+ }
+ nla_nest_end(msg, nl_keys);
+
+ return 0;
+
+nla_put_failure:
+ return -ENOBUFS;
+}
+
static int wpa_driver_nl80211_set_key(void *priv, wpa_alg alg,
const u8 *addr, int key_idx,
int set_tx, const u8 *seq,
@@ -1883,6 +2004,164 @@ nla_put_failure:
return ret;
}
+static int wpa_driver_nl80211_connect(
+ void *priv, struct wpa_driver_associate_params *params)
+{
+ struct wpa_driver_nl80211_data *drv = priv;
+ struct nl_msg *msg;
+ enum nl80211_auth_type type;
+ int ret = 0;
+
+ if (!(drv->capa.flags & WPA_DRIVER_FLAGS_SME_CONNECT))
+ return -EOPNOTSUPP;
+
+ msg = nlmsg_alloc();
+ if (!msg)
+ return -1;
+
+ wpa_printf(MSG_DEBUG, "nl80211: Connect (ifindex=%d)", drv->ifindex);
+ genlmsg_put(msg, 0, 0, genl_family_get_id(drv->nl80211), 0, 0,
+ NL80211_CMD_CONNECT, 0);
+
+ NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, drv->ifindex);
+ if (params->bssid) {
+ wpa_printf(MSG_DEBUG, " * bssid=" MACSTR,
+ MAC2STR(params->bssid));
+ NLA_PUT(msg, NL80211_ATTR_MAC, ETH_ALEN, params->bssid);
+ }
+ if (params->freq) {
+ wpa_printf(MSG_DEBUG, " * freq=%d", params->freq);
+ NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FREQ, params->freq);
+ }
+ if (params->ssid) {
+ wpa_hexdump_ascii(MSG_DEBUG, " * SSID",
+ params->ssid, params->ssid_len);
+ NLA_PUT(msg, NL80211_ATTR_SSID, params->ssid_len,
+ params->ssid);
+ if (params->ssid_len > sizeof(drv->ssid))
+ goto nla_put_failure;
+ os_memcpy(drv->ssid, params->ssid, params->ssid_len);
+ drv->ssid_len = params->ssid_len;
+ }
+ wpa_hexdump(MSG_DEBUG, " * IEs", params->wpa_ie, params->wpa_ie_len);
+ if (params->wpa_ie)
+ NLA_PUT(msg, NL80211_ATTR_IE, params->wpa_ie_len,
+ params->wpa_ie);
+
+ if (params->auth_alg & AUTH_ALG_OPEN_SYSTEM)
+ type = NL80211_AUTHTYPE_OPEN_SYSTEM;
+ else if (params->auth_alg & AUTH_ALG_SHARED_KEY)
+ type = NL80211_AUTHTYPE_SHARED_KEY;
+ else if (params->auth_alg & AUTH_ALG_LEAP)
+ type = NL80211_AUTHTYPE_NETWORK_EAP;
+ else if (params->auth_alg & AUTH_ALG_FT)
+ type = NL80211_AUTHTYPE_FT;
+ else
+ goto nla_put_failure;
+
+ wpa_printf(MSG_DEBUG, " * Auth Type %d", type);
+ NLA_PUT_U32(msg, NL80211_ATTR_AUTH_TYPE, type);
+
+ if (params->wpa_ie && params->wpa_ie_len) {
+ enum nl80211_wpa_versions ver;
+
+ if (params->wpa_ie[0] == WLAN_EID_RSN)
+ ver = NL80211_WPA_VERSION_2;
+ else
+ ver = NL80211_WPA_VERSION_1;
+
+ wpa_printf(MSG_DEBUG, " * WPA Version %d", ver);
+ NLA_PUT_U32(msg, NL80211_ATTR_WPA_VERSIONS, ver);
+ }
+
+ if (params->pairwise_suite != CIPHER_NONE) {
+ int cipher = IW_AUTH_CIPHER_NONE;
+
+ switch (params->pairwise_suite) {
+ case CIPHER_WEP40:
+ cipher = WLAN_CIPHER_SUITE_WEP40;
+ break;
+ case CIPHER_WEP104:
+ cipher = WLAN_CIPHER_SUITE_WEP104;
+ break;
+ case CIPHER_CCMP:
+ cipher = WLAN_CIPHER_SUITE_CCMP;
+ break;
+ case CIPHER_TKIP:
+ default:
+ cipher = WLAN_CIPHER_SUITE_TKIP;
+ break;
+ }
+ NLA_PUT_U32(msg, NL80211_ATTR_CIPHER_SUITES_PAIRWISE, cipher);
+ }
+
+ if (params->group_suite != CIPHER_NONE) {
+ int cipher = IW_AUTH_CIPHER_NONE;
+
+ switch (params->group_suite) {
+ case CIPHER_WEP40:
+ cipher = WLAN_CIPHER_SUITE_WEP40;
+ break;
+ case CIPHER_WEP104:
+ cipher = WLAN_CIPHER_SUITE_WEP104;
+ break;
+ case CIPHER_CCMP:
+ cipher = WLAN_CIPHER_SUITE_CCMP;
+ break;
+ case CIPHER_TKIP:
+ default:
+ cipher = WLAN_CIPHER_SUITE_TKIP;
+ break;
+ }
+ NLA_PUT_U32(msg, NL80211_ATTR_CIPHER_SUITE_GROUP, cipher);
+ }
+
+ if (params->key_mgmt_suite == KEY_MGMT_802_1X ||
+ params->key_mgmt_suite == KEY_MGMT_PSK) {
+ int mgmt = WLAN_AKM_SUITE_PSK;
+
+ switch (params->key_mgmt_suite) {
+ case KEY_MGMT_802_1X:
+ mgmt = WLAN_AKM_SUITE_8021X;
+ break;
+ case KEY_MGMT_PSK:
+ default:
+ mgmt = WLAN_AKM_SUITE_PSK;
+ break;
+ }
+ NLA_PUT_U32(msg, NL80211_ATTR_AKM_SUITES, mgmt);
+ }
+
+ ret = nl80211_set_conn_keys(drv, params, msg);
+ if (ret)
+ goto nla_put_failure;
+
+ ret = send_and_recv_msgs(drv, msg, NULL, NULL);
+ msg = NULL;
+ if (ret) {
+ wpa_printf(MSG_DEBUG, "nl80211: MLME connect failed: ret=%d "
+ "(%s)", ret, strerror(-ret));
+ goto nla_put_failure;
+ }
+ ret = 0;
+ wpa_printf(MSG_DEBUG, "nl80211: Connect request send successfully");
+
+nla_put_failure:
+ nlmsg_free(msg);
+ return ret;
+
+}
+
+static int wpa_driver_nl80211_disconnect(void *priv, u8 *addr, int reason_code)
+{
+ struct wpa_driver_nl80211_data *drv = priv;
+
+ wpa_printf(MSG_DEBUG, "%s", __func__);
+ drv->associated = 0;
+ return wpa_driver_nl80211_mlme(drv, addr, NL80211_CMD_DISCONNECT,
+ reason_code);
+}
+
#endif /* HOSTAPD */
@@ -4060,6 +4339,8 @@ const struct wpa_driver_ops wpa_driver_nl80211_ops = {
.get_capa = wpa_driver_nl80211_get_capa,
.set_operstate = wpa_driver_nl80211_set_operstate,
.set_supp_port = wpa_driver_nl80211_set_supp_port,
+ .connect = wpa_driver_nl80211_connect,
+ .disconnect = wpa_driver_nl80211_disconnect,
#endif /* HOSTAPD */
.set_country = wpa_driver_nl80211_set_country,
.set_mode = wpa_driver_nl80211_set_mode,
diff --git a/wpa_supplicant/driver_i.h b/wpa_supplicant/driver_i.h
index 4cb5372..e5a8ef4 100644
--- a/wpa_supplicant/driver_i.h
+++ b/wpa_supplicant/driver_i.h
@@ -448,4 +448,22 @@ static inline int wpa_drv_set_supp_port(struct wpa_supplicant *wpa_s,
return 0;
}
+static inline int wpa_drv_connect(struct wpa_supplicant *wpa_s,
+ struct wpa_driver_associate_params *params)
+{
+ if (wpa_s->driver->connect)
+ return wpa_s->driver->connect(wpa_s->drv_priv, params);
+
+ return -1;
+}
+
+static inline int wpa_drv_disconnect(struct wpa_supplicant *wpa_s, u8 *addr,
+ int reason_code)
+{
+ if (wpa_s->driver->disconnect)
+ return wpa_s->driver->disconnect(wpa_s->drv_priv, addr,
+ reason_code);
+ return -1;
+}
+
#endif /* DRIVER_I_H */
diff --git a/wpa_supplicant/sme.c b/wpa_supplicant/sme.c
index 0d729ef..426afd2 100644
--- a/wpa_supplicant/sme.c
+++ b/wpa_supplicant/sme.c
@@ -238,6 +238,175 @@ void sme_authenticate(struct wpa_supplicant *wpa_s,
*/
}
+void sme_connect(struct wpa_supplicant *wpa_s, struct wpa_scan_res *bss,
+ struct wpa_ssid *ssid)
+{
+ struct wpa_driver_associate_params params;
+ const u8 *ie;
+ int i;
+
+ if (bss == NULL) {
+ wpa_printf(MSG_ERROR, "SME: No scan result available for the "
+ "network");
+ return;
+ }
+
+ os_memset(¶ms, 0, sizeof(params));
+ wpa_s->reassociate = 0;
+
+ params.freq = bss->freq;
+ params.bssid = bss->bssid;
+ ie = wpa_scan_get_ie(bss, WLAN_EID_SSID);
+ if (ie == NULL) {
+ wpa_printf(MSG_ERROR, "SME: SSID not available for the BSS");
+ return;
+ }
+ params.ssid = ie + 2;
+ params.ssid_len = ie[1];
+
+ wpa_s->sme.freq = params.freq;
+ os_memcpy(wpa_s->sme.ssid, params.ssid, params.ssid_len);
+ wpa_s->sme.ssid_len = params.ssid_len;
+
+ params.auth_alg = AUTH_ALG_OPEN_SYSTEM;
+#ifdef IEEE8021X_EAPOL
+ if (ssid->key_mgmt & WPA_KEY_MGMT_IEEE8021X_NO_WPA) {
+ if (ssid->leap) {
+ if (ssid->non_leap == 0)
+ params.auth_alg = AUTH_ALG_LEAP;
+ else
+ params.auth_alg |= AUTH_ALG_LEAP;
+ }
+ }
+#endif /* IEEE8021X_EAPOL */
+ wpa_printf(MSG_DEBUG, "Automatic auth_alg selection: 0x%x",
+ params.auth_alg);
+ if (ssid->auth_alg) {
+ params.auth_alg = 0;
+ if (ssid->auth_alg & WPA_AUTH_ALG_OPEN)
+ params.auth_alg |= AUTH_ALG_OPEN_SYSTEM;
+ if (ssid->auth_alg & WPA_AUTH_ALG_SHARED)
+ params.auth_alg |= AUTH_ALG_SHARED_KEY;
+ if (ssid->auth_alg & WPA_AUTH_ALG_LEAP)
+ params.auth_alg |= AUTH_ALG_LEAP;
+ wpa_printf(MSG_DEBUG, "Overriding auth_alg selection: 0x%x",
+ params.auth_alg);
+ }
+
+ for (i = 0; i < NUM_WEP_KEYS; i++) {
+ if (ssid->wep_key_len[i])
+ params.wep_key[i] = ssid->wep_key[i];
+ params.wep_key_len[i] = ssid->wep_key_len[i];
+ }
+ params.wep_tx_keyidx = ssid->wep_tx_keyidx;
+
+ os_memset(wpa_s->bssid, 0, ETH_ALEN);
+ os_memcpy(wpa_s->pending_bssid, bss->bssid, ETH_ALEN);
+
+ if (bss && (wpa_scan_get_vendor_ie(bss, WPA_IE_VENDOR_TYPE) ||
+ wpa_scan_get_ie(bss, WLAN_EID_RSN)) &&
+ (ssid->key_mgmt & (WPA_KEY_MGMT_IEEE8021X | WPA_KEY_MGMT_PSK |
+ WPA_KEY_MGMT_FT_IEEE8021X |
+ WPA_KEY_MGMT_FT_PSK |
+ WPA_KEY_MGMT_IEEE8021X_SHA256 |
+ WPA_KEY_MGMT_PSK_SHA256))) {
+ int try_opportunistic;
+ try_opportunistic = ssid->proactive_key_caching &&
+ (ssid->proto & WPA_PROTO_RSN);
+ if (pmksa_cache_set_current(wpa_s->wpa, NULL, bss->bssid,
+ wpa_s->current_ssid,
+ try_opportunistic) == 0)
+ eapol_sm_notify_pmkid_attempt(wpa_s->eapol, 1);
+ wpa_s->sme.assoc_req_ie_len = sizeof(wpa_s->sme.assoc_req_ie);
+ if (wpa_supplicant_set_suites(wpa_s, bss, ssid,
+ wpa_s->sme.assoc_req_ie,
+ &wpa_s->sme.assoc_req_ie_len)) {
+ wpa_printf(MSG_WARNING, "SME: Failed to set WPA key "
+ "management and encryption suites");
+ return;
+ }
+ } else if (ssid->key_mgmt &
+ (WPA_KEY_MGMT_PSK | WPA_KEY_MGMT_IEEE8021X |
+ WPA_KEY_MGMT_WPA_NONE | WPA_KEY_MGMT_FT_PSK |
+ WPA_KEY_MGMT_FT_IEEE8021X | WPA_KEY_MGMT_PSK_SHA256 |
+ WPA_KEY_MGMT_IEEE8021X_SHA256)) {
+ wpa_s->sme.assoc_req_ie_len = sizeof(wpa_s->sme.assoc_req_ie);
+ if (wpa_supplicant_set_suites(wpa_s, NULL, ssid,
+ wpa_s->sme.assoc_req_ie,
+ &wpa_s->sme.assoc_req_ie_len)) {
+ wpa_printf(MSG_WARNING, "SME: Failed to set WPA key "
+ "management and encryption suites (no scan "
+ "results)");
+ return;
+ }
+#ifdef CONFIG_WPS
+ } else if (ssid->key_mgmt & WPA_KEY_MGMT_WPS) {
+ struct wpabuf *wps_ie;
+ wps_ie = wps_build_assoc_req_ie(wpas_wps_get_req_type(ssid));
+ if (wps_ie && wpabuf_len(wps_ie) <=
+ sizeof(wpa_s->sme.assoc_req_ie)) {
+ wpa_s->sme.assoc_req_ie_len = wpabuf_len(wps_ie);
+ os_memcpy(wpa_s->sme.assoc_req_ie, wpabuf_head(wps_ie),
+ wpa_s->sme.assoc_req_ie_len);
+ } else
+ wpa_s->sme.assoc_req_ie_len = 0;
+ wpabuf_free(wps_ie);
+ wpa_supplicant_set_non_wpa_policy(wpa_s, ssid);
+#endif /* CONFIG_WPS */
+ } else {
+ wpa_supplicant_set_non_wpa_policy(wpa_s, ssid);
+ wpa_s->sme.assoc_req_ie_len = 0;
+ }
+
+#ifdef CONFIG_IEEE80211W
+ switch (ssid->ieee80211w) {
+ case NO_IEEE80211W:
+ wpa_s->sme.mfp = NO_MGMT_FRAME_PROTECTION;
+ break;
+ case IEEE80211W_OPTIONAL:
+ wpa_s->sme.mfp = MGMT_FRAME_PROTECTION_OPTIONAL;
+ break;
+ case IEEE80211W_REQUIRED:
+ wpa_s->sme.mfp = MGMT_FRAME_PROTECTION_REQUIRED;
+ break;
+ }
+ if (ssid->ieee80211w != NO_IEEE80211W && bss) {
+ const u8 *rsn = wpa_scan_get_ie(bss, WLAN_EID_RSN);
+ struct wpa_ie_data _ie;
+ if (rsn && wpa_parse_wpa_ie(rsn, 2 + rsn[1], &_ie) == 0 &&
+ _ie.capabilities &
+ (WPA_CAPABILITY_MFPC | WPA_CAPABILITY_MFPR)) {
+ wpa_printf(MSG_DEBUG, "WPA: Selected AP supports MFP: "
+ "require MFP");
+ wpa_s->sme.mfp = MGMT_FRAME_PROTECTION_REQUIRED;
+ }
+ }
+#endif /* CONFIG_IEEE80211W */
+
+ wpa_supplicant_cancel_scan(wpa_s);
+
+ wpa_msg(wpa_s, MSG_INFO, "Trying to connect with " MACSTR
+ " (SSID='%s' freq=%d MHz)", MAC2STR(params.bssid),
+ wpa_ssid_txt(params.ssid, params.ssid_len), params.freq);
+
+ wpa_clear_keys(wpa_s, bss->bssid);
+ wpa_supplicant_set_state(wpa_s, WPA_ASSOCIATING);
+ wpa_s->current_ssid = ssid;
+ wpa_supplicant_rsn_supp_set_config(wpa_s, wpa_s->current_ssid);
+ wpa_supplicant_initiate_eapol(wpa_s);
+
+ params.key_mgmt_suite = key_mgmt2driver(wpa_s->key_mgmt);
+ params.wpa_ie = wpa_s->sme.assoc_req_ie;
+ params.wpa_ie_len = wpa_s->sme.assoc_req_ie_len;
+ params.pairwise_suite = cipher_suite2driver(wpa_s->pairwise_cipher);
+ params.group_suite = cipher_suite2driver(wpa_s->group_cipher);
+
+ if (wpa_drv_connect(wpa_s, ¶ms) < 0) {
+ wpa_msg(wpa_s, MSG_INFO, "Connect to the driver failed");
+ return;
+ }
+}
+
void sme_event_auth(struct wpa_supplicant *wpa_s, union wpa_event_data *data)
{
diff --git a/wpa_supplicant/sme.h b/wpa_supplicant/sme.h
index 2780041..fd5ea9c 100644
--- a/wpa_supplicant/sme.h
+++ b/wpa_supplicant/sme.h
@@ -19,6 +19,8 @@
void sme_authenticate(struct wpa_supplicant *wpa_s,
struct wpa_scan_res *bss, struct wpa_ssid *ssid);
+void sme_connect(struct wpa_supplicant *wpa_s, struct wpa_scan_res *bss,
+ struct wpa_ssid *ssid);
void sme_event_auth(struct wpa_supplicant *wpa_s, union wpa_event_data *data);
int sme_update_ft_ies(struct wpa_supplicant *wpa_s, const u8 *md,
const u8 *ies, size_t ies_len);
@@ -37,6 +39,12 @@ static inline void sme_authenticate(struct wpa_supplicant *wpa_s,
{
}
+static inline void sme_connect(struct wpa_supplicant *wpa_s,
+ struct wpa_scan_res *bss,
+ struct wpa_ssid *ssid)
+{
+}
+
static inline void sme_event_auth(struct wpa_supplicant *wpa_s,
union wpa_event_data *data)
{
diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
index f1f929a..4282b14 100644
--- a/wpa_supplicant/wpa_supplicant.c
+++ b/wpa_supplicant/wpa_supplicant.c
@@ -640,7 +640,7 @@ static void wpa_supplicant_reconfig(int sig, void *eloop_ctx,
}
-static wpa_cipher cipher_suite2driver(int cipher)
+wpa_cipher cipher_suite2driver(int cipher)
{
switch (cipher) {
case WPA_CIPHER_NONE:
@@ -658,7 +658,7 @@ static wpa_cipher cipher_suite2driver(int cipher)
}
-static wpa_key_mgmt key_mgmt2driver(int key_mgmt)
+wpa_key_mgmt key_mgmt2driver(int key_mgmt)
{
switch (key_mgmt) {
case WPA_KEY_MGMT_NONE:
@@ -965,11 +965,16 @@ void wpa_supplicant_associate(struct wpa_supplicant *wpa_s,
return;
}
- if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME) {
+ if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME_AUTH) {
sme_authenticate(wpa_s, bss, ssid);
return;
}
+ if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME_CONNECT) {
+ sme_connect(wpa_s, bss, ssid);
+ return;
+ }
+
wpa_s->reassociate = 0;
if (bss) {
#ifdef CONFIG_IEEE80211R
@@ -1303,9 +1308,12 @@ void wpa_supplicant_deauthenticate(struct wpa_supplicant *wpa_s,
if (!is_zero_ether_addr(wpa_s->bssid)) {
if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_USER_SPACE_MLME)
ieee80211_sta_deauthenticate(wpa_s, reason_code);
- else
+ else if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME_AUTH)
wpa_drv_deauthenticate(wpa_s, wpa_s->bssid,
reason_code);
+ else if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME_CONNECT)
+ wpa_drv_disconnect(wpa_s, wpa_s->bssid, reason_code);
+
addr = wpa_s->bssid;
}
wpa_clear_keys(wpa_s, addr);
diff --git a/wpa_supplicant/wpa_supplicant_i.h b/wpa_supplicant/wpa_supplicant_i.h
index 63984d8..13896d9 100644
--- a/wpa_supplicant/wpa_supplicant_i.h
+++ b/wpa_supplicant/wpa_supplicant_i.h
@@ -392,6 +392,8 @@ int wpa_supplicant_reload_configuration(struct wpa_supplicant *wpa_s);
const char * wpa_supplicant_state_txt(int state);
int wpa_supplicant_driver_init(struct wpa_supplicant *wpa_s);
+wpa_cipher cipher_suite2driver(int cipher);
+wpa_key_mgmt key_mgmt2driver(int key_mgmt);
int wpa_supplicant_set_suites(struct wpa_supplicant *wpa_s,
struct wpa_scan_res *bss,
struct wpa_ssid *ssid,
diff --git a/wpa_supplicant/wpas_glue.c b/wpa_supplicant/wpas_glue.c
index b1f8bf8..3cfcd32 100644
--- a/wpa_supplicant/wpas_glue.c
+++ b/wpa_supplicant/wpas_glue.c
@@ -478,7 +478,7 @@ static int wpa_supplicant_update_ft_ies(void *ctx, const u8 *md,
struct wpa_supplicant *wpa_s = ctx;
if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_USER_SPACE_MLME)
return ieee80211_sta_update_ft_ies(wpa_s, md, ies, ies_len);
- if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME)
+ if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME_AUTH)
return sme_update_ft_ies(wpa_s, md, ies, ies_len);
return wpa_drv_update_ft_ies(wpa_s, md, ies, ies_len);
}
^ permalink raw reply related
* [ANN] iw: v0.9.16
From: wireless @ 2009-08-17 3:10 UTC (permalink / raw)
To: linux-wireless
A new release of iw (v0.9.16) is available at:
http://wireless.kernel.org/download/iw/iw-0.9.16.tar.bz2
SHA1 sum: e224b6698802498569854b475ae532d41ddbd719
Here is the short log of the changes included in this
release:
Johannes Berg - 0.9.16
^ permalink raw reply
* Re: [PATCH] cfg80211: set SME state machine correctly for roam event
From: Zhu Yi @ 2009-08-17 2:35 UTC (permalink / raw)
To: Johannes Berg; +Cc: linville@tuxdriver.com, linux-wireless@vger.kernel.org
In-Reply-To: <1250261645.24924.22.camel@johannes.local>
On Fri, 2009-08-14 at 22:54 +0800, Johannes Berg wrote:
> On Fri, 2009-08-14 at 11:58 +0800, Zhu Yi wrote:
>
> > The device notifies both when it begins to roam and after the new
> > association is made. Yes, I think I missed the cfg80211_roamed call for
> > the real roam event. But there is still a reassociation path that the
> > above situation could happen (__cfg80211_connect_result is called while
> > in CFG80211_SME_CONNECTED state). Or do you think we should suppress
> > reassoc event from driver?
>
> Would that be after a disconnect event?
>
> I think that after a DISCONNECTED event the device should go to sleep
> completely and wait for userspace instructions. Otherwise we end up
> having a weird situation _again_ where userspace has no idea what the
> device is doing. I suppose if the device just keeps trying you just have
> to tell it to stop after a bit if it doesn't find a new connections.
>
> Otherwise, if you're roaming, you still get a disconnect/reassoc or
> something like that? Those together should form a ROAMED event.
Yes, the iwmc3200wifi device sends special disconnect and reassoc events
for roaming. But since we know we'll be reassociated shortly, we don't
propagate this special disconnect event outside (to kernel SME and
userspace). I agree we should use cfg80211_roamed() to indicate a real
roam event. But sometimes the device reassociated to the same BSSID. Do
you think the driver should simply ignore this event or still call
cfg80211_connect_result() as well?
> > Actually, the code in __cfg80211_connect_result() has already handled
> > the (wdev->sme_state == CFG80211_SME_CONNECTED) case. The problem is
> > wdev->current_bss is set to NULL but leaves wdev->sme_state still as
> > CFG80211_SME_CONNECTED. So I think the patch is still valid, but needs a
> > better description.
>
> I don't think I understand?
>
> Why would you ever have a connect_result() while already connected?
Continue with the above case, in my current implementation, I call
cfg80211_connect_result(). Then I find the SME enters a weird state
(CFG80211_SME_CONNECTED while wdev->current_bss is NULL). So I think if
we don't allow cfg80211_connect_result() to be called while
CFG80211_SME_CONNECTED, let's put a big WARN_ON at the beginning of
__cfg80211_connect_result(). The current code seems allow this case
(i.e. send some roam event), thus I'm confused.
Thanks,
-yi
^ permalink raw reply
* Need rc6 posted to orbit-lab
From: Philip A. Prindeville @ 2009-08-16 21:13 UTC (permalink / raw)
To: Luis R. Rodriguez; +Cc: wireless
Can you please send out an announcement when rc6 hits orbit-lab?
Thanks.
^ permalink raw reply
* Re: [PATCH v2] b43: LP-PHY: Remove BROKEN from B43_PHY_LP
From: Michael Buesch @ 2009-08-16 18:28 UTC (permalink / raw)
To: Gábor Stefanik
Cc: John Linville, Larry Finger, Mark Huijgen, Broadcom Wireless,
linux-wireless
In-Reply-To: <4A884E71.6070202@gmail.com>
On Sunday 16 August 2009 20:22:41 Gábor Stefanik wrote:
> Larry has reported success getting scan data with an LP-PHY device,
> so it's probably time to release LP-PHY support for testing.
>
> Also disable 802.11a support for now, as 802.11a currently causes
> the driver to panic on startup (NULL pointer dereference).
>
> Signed-off-by: Gábor Stefanik <netrolller.3d@gmail.com>
ack
> ---
> V2:
> -Remove "VERY" from the warning in the symbol name.
> -Remove list of known devices.
> -Don't create a separate symbol for 5GHz, just disable it in the code.
>
> drivers/net/wireless/b43/Kconfig | 14 +++++++-------
> drivers/net/wireless/b43/main.c | 2 ++
> 2 files changed, 9 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/net/wireless/b43/Kconfig b/drivers/net/wireless/b43/Kconfig
> index 67f564e..237b1aa 100644
> --- a/drivers/net/wireless/b43/Kconfig
> +++ b/drivers/net/wireless/b43/Kconfig
> @@ -80,16 +80,16 @@ config B43_NPHY
> SAY N.
>
> config B43_PHY_LP
> - bool "IEEE 802.11g LP-PHY support (BROKEN)"
> - depends on B43 && EXPERIMENTAL && BROKEN
> + bool "Support for low-power (LP-PHY) devices (EXPERIMENTAL)"
> + depends on B43 && EXPERIMENTAL
> ---help---
> Support for the LP-PHY.
> - The LP-PHY is an IEEE 802.11g based PHY built into some notebooks
> - and embedded devices.
> -
> - THIS IS BROKEN AND DOES NOT WORK YET.
> + The LP-PHY is a low-power PHY built into some notebooks
> + and embedded devices. It supports 802.11a/g
> + (802.11a support is optional, and currently disabled).
>
> - SAY N.
> + This is heavily experimental, and probably will not work for you.
> + Say N unless you want to help debug the driver.
>
> # This config option automatically enables b43 LEDS support,
> # if it's possible.
> diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
> index 99b41ce..c5bece0 100644
> --- a/drivers/net/wireless/b43/main.c
> +++ b/drivers/net/wireless/b43/main.c
> @@ -4514,7 +4514,9 @@ static int b43_wireless_core_attach(struct b43_wldev *dev)
> have_5ghz_phy = 1;
> break;
> case B43_PHYTYPE_LP: //FIXME not always!
> +#if 0 //FIXME enabling 5GHz causes a NULL pointer dereference
> have_5ghz_phy = 1;
> +#endif
> case B43_PHYTYPE_G:
> case B43_PHYTYPE_N:
> have_2ghz_phy = 1;
--
Greetings, Michael.
^ permalink raw reply
* [PATCH v2] b43: LP-PHY: Remove BROKEN from B43_PHY_LP
From: Gábor Stefanik @ 2009-08-16 18:22 UTC (permalink / raw)
To: John Linville, Michael Buesch, Larry Finger
Cc: Mark Huijgen, Broadcom Wireless, linux-wireless
Larry has reported success getting scan data with an LP-PHY device,
so it's probably time to release LP-PHY support for testing.
Also disable 802.11a support for now, as 802.11a currently causes
the driver to panic on startup (NULL pointer dereference).
Signed-off-by: Gábor Stefanik <netrolller.3d@gmail.com>
---
V2:
-Remove "VERY" from the warning in the symbol name.
-Remove list of known devices.
-Don't create a separate symbol for 5GHz, just disable it in the code.
drivers/net/wireless/b43/Kconfig | 14 +++++++-------
drivers/net/wireless/b43/main.c | 2 ++
2 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/drivers/net/wireless/b43/Kconfig b/drivers/net/wireless/b43/Kconfig
index 67f564e..237b1aa 100644
--- a/drivers/net/wireless/b43/Kconfig
+++ b/drivers/net/wireless/b43/Kconfig
@@ -80,16 +80,16 @@ config B43_NPHY
SAY N.
config B43_PHY_LP
- bool "IEEE 802.11g LP-PHY support (BROKEN)"
- depends on B43 && EXPERIMENTAL && BROKEN
+ bool "Support for low-power (LP-PHY) devices (EXPERIMENTAL)"
+ depends on B43 && EXPERIMENTAL
---help---
Support for the LP-PHY.
- The LP-PHY is an IEEE 802.11g based PHY built into some notebooks
- and embedded devices.
-
- THIS IS BROKEN AND DOES NOT WORK YET.
+ The LP-PHY is a low-power PHY built into some notebooks
+ and embedded devices. It supports 802.11a/g
+ (802.11a support is optional, and currently disabled).
- SAY N.
+ This is heavily experimental, and probably will not work for you.
+ Say N unless you want to help debug the driver.
# This config option automatically enables b43 LEDS support,
# if it's possible.
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
index 99b41ce..c5bece0 100644
--- a/drivers/net/wireless/b43/main.c
+++ b/drivers/net/wireless/b43/main.c
@@ -4514,7 +4514,9 @@ static int b43_wireless_core_attach(struct b43_wldev *dev)
have_5ghz_phy = 1;
break;
case B43_PHYTYPE_LP: //FIXME not always!
+#if 0 //FIXME enabling 5GHz causes a NULL pointer dereference
have_5ghz_phy = 1;
+#endif
case B43_PHYTYPE_G:
case B43_PHYTYPE_N:
have_2ghz_phy = 1;
--
1.6.2.4
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox