]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.7-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 27 Jan 2024 00:58:41 +0000 (16:58 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 27 Jan 2024 00:58:41 +0000 (16:58 -0800)
added patches:
wifi-ath11k-rely-on-mac80211-debugfs-handling-for-vif.patch

queue-6.7/series
queue-6.7/wifi-ath11k-rely-on-mac80211-debugfs-handling-for-vif.patch [new file with mode: 0644]

index f5bbbd5c14e238bca07b327334245e9983573b22..27dba2b6e212ba23ae1ffb48f8a1d6c5174dbaa9 100644 (file)
@@ -136,6 +136,7 @@ serial-sc16is7xx-remove-obsolete-loop-in-sc16is7xx_port_irq.patch
 serial-sc16is7xx-improve-do-while-loop-in-sc16is7xx_irq.patch
 mm-page_alloc-unreserve-highatomic-page-blocks-before-oom.patch
 ksmbd-set-v2-lease-version-on-lease-upgrade.patch
+wifi-ath11k-rely-on-mac80211-debugfs-handling-for-vif.patch
 ksmbd-fix-potential-circular-locking-issue-in-smb2_set_ea.patch
 ksmbd-don-t-increment-epoch-if-current-state-and-request-state-are-same.patch
 ksmbd-send-lease-break-notification-on-file_rename_information.patch
diff --git a/queue-6.7/wifi-ath11k-rely-on-mac80211-debugfs-handling-for-vif.patch b/queue-6.7/wifi-ath11k-rely-on-mac80211-debugfs-handling-for-vif.patch
new file mode 100644 (file)
index 0000000..6ee1202
--- /dev/null
@@ -0,0 +1,159 @@
+From 556857aa1d0855aba02b1c63bc52b91ec63fc2cc Mon Sep 17 00:00:00 2001
+From: Benjamin Berg <benjamin.berg@intel.com>
+Date: Mon, 15 Jan 2024 11:18:05 +0100
+Subject: wifi: ath11k: rely on mac80211 debugfs handling for vif
+
+From: Benjamin Berg <benjamin.berg@intel.com>
+
+commit 556857aa1d0855aba02b1c63bc52b91ec63fc2cc upstream.
+
+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")
+Closes: https://bugzilla.kernel.org/show_bug.cgi?id=218364
+Signed-off-by: Benjamin Berg <benjamin.berg@intel.com>
+Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
+Signed-off-by: Kalle Valo <kvalo@kernel.org>
+Link: https://msgid.link/20240115101805.1277949-1-benjamin@sipsolutions.net
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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(-)
+
+--- a/drivers/net/wireless/ath/ath11k/core.h
++++ b/drivers/net/wireless/ath/ath11k/core.h
+@@ -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 {
+--- a/drivers/net/wireless/ath/ath11k/debugfs.c
++++ b/drivers/net/wireless/ath/ath11k/debugfs.c
+@@ -1893,35 +1893,30 @@ static const struct file_operations ath1
+       .open = simple_open
+ };
+-void ath11k_debugfs_add_interface(struct ath11k_vif *arvif)
++void ath11k_debugfs_op_vif_add(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;
+-}
+--- a/drivers/net/wireless/ath/ath11k/debugfs.h
++++ b/drivers/net/wireless/ath/ath11k/debugfs.h
+@@ -306,8 +306,8 @@ static inline int ath11k_debugfs_rx_filt
+       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(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,
+@@ -386,14 +386,6 @@ static inline int ath11k_debugfs_get_fw_
+       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,
+--- a/drivers/net/wireless/ath/ath11k/mac.c
++++ b/drivers/net/wireless/ath/ath11k/mac.c
+@@ -6750,13 +6750,6 @@ static int ath11k_mac_op_add_interface(s
+               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;
+@@ -6933,8 +6926,6 @@ static int ath11k_mac_op_add_interface(s
+       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);
+@@ -7050,8 +7041,6 @@ err_vdev_del:
+       /* 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);
+@@ -9149,6 +9138,7 @@ static const struct ieee80211_ops ath11k
+ #endif
+ #ifdef CONFIG_ATH11K_DEBUGFS
++      .vif_add_debugfs                = ath11k_debugfs_op_vif_add,
+       .sta_add_debugfs                = ath11k_debugfs_sta_op_add,
+ #endif