aboutsummaryrefslogtreecommitdiff
path: root/Documentation/zh_CN/HOWTO
diff options
context:
space:
mode:
authorEmil Goode <emilgoode@gmail.com>2014-03-09 21:06:51 +0100
committerShow Liu <show.liu@linaro.org>2014-06-18 12:04:49 +0800
commit6c9d250c2c09259c156e201bc14e32e2b926f60d (patch)
treec52b887256378183e1e8df9ee22d0914d1cb9cc7 /Documentation/zh_CN/HOWTO
parent147088eacaf4e72e9adb90d2dbe4b1e85e27f70b (diff)
brcmsmac: fix deadlock on missing firmware
commit 8fc1e8c240aab968db658b2d8d079b4391207a36 upstream. When brcm80211 firmware is not installed networking hangs. A deadlock happens because we call ieee80211_unregister_hw() from the .start callback of struct ieee80211_ops. When .start is called we are under rtnl lock and ieee80211_unregister_hw() tries to take it again. Function call stack: dev_change_flags() __dev_change_flags() __dev_open() ASSERT_RTNL() <-- Assert rtnl lock ops->ndo_open() .ndo_open = ieee80211_open, ieee80211_open() ieee80211_do_open() drv_start() local->ops->start() .start = brcms_ops_start, brcms_ops_start() brcms_remove() ieee80211_unregister_hw() rtnl_lock() <-- Here we deadlock Introduced by: commit 25b5632fb35ca61b8ae3eee235edcdc2883f7a5e ("brcmsmac: request firmware in .start() callback") This patch fixes the bug by removing the call to brcms_remove() and moves the brcms_request_fw() call to the top of the .start callback to not initiate anything unless firmware is installed. Signed-off-by: Emil Goode <emilgoode@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'Documentation/zh_CN/HOWTO')
0 files changed, 0 insertions, 0 deletions