mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-16 14:23:38 +00:00
58 lines
1.9 KiB
Diff
58 lines
1.9 KiB
Diff
From 4c375743c5fe1ef84d1dd7269dd12585957f403e Mon Sep 17 00:00:00 2001
|
|
From: Karthikeyan Periyasamy <quic_periyasa@quicinc.com>
|
|
Date: Wed, 10 Nov 2021 21:36:28 +0530
|
|
Subject: [PATCH] ath11k: avoid unnecessary BH disable lock in STA kickout
|
|
event
|
|
|
|
In STA kickout event processing, the peer object is protected
|
|
under spin lock BH. Release this lock after picking up the vdev_id
|
|
from the peer object instead after ieee80211_report_low_ack().
|
|
This will minimize the lock hold period which will improve
|
|
performance since base_lock is used across the data path.
|
|
This was found in code review.
|
|
|
|
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.5.0.1-00729-QCAHKSWPL_SILICONZ-3 v2
|
|
|
|
Signed-off-by: Karthikeyan Periyasamy <quic_periyasa@quicinc.com>
|
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
|
Link: https://lore.kernel.org/r/1636560388-24955-1-git-send-email-quic_periyasa@quicinc.com
|
|
---
|
|
drivers/net/wireless/ath/ath11k/wmi.c | 9 +++++++--
|
|
1 file changed, 7 insertions(+), 2 deletions(-)
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/wmi.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/wmi.c
|
|
@@ -6400,6 +6400,7 @@ static void ath11k_peer_sta_kickout_even
|
|
struct ieee80211_sta *sta;
|
|
struct ath11k_peer *peer;
|
|
struct ath11k *ar;
|
|
+ u32 vdev_id;
|
|
|
|
if (ath11k_pull_peer_sta_kickout_ev(ab, skb, &arg) != 0) {
|
|
ath11k_warn(ab, "failed to extract peer sta kickout event");
|
|
@@ -6415,10 +6416,15 @@ static void ath11k_peer_sta_kickout_even
|
|
if (!peer) {
|
|
ath11k_warn(ab, "peer not found %pM\n",
|
|
arg.mac_addr);
|
|
+ spin_unlock_bh(&ab->base_lock);
|
|
goto exit;
|
|
}
|
|
|
|
- ar = ath11k_mac_get_ar_by_vdev_id(ab, peer->vdev_id);
|
|
+ vdev_id = peer->vdev_id;
|
|
+
|
|
+ spin_unlock_bh(&ab->base_lock);
|
|
+
|
|
+ ar = ath11k_mac_get_ar_by_vdev_id(ab, vdev_id);
|
|
if (!ar) {
|
|
ath11k_warn(ab, "invalid vdev id in peer sta kickout ev %d",
|
|
peer->vdev_id);
|
|
@@ -6439,7 +6445,6 @@ static void ath11k_peer_sta_kickout_even
|
|
ieee80211_report_low_ack(sta, 10);
|
|
|
|
exit:
|
|
- spin_unlock_bh(&ab->base_lock);
|
|
rcu_read_unlock();
|
|
}
|
|
|