From: Ben Greear <greearb@xxxxxxxxxxxxxxx> Once per sdata is plenty, and possibly still too much. Signed-off-by: Ben Greear <greearb@xxxxxxxxxxxxxxx> --- net/mac80211/driver-ops.h | 17 ++++++++++++++--- net/mac80211/ieee80211_i.h | 2 ++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/net/mac80211/driver-ops.h b/net/mac80211/driver-ops.h index d8967cd461fe..e734a85165ad 100644 --- a/net/mac80211/driver-ops.h +++ b/net/mac80211/driver-ops.h @@ -14,9 +14,20 @@ static inline bool check_sdata_in_driver(struct ieee80211_sub_if_data *sdata) { - return !WARN(!(sdata->flags & IEEE80211_SDATA_IN_DRIVER), - "%s: Failed check-sdata-in-driver check, flags: 0x%x\n", - sdata->dev ? sdata->dev->name : sdata->name, sdata->flags); + if (unlikely(!(sdata->flags & IEEE80211_SDATA_IN_DRIVER))) { + if (!sdata->warned_sdata_in_driver) { + WARN(1, "%s: Failed check-sdata-in-driver check, flags: 0x%x\n", + sdata->dev ? sdata->dev->name : sdata->name, sdata->flags); + sdata->warned_sdata_in_driver = true; + } + else { + /* just print error instead of full WARN spam */ + sdata_err(sdata, "Failed check-sdata-in-driver check, flags: 0x%x\n", + sdata->flags); + } + return false; + } + return true; } static inline bool _check_sdata_in_driver(struct ieee80211_sub_if_data *sdata, diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h index 05406e9c05b3..5594ab80d9c1 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h @@ -932,6 +932,8 @@ struct ieee80211_sub_if_data { bool reserved_radar_required; bool reserved_ready; + bool warned_sdata_in_driver; + /* used to reconfigure hardware SM PS */ struct work_struct recalc_smps; -- 2.20.1