diff options
Diffstat (limited to 'package/kernel/mac80211/patches/subsys/250-mac80211-populate-debugfs-only-after-cfg80211-init.patch')
-rw-r--r-- | package/kernel/mac80211/patches/subsys/250-mac80211-populate-debugfs-only-after-cfg80211-init.patch | 248 |
1 files changed, 0 insertions, 248 deletions
diff --git a/package/kernel/mac80211/patches/subsys/250-mac80211-populate-debugfs-only-after-cfg80211-init.patch b/package/kernel/mac80211/patches/subsys/250-mac80211-populate-debugfs-only-after-cfg80211-init.patch deleted file mode 100644 index efe216c530..0000000000 --- a/package/kernel/mac80211/patches/subsys/250-mac80211-populate-debugfs-only-after-cfg80211-init.patch +++ /dev/null @@ -1,248 +0,0 @@ -From 6cb5f3ea4654faf8c28b901266e960b1a4787b26 Mon Sep 17 00:00:00 2001 -From: Johannes Berg <johannes.berg@intel.com> -Date: Thu, 23 Apr 2020 11:13:49 +0200 -Subject: [PATCH] mac80211: populate debugfs only after cfg80211 init - -When fixing the initialization race, we neglected to account for -the fact that debugfs is initialized in wiphy_register(), and -some debugfs things went missing (or rather were rerooted to the -global debugfs root). - -Fix this by adding debugfs entries only after wiphy_register(). -This requires some changes in the rate control code since it -currently adds debugfs at alloc time, which can no longer be -done after the reordering. - -Reported-by: Jouni Malinen <j@w1.fi> -Reported-by: kernel test robot <rong.a.chen@intel.com> -Reported-by: Hauke Mehrtens <hauke@hauke-m.de> -Reported-by: Felix Fietkau <nbd@nbd.name> -Cc: stable@vger.kernel.org -Fixes: 52e04b4ce5d0 ("mac80211: fix race in ieee80211_register_hw()") -Signed-off-by: Johannes Berg <johannes.berg@intel.com> -Acked-by: Sumit Garg <sumit.garg@linaro.org> -Link: https://lore.kernel.org/r/20200423111344.0e00d3346f12.Iadc76a03a55093d94391fc672e996a458702875d@changeid -Signed-off-by: Johannes Berg <johannes.berg@intel.com> ---- - drivers/net/wireless/intel/iwlegacy/3945-rs.c | 2 +- - drivers/net/wireless/intel/iwlegacy/4965-rs.c | 2 +- - drivers/net/wireless/intel/iwlwifi/dvm/rs.c | 2 +- - drivers/net/wireless/intel/iwlwifi/mvm/rs.c | 2 +- - drivers/net/wireless/realtek/rtlwifi/rc.c | 2 +- - include/net/mac80211.h | 4 +++- - net/mac80211/main.c | 5 ++-- - net/mac80211/rate.c | 15 ++++-------- - net/mac80211/rate.h | 23 +++++++++++++++++++ - net/mac80211/rc80211_minstrel_ht.c | 19 ++++++++++----- - 10 files changed, 51 insertions(+), 25 deletions(-) - ---- a/drivers/net/wireless/intel/iwlegacy/3945-rs.c -+++ b/drivers/net/wireless/intel/iwlegacy/3945-rs.c -@@ -374,7 +374,7 @@ out: - } - - static void * --il3945_rs_alloc(struct ieee80211_hw *hw, struct dentry *debugfsdir) -+il3945_rs_alloc(struct ieee80211_hw *hw) - { - return hw->priv; - } ---- a/drivers/net/wireless/intel/iwlegacy/4965-rs.c -+++ b/drivers/net/wireless/intel/iwlegacy/4965-rs.c -@@ -2474,7 +2474,7 @@ il4965_rs_fill_link_cmd(struct il_priv * - } - - static void * --il4965_rs_alloc(struct ieee80211_hw *hw, struct dentry *debugfsdir) -+il4965_rs_alloc(struct ieee80211_hw *hw) - { - return hw->priv; - } ---- a/drivers/net/wireless/intel/iwlwifi/dvm/rs.c -+++ b/drivers/net/wireless/intel/iwlwifi/dvm/rs.c -@@ -3019,7 +3019,7 @@ static void rs_fill_link_cmd(struct iwl_ - cpu_to_le16(priv->lib->bt_params->agg_time_limit); - } - --static void *rs_alloc(struct ieee80211_hw *hw, struct dentry *debugfsdir) -+static void *rs_alloc(struct ieee80211_hw *hw) - { - return hw->priv; - } ---- a/drivers/net/wireless/intel/iwlwifi/mvm/rs.c -+++ b/drivers/net/wireless/intel/iwlwifi/mvm/rs.c -@@ -3665,7 +3665,7 @@ static void rs_fill_lq_cmd(struct iwl_mv - cpu_to_le16(iwl_mvm_coex_agg_time_limit(mvm, sta)); - } - --static void *rs_alloc(struct ieee80211_hw *hw, struct dentry *debugfsdir) -+static void *rs_alloc(struct ieee80211_hw *hw) - { - return hw->priv; - } ---- a/drivers/net/wireless/realtek/rtlwifi/rc.c -+++ b/drivers/net/wireless/realtek/rtlwifi/rc.c -@@ -261,7 +261,7 @@ static void rtl_rate_update(void *ppriv, - { - } - --static void *rtl_rate_alloc(struct ieee80211_hw *hw, struct dentry *debugfsdir) -+static void *rtl_rate_alloc(struct ieee80211_hw *hw) - { - struct rtl_priv *rtlpriv = rtl_priv(hw); - return rtlpriv; ---- a/include/net/mac80211.h -+++ b/include/net/mac80211.h -@@ -5969,7 +5969,9 @@ enum rate_control_capabilities { - struct rate_control_ops { - unsigned long capa; - const char *name; -- void *(*alloc)(struct ieee80211_hw *hw, struct dentry *debugfsdir); -+ void *(*alloc)(struct ieee80211_hw *hw); -+ void (*add_debugfs)(struct ieee80211_hw *hw, void *priv, -+ struct dentry *debugfsdir); - void (*free)(void *priv); - - void *(*alloc_sta)(void *priv, struct ieee80211_sta *sta, gfp_t gfp); ---- a/net/mac80211/main.c -+++ b/net/mac80211/main.c -@@ -1163,8 +1163,6 @@ int ieee80211_register_hw(struct ieee802 - local->tx_headroom = max_t(unsigned int , local->hw.extra_tx_headroom, - IEEE80211_TX_STATUS_HEADROOM); - -- debugfs_hw_add(local); -- - /* - * if the driver doesn't specify a max listen interval we - * use 5 which should be a safe default -@@ -1256,6 +1254,9 @@ int ieee80211_register_hw(struct ieee802 - if (result < 0) - goto fail_wiphy_register; - -+ debugfs_hw_add(local); -+ rate_control_add_debugfs(local); -+ - rtnl_lock(); - - /* add one default STA interface if supported */ ---- a/net/mac80211/rate.c -+++ b/net/mac80211/rate.c -@@ -214,17 +214,16 @@ static ssize_t rcname_read(struct file * - ref->ops->name, len); - } - --static const struct file_operations rcname_ops = { -+const struct file_operations rcname_ops = { - .read = rcname_read, - .open = simple_open, - .llseek = default_llseek, - }; - #endif - --static struct rate_control_ref *rate_control_alloc(const char *name, -- struct ieee80211_local *local) -+static struct rate_control_ref * -+rate_control_alloc(const char *name, struct ieee80211_local *local) - { -- struct dentry *debugfsdir = NULL; - struct rate_control_ref *ref; - - ref = kmalloc(sizeof(struct rate_control_ref), GFP_KERNEL); -@@ -234,13 +233,7 @@ static struct rate_control_ref *rate_con - if (!ref->ops) - goto free; - --#ifdef CPTCFG_MAC80211_DEBUGFS -- debugfsdir = debugfs_create_dir("rc", local->hw.wiphy->debugfsdir); -- local->debugfs.rcdir = debugfsdir; -- debugfs_create_file("name", 0400, debugfsdir, ref, &rcname_ops); --#endif -- -- ref->priv = ref->ops->alloc(&local->hw, debugfsdir); -+ ref->priv = ref->ops->alloc(&local->hw); - if (!ref->priv) - goto free; - return ref; ---- a/net/mac80211/rate.h -+++ b/net/mac80211/rate.h -@@ -60,6 +60,29 @@ static inline void rate_control_add_sta_ - #endif - } - -+extern const struct file_operations rcname_ops; -+ -+static inline void rate_control_add_debugfs(struct ieee80211_local *local) -+{ -+#ifdef CPTCFG_MAC80211_DEBUGFS -+ struct dentry *debugfsdir; -+ -+ if (!local->rate_ctrl) -+ return; -+ -+ if (!local->rate_ctrl->ops->add_debugfs) -+ return; -+ -+ debugfsdir = debugfs_create_dir("rc", local->hw.wiphy->debugfsdir); -+ local->debugfs.rcdir = debugfsdir; -+ debugfs_create_file("name", 0400, debugfsdir, -+ local->rate_ctrl, &rcname_ops); -+ -+ local->rate_ctrl->ops->add_debugfs(&local->hw, local->rate_ctrl->priv, -+ debugfsdir); -+#endif -+} -+ - void ieee80211_check_rate_mask(struct ieee80211_sub_if_data *sdata); - - /* Get a reference to the rate control algorithm. If `name' is NULL, get the ---- a/net/mac80211/rc80211_minstrel_ht.c -+++ b/net/mac80211/rc80211_minstrel_ht.c -@@ -1635,7 +1635,7 @@ minstrel_ht_init_cck_rates(struct minstr - } - - static void * --minstrel_ht_alloc(struct ieee80211_hw *hw, struct dentry *debugfsdir) -+minstrel_ht_alloc(struct ieee80211_hw *hw) - { - struct minstrel_priv *mp; - -@@ -1673,7 +1673,17 @@ minstrel_ht_alloc(struct ieee80211_hw *h - mp->update_interval = HZ / 10; - mp->new_avg = true; - -+ minstrel_ht_init_cck_rates(mp); -+ -+ return mp; -+} -+ - #ifdef CPTCFG_MAC80211_DEBUGFS -+static void minstrel_ht_add_debugfs(struct ieee80211_hw *hw, void *priv, -+ struct dentry *debugfsdir) -+{ -+ struct minstrel_priv *mp = priv; -+ - mp->fixed_rate_idx = (u32) -1; - debugfs_create_u32("fixed_rate_idx", S_IRUGO | S_IWUGO, debugfsdir, - &mp->fixed_rate_idx); -@@ -1681,12 +1691,8 @@ minstrel_ht_alloc(struct ieee80211_hw *h - &mp->sample_switch); - debugfs_create_bool("new_avg", S_IRUGO | S_IWUSR, debugfsdir, - &mp->new_avg); --#endif -- -- minstrel_ht_init_cck_rates(mp); -- -- return mp; - } -+#endif - - static void - minstrel_ht_free(void *priv) -@@ -1725,6 +1731,7 @@ static const struct rate_control_ops mac - .alloc = minstrel_ht_alloc, - .free = minstrel_ht_free, - #ifdef CPTCFG_MAC80211_DEBUGFS -+ .add_debugfs = minstrel_ht_add_debugfs, - .add_sta_debugfs = minstrel_ht_add_sta_debugfs, - #endif - .get_expected_throughput = minstrel_ht_get_expected_throughput, |