mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-16 14:23:38 +00:00
61 lines
2.1 KiB
Diff
61 lines
2.1 KiB
Diff
From 4ea03443ecdac6920eb7aa3a9da2cd0b8cc6dfc8 Mon Sep 17 00:00:00 2001
|
|
From: Karthikeyan Periyasamy <quic_periyasa@quicinc.com>
|
|
Date: Wed, 10 Nov 2021 21:05:57 +0530
|
|
Subject: [PATCH 069/120] ath11k: fix error routine when fallback of add
|
|
interface fails
|
|
|
|
When there is an error in add interface process from
|
|
ath11k_mac_set_kickout(), the code attempts to handle a
|
|
fallback for add_interface. When this fallback succeeds, the
|
|
driver returns zero rather than error code. This leads to
|
|
success for the non created VAP. In cleanup, driver gets
|
|
remove interface callback for the non created VAP and
|
|
proceeds to self peer delete request which leads to FW assert.
|
|
Since it was already deleted on the fallback of add interface,
|
|
return the actual error code instead of fallback return code.
|
|
|
|
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/1636558557-2874-1-git-send-email-quic_periyasa@quicinc.com
|
|
---
|
|
drivers/net/wireless/ath/ath11k/mac.c | 14 +++++++-------
|
|
1 file changed, 7 insertions(+), 7 deletions(-)
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
|
@@ -5613,7 +5613,7 @@ static int ath11k_mac_op_add_interface(s
|
|
u32 param_id, param_value;
|
|
u16 nss;
|
|
int i;
|
|
- int ret;
|
|
+ int ret, fbret;
|
|
int bit;
|
|
|
|
vif->driver_flags |= IEEE80211_VIF_SUPPORTS_UAPSD;
|
|
@@ -5816,17 +5816,17 @@ err_peer_del:
|
|
if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
|
|
reinit_completion(&ar->peer_delete_done);
|
|
|
|
- ret = ath11k_wmi_send_peer_delete_cmd(ar, vif->addr,
|
|
- arvif->vdev_id);
|
|
- if (ret) {
|
|
+ fbret = ath11k_wmi_send_peer_delete_cmd(ar, vif->addr,
|
|
+ arvif->vdev_id);
|
|
+ if (fbret) {
|
|
ath11k_warn(ar->ab, "failed to delete peer vdev_id %d addr %pM\n",
|
|
arvif->vdev_id, vif->addr);
|
|
goto err;
|
|
}
|
|
|
|
- ret = ath11k_wait_for_peer_delete_done(ar, arvif->vdev_id,
|
|
- vif->addr);
|
|
- if (ret)
|
|
+ fbret = ath11k_wait_for_peer_delete_done(ar, arvif->vdev_id,
|
|
+ vif->addr);
|
|
+ if (fbret)
|
|
goto err;
|
|
|
|
ar->num_peers--;
|