mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-07-23 17:47:28 +08:00
83 lines
2.5 KiB
Diff
83 lines
2.5 KiB
Diff
From fbed57d897f6ea065c45806959337a6f28d2a94d Mon Sep 17 00:00:00 2001
|
|
From: Karthikeyan Periyasamy <periyasa@codeaurora.org>
|
|
Date: Mon, 10 Jan 2022 16:24:14 +0200
|
|
Subject: [PATCH] ath11k: Refactor the fallback routine when peer create fails
|
|
|
|
When there is an error in peer create process from
|
|
ath11k_peer_find(), the code attempts to handle a fallback
|
|
for peer create. When this fallback fails, the driver returns
|
|
the fallback return code rather than actual error code
|
|
(-ENOENT). So refactor the fallback routine to return
|
|
the actual error code.
|
|
|
|
Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.5.0.1-01067-QCAHKSWPL_SILICONZ-1
|
|
|
|
Signed-off-by: Karthikeyan Periyasamy <periyasa@codeaurora.org>
|
|
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
|
Link: https://lore.kernel.org/r/1640244819-21183-1-git-send-email-quic_periyasa@quicinc.com
|
|
---
|
|
drivers/net/wireless/ath/ath11k/peer.c | 40 +++++++++++++++-----------
|
|
1 file changed, 23 insertions(+), 17 deletions(-)
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/peer.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/peer.c
|
|
@@ -252,7 +252,7 @@ int ath11k_peer_create(struct ath11k *ar
|
|
{
|
|
struct ath11k_peer *peer;
|
|
struct ath11k_sta *arsta;
|
|
- int ret;
|
|
+ int ret, fbret;
|
|
|
|
lockdep_assert_held(&ar->conf_mutex);
|
|
|
|
@@ -291,22 +291,8 @@ int ath11k_peer_create(struct ath11k *ar
|
|
ath11k_warn(ar->ab, "failed to find peer %pM on vdev %i after creation\n",
|
|
param->peer_addr, param->vdev_id);
|
|
|
|
- reinit_completion(&ar->peer_delete_done);
|
|
-
|
|
- ret = ath11k_wmi_send_peer_delete_cmd(ar, param->peer_addr,
|
|
- param->vdev_id);
|
|
- if (ret) {
|
|
- ath11k_warn(ar->ab, "failed to delete peer vdev_id %d addr %pM\n",
|
|
- param->vdev_id, param->peer_addr);
|
|
- return ret;
|
|
- }
|
|
-
|
|
- ret = ath11k_wait_for_peer_delete_done(ar, param->vdev_id,
|
|
- param->peer_addr);
|
|
- if (ret)
|
|
- return ret;
|
|
-
|
|
- return -ENOENT;
|
|
+ ret = -ENOENT;
|
|
+ goto cleanup;
|
|
}
|
|
|
|
peer->pdev_idx = ar->pdev_idx;
|
|
@@ -335,4 +321,24 @@ int ath11k_peer_create(struct ath11k *ar
|
|
spin_unlock_bh(&ar->ab->base_lock);
|
|
|
|
return 0;
|
|
+
|
|
+cleanup:
|
|
+ reinit_completion(&ar->peer_delete_done);
|
|
+
|
|
+ fbret = ath11k_wmi_send_peer_delete_cmd(ar, param->peer_addr,
|
|
+ param->vdev_id);
|
|
+ if (fbret) {
|
|
+ ath11k_warn(ar->ab, "failed to delete peer vdev_id %d addr %pM\n",
|
|
+ param->vdev_id, param->peer_addr);
|
|
+ goto exit;
|
|
+ }
|
|
+
|
|
+ fbret = ath11k_wait_for_peer_delete_done(ar, param->vdev_id,
|
|
+ param->peer_addr);
|
|
+ if (fbret)
|
|
+ ath11k_warn(ar->ab, "failed wait for peer %pM delete done id %d fallback ret %d\n",
|
|
+ param->peer_addr, param->vdev_id, fbret);
|
|
+
|
|
+exit:
|
|
+ return ret;
|
|
}
|