summaryrefslogtreecommitdiffstats
path: root/net/mac80211/trace.h
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2022-06-17 22:36:37 +0200
committerJohannes Berg <johannes.berg@intel.com>2022-07-15 11:43:14 +0200
commitd8675a63518c6148827838058feb7f18403faed1 (patch)
treefbdee52aa9f31da2b33ad5804cc4ea76a9a82a24 /net/mac80211/trace.h
parentwifi: nl80211: hold wdev mutex for station APIs (diff)
downloadlinux-d8675a63518c6148827838058feb7f18403faed1.tar.xz
linux-d8675a63518c6148827838058feb7f18403faed1.zip
wifi: mac80211: RCU-ify link/link_conf pointers
Since links can be added and removed dynamically, we need to somehow protect the sdata->link[] and vif->link_conf[] array pointers from disappearing when accessing them without locks. RCU-ify the pointers to achieve this, which requires quite a bit of rework. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/trace.h')
-rw-r--r--net/mac80211/trace.h19
1 files changed, 11 insertions, 8 deletions
diff --git a/net/mac80211/trace.h b/net/mac80211/trace.h
index f96e7cdca4c2..6aa06fba5b50 100644
--- a/net/mac80211/trace.h
+++ b/net/mac80211/trace.h
@@ -446,9 +446,10 @@ TRACE_EVENT(drv_vif_cfg_changed,
TRACE_EVENT(drv_link_info_changed,
TP_PROTO(struct ieee80211_local *local,
struct ieee80211_sub_if_data *sdata,
+ struct ieee80211_bss_conf *link_conf,
int link_id, u64 changed),
- TP_ARGS(local, sdata, link_id, changed),
+ TP_ARGS(local, sdata, link_conf, link_id, changed),
TP_STRUCT__entry(
LOCAL_ENTRY
@@ -481,8 +482,6 @@ TRACE_EVENT(drv_link_info_changed,
),
TP_fast_assign(
- struct ieee80211_bss_conf *link_conf = sdata->vif.link_conf[link_id];
-
LOCAL_ASSIGN;
VIF_ASSIGN;
__entry->changed = changed;
@@ -1752,10 +1751,9 @@ DEFINE_EVENT(local_sdata_chanctx, drv_unassign_vif_chanctx,
TRACE_EVENT(drv_start_ap,
TP_PROTO(struct ieee80211_local *local,
struct ieee80211_sub_if_data *sdata,
- struct ieee80211_bss_conf *info,
unsigned int link_id),
- TP_ARGS(local, sdata, info, link_id),
+ TP_ARGS(local, sdata, link_id),
TP_STRUCT__entry(
LOCAL_ENTRY
@@ -1768,15 +1766,20 @@ TRACE_EVENT(drv_start_ap,
),
TP_fast_assign(
+ struct ieee80211_bss_conf *info =
+ sdata_dereference(sdata->vif.link_conf[link_id], sdata);
+
LOCAL_ASSIGN;
VIF_ASSIGN;
__entry->link_id = link_id;
- __entry->dtimper = info->dtim_period;
- __entry->bcnint = info->beacon_int;
+ if (info) {
+ __entry->dtimper = info->dtim_period;
+ __entry->bcnint = info->beacon_int;
+ __entry->hidden_ssid = info->hidden_ssid;
+ }
memcpy(__get_dynamic_array(ssid),
sdata->vif.cfg.ssid,
sdata->vif.cfg.ssid_len);
- __entry->hidden_ssid = info->hidden_ssid;
),
TP_printk(