summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/bcmdhd/dhd_linux.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/net/wireless/bcmdhd/dhd_linux.c b/drivers/net/wireless/bcmdhd/dhd_linux.c
index a04c88f6524f..bd479acfc382 100644
--- a/drivers/net/wireless/bcmdhd/dhd_linux.c
+++ b/drivers/net/wireless/bcmdhd/dhd_linux.c
@@ -4392,17 +4392,23 @@ int net_os_send_hang_message(struct net_device *dev)
{
dhd_info_t *dhd = *(dhd_info_t **)netdev_priv(dev);
int ret = 0;
+ int need_unlock = 0;
if (dhd) {
if (!dhd->pub.hang_was_sent) {
dhd->pub.hang_was_sent = 1;
+ if (!rtnl_is_locked()) {
+ need_unlock = 1;
+ rtnl_lock();
+ }
+ dev_close(dev);
+ if (need_unlock)
+ rtnl_unlock();
#if defined(CONFIG_BCMDHD_WEXT)
ret = wl_iw_send_priv_event(dev, "HANG");
#endif
#if defined(WL_CFG80211)
ret = wl_cfg80211_hang(dev, WLAN_REASON_UNSPECIFIED);
- dev_close(dev);
- dev_open(dev);
#endif
}
}