summaryrefslogtreecommitdiff
path: root/net/wireless/core.h
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2023-08-28 14:59:32 +0300
committerJohannes Berg <johannes.berg@intel.com>2023-09-11 12:27:19 +0300
commit7483a2147aebea537e1447489109eeb5e771aff5 (patch)
tree8033518df6e55f2b38979bffd3e4bb3f61f6498e /net/wireless/core.h
parente911a8192e29d7326e9062947ecd753c8572eb09 (diff)
downloadlinux-7483a2147aebea537e1447489109eeb5e771aff5.tar.xz
wifi: cfg80211: check RTNL when iterating devices
Add a new "for_each_rdev()" macro and check that we hold the RTNL when calling it. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/wireless/core.h')
-rw-r--r--net/wireless/core.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/net/wireless/core.h b/net/wireless/core.h
index 507d184b8b40..d4976550e7f6 100644
--- a/net/wireless/core.h
+++ b/net/wireless/core.h
@@ -160,6 +160,16 @@ extern struct workqueue_struct *cfg80211_wq;
extern struct list_head cfg80211_rdev_list;
extern int cfg80211_rdev_list_generation;
+/* This is constructed like this so it can be used in if/else */
+static inline int for_each_rdev_check_rtnl(void)
+{
+ ASSERT_RTNL();
+ return 0;
+}
+#define for_each_rdev(rdev) \
+ if (for_each_rdev_check_rtnl()) {} else \
+ list_for_each_entry(rdev, &cfg80211_rdev_list, list)
+
struct cfg80211_internal_bss {
struct list_head list;
struct list_head hidden_list;