| From dbdedbdf4fbff3d4962a0786f37aa86dfdc48a7e Mon Sep 17 00:00:00 2001 |
| From: Seth Forshee <seth.forshee@canonical.com> |
| Date: Wed, 25 Apr 2012 17:28:00 -0500 |
| Subject: b43: only reload config after successful initialization |
| |
| From: Seth Forshee <seth.forshee@canonical.com> |
| |
| commit dbdedbdf4fbff3d4962a0786f37aa86dfdc48a7e upstream. |
| |
| Commit 2a19032 (b43: reload phy and bss settings after core restarts) |
| introduced an unconditional call to b43_op_config() at the end of |
| b43_op_start(). When firmware fails to load this can wedge the system. |
| There's no need to reload the configuration after a failed |
| initialization anyway, so only make the call if initialization was |
| successful. |
| |
| BugLink: http://bugs.launchpad.net/bugs/950295 |
| Cc: Felix Fietkau <nbd@openwrt.org> |
| Signed-off-by: Seth Forshee <seth.forshee@canonical.com> |
| Signed-off-by: John W. Linville <linville@tuxdriver.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/net/wireless/b43/main.c | 10 ++++++++-- |
| 1 file changed, 8 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/net/wireless/b43/main.c |
| +++ b/drivers/net/wireless/b43/main.c |
| @@ -4841,8 +4841,14 @@ static int b43_op_start(struct ieee80211 |
| out_mutex_unlock: |
| mutex_unlock(&wl->mutex); |
| |
| - /* reload configuration */ |
| - b43_op_config(hw, ~0); |
| + /* |
| + * Configuration may have been overwritten during initialization. |
| + * Reload the configuration, but only if initialization was |
| + * successful. Reloading the configuration after a failed init |
| + * may hang the system. |
| + */ |
| + if (!err) |
| + b43_op_config(hw, ~0); |
| |
| return err; |
| } |