aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorDmitry Shmidt <dimitrysh@google.com>2012-06-29 09:31:18 -0700
committerDmitry Shmidt <dimitrysh@google.com>2012-07-12 10:45:49 -0700
commitfa98f042f17bedb9f714193354cef67d3b253176 (patch)
tree93b86cc429ca79c2fb0eaaa4117db3c151ca655a /drivers/net
parent22baf5de1054939a81c2b35daa0663d96f06806b (diff)
downloadkernel_samsung_crespo-fa98f042f17bedb9f714193354cef67d3b253176.zip
kernel_samsung_crespo-fa98f042f17bedb9f714193354cef67d3b253176.tar.gz
kernel_samsung_crespo-fa98f042f17bedb9f714193354cef67d3b253176.tar.bz2
net: wireless: bcmdhd: Add mutex to wl_update_wiphybands()
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/wireless/bcmdhd/wl_cfg80211.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/drivers/net/wireless/bcmdhd/wl_cfg80211.c b/drivers/net/wireless/bcmdhd/wl_cfg80211.c
index 28c9241..121f3bb 100644
--- a/drivers/net/wireless/bcmdhd/wl_cfg80211.c
+++ b/drivers/net/wireless/bcmdhd/wl_cfg80211.c
@@ -7149,11 +7149,15 @@ s32 wl_update_wiphybands(struct wl_priv *wl)
int nmode = 0;
int bw_cap = 0;
int index = 0;
+ bool rollback_lock = false;
WL_DBG(("Entry"));
- if (wl == NULL)
+ if (wl == NULL) {
wl = wlcfg_drv_priv;
+ mutex_lock(&wl->usr_sync);
+ rollback_lock = true;
+ }
dev = wl_to_prmry_ndev(wl);
memset(bandlist, 0, sizeof(bandlist));
@@ -7161,7 +7165,7 @@ s32 wl_update_wiphybands(struct wl_priv *wl)
sizeof(bandlist), false);
if (unlikely(err)) {
WL_ERR(("error read bandlist (%d)\n", err));
- return err;
+ goto end_bands;
}
wiphy = wl_to_wiphy(wl);
nband = bandlist[0];
@@ -7183,7 +7187,7 @@ s32 wl_update_wiphybands(struct wl_priv *wl)
if (err) {
WL_ERR(("wl_construct_reginfo() fails err=%d\n", err));
if (err != BCME_UNSUPPORTED)
- return err;
+ goto end_bands;
/* Ignore error if "chanspecs" command is not supported */
err = 0;
}
@@ -7212,6 +7216,9 @@ s32 wl_update_wiphybands(struct wl_priv *wl)
}
wiphy_apply_custom_regulatory(wiphy, &brcm_regdom);
+end_bands:
+ if (rollback_lock)
+ mutex_unlock(&wl->usr_sync);
return err;
}