From 60a714f15d232185f9caa4c2988a2d6437f3b05a Mon Sep 17 00:00:00 2001 From: Arif Alam Date: Thu, 4 Sep 2025 01:13:04 -0400 Subject: [PATCH] ath11k: improve peer deletion timeout error handling and fix memory leak Signed-off-by: Arif Alam --- .../patches/pending/a-004-cleanup-peer.patch | 10 ++++ ...eer-deletion-timeout-and-error-handl.patch | 54 +++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 feeds/ipq807x_v5.4/mac80211/patches/pending/a-004-cleanup-peer.patch create mode 100644 feeds/ipq807x_v5.4/mac80211/patches/pending/a-005-ath11k-improve-peer-deletion-timeout-and-error-handl.patch diff --git a/feeds/ipq807x_v5.4/mac80211/patches/pending/a-004-cleanup-peer.patch b/feeds/ipq807x_v5.4/mac80211/patches/pending/a-004-cleanup-peer.patch new file mode 100644 index 000000000..00cfeb7f4 --- /dev/null +++ b/feeds/ipq807x_v5.4/mac80211/patches/pending/a-004-cleanup-peer.patch @@ -0,0 +1,10 @@ +--- a/drivers/net/wireless/ath/ath11k/peer.c ++++ b/drivers/net/wireless/ath/ath11k/peer.c +@@ -902,6 +902,7 @@ int ath11k_peer_create(struct ath11k *ar + if (vdev_id == param->vdev_id) + return -EINVAL; + ++ ath11k_dp_peer_cleanup(ar, vdev_id, param->peer_addr); + ath11k_peer_delete(ar, vdev_id, param->peer_addr); + } + diff --git a/feeds/ipq807x_v5.4/mac80211/patches/pending/a-005-ath11k-improve-peer-deletion-timeout-and-error-handl.patch b/feeds/ipq807x_v5.4/mac80211/patches/pending/a-005-ath11k-improve-peer-deletion-timeout-and-error-handl.patch new file mode 100644 index 000000000..c6c183e2e --- /dev/null +++ b/feeds/ipq807x_v5.4/mac80211/patches/pending/a-005-ath11k-improve-peer-deletion-timeout-and-error-handl.patch @@ -0,0 +1,54 @@ +From f211976a35c898f39d5a2602dd2a076a7b7cebd2 Mon Sep 17 00:00:00 2001 +From: Arif Alam +Date: Tue, 2 Sep 2025 20:07:06 -0400 +Subject: [PATCH] ath11k: improve peer deletion timeout and error handling + +Signed-off-by: Arif Alam +--- + drivers/net/wireless/ath/ath11k/peer.c | 9 ++++++--- + drivers/net/wireless/ath/ath11k/peer.h | 2 ++ + 2 files changed, 8 insertions(+), 3 deletions(-) + +diff --git a/drivers/net/wireless/ath/ath11k/peer.c b/drivers/net/wireless/ath/ath11k/peer.c +index 1907067..d5dbf40 100644 +--- a/drivers/net/wireless/ath/ath11k/peer.c ++++ b/drivers/net/wireless/ath/ath11k/peer.c +@@ -771,7 +771,7 @@ int ath11k_wait_for_peer_delete_done(struct ath11k *ar, u32 vdev_id, + } + + time_left = wait_for_completion_timeout(&ar->peer_delete_done, +- 3 * HZ); ++ msecs_to_jiffies(ATH11K_PEER_DELETE_MSG_TIMEOUT_MS)); + if (time_left == 0) { + ath11k_warn(ar->ab, "Timeout in receiving peer delete response\n"); + return -ETIMEDOUT; +@@ -857,8 +857,11 @@ int ath11k_peer_delete(struct ath11k *ar, u32 vdev_id, u8 *addr) + } + + ret = ath11k_wait_for_peer_delete_done(ar, vdev_id, addr); +- if (ret) +- return ret; ++ if (ret) { ++ ath11k_warn(ar->ab, ++ "failed wait for peer %pM delete done id %d ret %d\n", ++ addr, vdev_id, ret); ++ } + + ATH11K_MEMORY_STATS_DEC(ar->ab, per_peer_object, + sizeof(struct ath11k_peer)); +diff --git a/drivers/net/wireless/ath/ath11k/peer.h b/drivers/net/wireless/ath/ath11k/peer.h +index c1a6464..ca20627 100644 +--- a/drivers/net/wireless/ath/ath11k/peer.h ++++ b/drivers/net/wireless/ath/ath11k/peer.h +@@ -6,6 +6,8 @@ + #ifndef ATH11K_PEER_H + #define ATH11K_PEER_H + ++#define ATH11K_PEER_DELETE_MSG_TIMEOUT_MS 100 ++ + struct ppdu_user_delayba { + u8 reserved0; + u16 sw_peer_id; +-- +2.50.1 +