From ec7bdbaf4a9acccd2fbddb9109d84ec0f4447564 Mon Sep 17 00:00:00 2001 From: Johannes Berg Date: Wed, 4 Jul 2012 13:28:18 +0200 Subject: [PATCH] --- yaml --- r: 315210 b: refs/heads/master c: c5a7e582490c423f0685e42ee5cfb7c6de81adb0 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/net/wireless/core.c | 8 ++------ trunk/net/wireless/core.h | 4 +++- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index 1bf36547733f..705aa845a3b0 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a1845fc7c552977e23fe552ad3f5c6c279e3d550 +refs/heads/master: c5a7e582490c423f0685e42ee5cfb7c6de81adb0 diff --git a/trunk/net/wireless/core.c b/trunk/net/wireless/core.c index e13365f1fa63..eb60410ae588 100644 --- a/trunk/net/wireless/core.c +++ b/trunk/net/wireless/core.c @@ -766,7 +766,7 @@ void cfg80211_update_iface_num(struct cfg80211_registered_device *rdev, bool has_monitors_only_old = cfg80211_has_monitors_only(rdev); bool has_monitors_only_new; - ASSERT_RDEV_LOCK(rdev); + ASSERT_RTNL(); rdev->num_running_ifaces += num; if (iftype == NL80211_IFTYPE_MONITOR) @@ -888,10 +888,8 @@ static int cfg80211_netdev_notifier_call(struct notifier_block *nb, wdev->beacon_interval = 0; break; case NETDEV_DOWN: - dev_hold(dev); - cfg80211_lock_rdev(rdev); cfg80211_update_iface_num(rdev, wdev->iftype, -1); - cfg80211_unlock_rdev(rdev); + dev_hold(dev); queue_work(cfg80211_wq, &wdev->cleanup_work); break; case NETDEV_UP: @@ -1001,9 +999,7 @@ static int cfg80211_netdev_notifier_call(struct notifier_block *nb, mutex_unlock(&rdev->devlist_mtx); if (ret) return notifier_from_errno(ret); - cfg80211_lock_rdev(rdev); cfg80211_update_iface_num(rdev, wdev->iftype, 1); - cfg80211_unlock_rdev(rdev); break; } diff --git a/trunk/net/wireless/core.h b/trunk/net/wireless/core.h index 81fef3ddb5a8..377dc394f48c 100644 --- a/trunk/net/wireless/core.h +++ b/trunk/net/wireless/core.h @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include "reg.h" @@ -56,6 +57,7 @@ struct cfg80211_registered_device { u32 ap_beacons_nlpid; + /* protected by RTNL only */ int num_running_ifaces; int num_running_monitor_ifaces; @@ -205,7 +207,7 @@ static inline void wdev_unlock(struct wireless_dev *wdev) static inline bool cfg80211_has_monitors_only(struct cfg80211_registered_device *rdev) { - ASSERT_RDEV_LOCK(rdev); + ASSERT_RTNL(); return rdev->num_running_ifaces == rdev->num_running_monitor_ifaces && rdev->num_running_ifaces > 0;