wifi: ath11k: rely on mac80211 debugfs handling for vif
PATCH v2 1/1 wifi: ath11k: rely on mac80211 debugfs handling for vif
From: Benjamin Berg <[email protected]>
mac80211 started to delete debugfs entries in certain cases, causing a ath11k to crash when it tried to delete the entries later. Fix this by relying on mac80211 to delete the entries when appropriate and adding them from the vif_add_debugfs handler.
Fixes 0a3d898ee9a8 ("wifi: mac80211: add/remove driver debugfs entries as appropriate")
Signed-off-by Benjamin Berg <[email protected]>
---
v2:
* Adjust commit message to say that this caused crashes
* Fix function name to match mac80211 op
--- drivers/net/wireless/ath/ath11k/core.h | 4 ---- drivers/net/wireless/ath/ath11k/debugfs.c | 25 +++++++++-------------- drivers/net/wireless/ath/ath11k/debugfs.h | 12 ++--------- drivers/net/wireless/ath/ath11k/mac.c | 12 +---------- 4 files changed, 13 insertions(+), 40 deletions(-)
drivers/net/wireless/ath/ath11k/core.h +0 -4
@@ -368,10 +368,6 @@ struct ath11k_vif {struct ieee80211_chanctx_conf chanctx;struct ath11k_arp_ns_offload arp_ns_offload;struct ath11k_rekey_data rekey_data; - -#ifdef CONFIG_ATH11K_DEBUGFS -struct dentry *debugfs_twt; -#endif /* CONFIG_ATH11K_DEBUGFS */ };struct ath11k_vif_iter {
drivers/net/wireless/ath/ath11k/debugfs.c +10 -15
@@ -1894,35 +1894,30 @@ static const struct file_operations ath11k_fops_twt_resume_dialog = { .open = simple_open }; -void ath11k_debugfs_add_interface (struct ath11k_vif *arvif) +void ath11k_debugfs_op_vif_add_debugfs (struct ieee80211_hw *hw, +struct ieee80211_vif *vif) { +struct ath11k_vif *arvif =ath11k_vif_to_arvif (vif);struct ath11k_base *ab = arvif->ar->ab; +struct dentry *debugfs_twt;if (arvif->vif->type !=NL80211_IFTYPE_AP && !(arvif->vif->type ==NL80211_IFTYPE_STATION &&test_bit (WMI_TLV_SERVICE_STA_TWT , ab->wmi_ab.svc_map)))return ; - arvif->debugfs_twt =debugfs_create_dir ("twt" , - arvif->vif->debugfs_dir); -debugfs_create_file ("add_dialog" ,0200 , arvif->debugfs_twt, + debugfs_twt =debugfs_create_dir ("twt" , + arvif->vif->debugfs_dir); +debugfs_create_file ("add_dialog" ,0200 , debugfs_twt, arvif, &ath11k_fops_twt_add_dialog); -debugfs_create_file ("del_dialog" ,0200 , arvif->debugfs_twt, +debugfs_create_file ("del_dialog" ,0200 , debugfs_twt, arvif, &ath11k_fops_twt_del_dialog); -debugfs_create_file ("pause_dialog" ,0200 , arvif->debugfs_twt, +debugfs_create_file ("pause_dialog" ,0200 , debugfs_twt, arvif, &ath11k_fops_twt_pause_dialog); -debugfs_create_file ("resume_dialog" ,0200 , arvif->debugfs_twt, +debugfs_create_file ("resume_dialog" ,0200 , debugfs_twt, arvif, &ath11k_fops_twt_resume_dialog); } -void ath11k_debugfs_remove_interface (struct ath11k_vif *arvif) -{ -if (!arvif->debugfs_twt) -return ; - -debugfs_remove_recursive (arvif->debugfs_twt); - arvif->debugfs_twt =NULL ; -}
drivers/net/wireless/ath/ath11k/debugfs.h +2 -10
@@ -307,8 +307,8 @@ static inline int ath11k_debugfs_rx_filter(struct ath11k *ar)return ar->debug.rx_filter; } -void ath11k_debugfs_add_interface (struct ath11k_vif *arvif); -void ath11k_debugfs_remove_interface (struct ath11k_vif *arvif); +void ath11k_debugfs_op_vif_add_debugfs (struct ieee80211_hw *hw, +struct ieee80211_vif *vif); void ath11k_debugfs_add_dbring_entry(struct ath11k *ar, enum wmi_direct_buffer_module id, enum ath11k_dbg_dbr_event event,
@@ -387,14 +387,6 @@ static inline int ath11k_debugfs_get_fw_stats(struct ath11k *ar,return 0 ; } -static inline void ath11k_debugfs_add_interface (struct ath11k_vif *arvif) -{ -} - -static inline void ath11k_debugfs_remove_interface (struct ath11k_vif *arvif) -{ -} - static inline void ath11k_debugfs_add_dbring_entry(struct ath11k *ar, enum wmi_direct_buffer_module id,
drivers/net/wireless/ath/ath11k/mac.c +1 -11
@@ -6756,13 +6756,6 @@ static int ath11k_mac_op_add_interface(struct ieee80211_hw *hw, goto err; } -/* In the case of hardware recovery, debugfs files are -* not deleted since ieee80211_ops.remove_interface() is -* not invoked. In such cases, try to delete the files. -* These will be re-created later. -*/ -ath11k_debugfs_remove_interface (arvif); -memset (arvif,0 ,sizeof (*arvif)); arvif->ar = ar;
@@ -6939,8 +6932,6 @@ static int ath11k_mac_op_add_interface(struct ieee80211_hw *hw,ath11k_dp_vdev_tx_attach (ar, arvif); -ath11k_debugfs_add_interface (arvif); -if (vif->type !=NL80211_IFTYPE_MONITOR &&test_bit (ATH11K_FLAG_MONITOR_CONF_ENABLED , &ar->monitor_flags)) { ret =ath11k_mac_monitor_vdev_create (ar);
@@ -7056,8 +7047,6 @@ static void ath11k_mac_op_remove_interface(struct ieee80211_hw *hw,/* Recalc txpower for remaining vdev */ ath11k_mac_txpower_recalc (ar); -ath11k_debugfs_remove_interface (arvif); -/* TODO: recal traffic pause state based on the available vdevs */ mutex_unlock (&ar->conf_mutex);
@@ -9153,6 +9142,7 @@ static const struct ieee80211_ops ath11k_ops = {#endif #ifdef CONFIG_ATH11K_DEBUGFS + .vif_add_debugfs = ath11k_debugfs_op_vif_add_debugfs, .sta_add_debugfs = ath11k_debugfs_sta_op_add,#endif
Signature · 1 line
2.43.0