Return-path: Received: from mail-ob0-f174.google.com ([209.85.214.174]:33412 "EHLO mail-ob0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758730Ab3BXRbu (ORCPT ); Sun, 24 Feb 2013 12:31:50 -0500 Message-ID: <512A4E83.5090901@lwfinger.net> (sfid-20130224_183218_530192_A4B69F12) Date: Sun, 24 Feb 2013 11:31:47 -0600 From: Larry Finger MIME-Version: 1.0 To: =?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?= , =?UTF-8?B?TWljaGE=?= =?UTF-8?B?ZWwgQsO8c2No?= CC: linux-wireless , b43-dev , LKML Subject: Lockdep splat when unloading b43 Content-Type: text/plain; charset=UTF-8; format=flowed Sender: linux-wireless-owner@vger.kernel.org List-ID: With the current wireless-testing tree, unloading b43 produces the lockdep log splat copied below. My understanding of locking is deficient, and I would like to learn. Any help on understanding this problem is appreciated. Larry [ 3093.900871] ====================================================== [ 3093.900873] [ INFO: possible circular locking dependency detected ] [ 3093.900876] 3.8.0-wl+ #117 Not tainted [ 3093.900878] ------------------------------------------------------- [ 3093.900880] modprobe/5557 is trying to acquire lock: [ 3093.900883] ((&wl->firmware_load)){+.+.+.}, at: [] flush_work+0x0/0x2a0 [ 3093.900895] [ 3093.900895] but task is already holding lock: [ 3093.900897] (rtnl_mutex){+.+.+.}, at: [] rtnl_lock+0x12/0x20 [ 3093.900905] [ 3093.900905] which lock already depends on the new lock. [ 3093.900905] [ 3093.900908] [ 3093.900908] the existing dependency chain (in reverse order) is: [ 3093.900911] [ 3093.900911] -> #1 (rtnl_mutex){+.+.+.}: [ 3093.900915] [] lock_acquire+0xa6/0x1e0 [ 3093.900922] [] mutex_lock_nested+0x69/0x370 [ 3093.900927] [] rtnl_lock+0x12/0x20 [ 3093.900931] [] wiphy_register+0x59c/0x6c0 [cfg80211] [ 3093.900965] [] ieee80211_register_hw+0x37b/0x820 [mac80211] [ 3093.901000] [] b43_request_firmware+0x8c/0x180 [b43] [ 3093.901014] [] process_one_work+0x19d/0x6f0 [ 3093.901019] [] worker_thread+0x155/0x400 [ 3093.901023] [] kthread+0xd6/0xe0 [ 3093.901028] [] ret_from_fork+0x7c/0xb0 [ 3093.901033] [ 3093.901033] -> #0 ((&wl->firmware_load)){+.+.+.}: [ 3093.901037] [] __lock_acquire+0x14ee/0x1d60 [ 3093.901041] [] lock_acquire+0xa6/0x1e0 [ 3093.901045] [] flush_work+0x38/0x2a0 [ 3093.901049] [] __cancel_work_timer+0x7b/0xd0 [ 3093.901053] [] cancel_work_sync+0xb/0x10 [ 3093.901057] [] b43_wireless_core_stop+0x75/0x250 [b43] [ 3093.901065] [] b43_op_stop+0x4c/0x90 [b43] [ 3093.901072] [] ieee80211_stop_device+0x67/0x290 [mac80211] [ 3093.901095] [] ieee80211_do_stop+0x4e9/0x9e0 [mac80211] [ 3093.901112] [] ieee80211_stop+0x15/0x20 [mac80211] [ 3093.901129] [] __dev_close_many+0x8d/0xd0 [ 3093.901134] [] dev_close_many+0x83/0xf0 [ 3093.901137] [] rollback_registered_many+0xbf/0x2c0 [ 3093.901140] [] unregister_netdevice_many+0x16/0x70 [ 3093.901144] [] ieee80211_remove_interfaces+0xe9/0x1a0 [mac80211] [ 3093.901161] [] ieee80211_unregister_hw+0x5a/0x110 [mac80211] [ 3093.901176] [] b43_ssb_remove+0x8a/0xd0 [b43] [ 3093.901184] [] ssb_device_remove+0x2b/0x40 [ssb] [ 3093.901192] [] __device_release_driver+0x61/0xd0 [ 3093.901198] [] driver_detach+0xc8/0xd0 [ 3093.901202] [] bus_remove_driver+0x88/0xe0 [ 3093.901206] [] driver_unregister+0x5a/0x90 [ 3093.901209] [] ssb_driver_unregister+0xd/0x10 [ssb] [ 3093.901215] [] b43_exit+0x10/0x37 [b43] [ 3093.901223] [] sys_delete_module+0x13a/0x290 [ 3093.901228] [] system_call_fastpath+0x16/0x1b [ 3093.901231] [ 3093.901231] other info that might help us debug this: [ 3093.901231] [ 3093.901235] Possible unsafe locking scenario: [ 3093.901235] [ 3093.901238] CPU0 CPU1 [ 3093.901239] ---- ---- [ 3093.901241] lock(rtnl_mutex); [ 3093.901244] lock((&wl->firmware_load)); [ 3093.901247] lock(rtnl_mutex); [ 3093.901250] lock((&wl->firmware_load)); [ 3093.901253] [ 3093.901253] *** DEADLOCK *** [ 3093.901253] [ 3093.901257] 3 locks held by modprobe/5557: [ 3093.901259] #0: (&__lockdep_no_validate__){......}, at: [] driver_detach+0x4c/0xd0 [ 3093.901266] #1: (&__lockdep_no_validate__){......}, at: [] driver_detach+0x5a/0xd0 [ 3093.901273] #2: (rtnl_mutex){+.+.+.}, at: [] rtnl_lock+0x12/0x20 [ 3093.901279] [ 3093.901279] stack backtrace: [ 3093.901283] Pid: 5557, comm: modprobe Not tainted 3.8.0-wl+ #117 [ 3093.901286] Call Trace: [ 3093.901291] [] print_circular_bug+0x28e/0x29f [ 3093.901295] [] __lock_acquire+0x14ee/0x1d60 [ 3093.901302] [] ? save_stack_trace+0x2a/0x50 [ 3093.901306] [] lock_acquire+0xa6/0x1e0 [ 3093.901311] [] ? work_cpu+0x20/0x20 [ 3093.901315] [] flush_work+0x38/0x2a0 [ 3093.901319] [] ? work_cpu+0x20/0x20 [ 3093.901323] [] ? mark_held_locks+0x8c/0x110 [ 3093.901329] [] ? del_timer+0x57/0x70 [ 3093.901334] [] ? __cancel_work_timer+0x68/0xd0 [ 3093.901338] [] ? trace_hardirqs_on_caller+0x105/0x190 [ 3093.901343] [] __cancel_work_timer+0x7b/0xd0 [ 3093.901347] [] cancel_work_sync+0xb/0x10 [ 3093.901355] [] b43_wireless_core_stop+0x75/0x250 [b43] [ 3093.901364] [] b43_op_stop+0x4c/0x90 [b43] [ 3093.901384] [] ieee80211_stop_device+0x67/0x290 [mac80211] [ 3093.901402] [] ieee80211_do_stop+0x4e9/0x9e0 [mac80211] [ 3093.901407] [] ? dev_deactivate_many+0x231/0x2f0 [ 3093.901425] [] ieee80211_stop+0x15/0x20 [mac80211] [ 3093.901429] [] __dev_close_many+0x8d/0xd0 [ 3093.901433] [] dev_close_many+0x83/0xf0 [ 3093.901437] [] rollback_registered_many+0xbf/0x2c0 [ 3093.901441] [] unregister_netdevice_many+0x16/0x70 [ 3093.901459] [] ieee80211_remove_interfaces+0xe9/0x1a0 [mac80211] [ 3093.901475] [] ieee80211_unregister_hw+0x5a/0x110 [mac80211] [ 3093.901484] [] b43_ssb_remove+0x8a/0xd0 [b43] [ 3093.901490] [] ssb_device_remove+0x2b/0x40 [ssb] [ 3093.901495] [] __device_release_driver+0x61/0xd0 [ 3093.901499] [] driver_detach+0xc8/0xd0 [ 3093.901504] [] bus_remove_driver+0x88/0xe0 [ 3093.901508] [] driver_unregister+0x5a/0x90 [ 3093.901515] [] ssb_driver_unregister+0xd/0x10 [ssb] [ 3093.901524] [] b43_exit+0x10/0x37 [b43] [ 3093.901528] [] sys_delete_module+0x13a/0x290 [ 3093.901532] [] ? trace_hardirqs_on_caller+0x105/0x190 [ 3093.901538] [] ? trace_hardirqs_on_thunk+0x3a/0x3f [ 3093.901542] [] system_call_fastpath+0x16/0x1b [ 3093.901685] b43-phy1 debug: Wireless interface stopped