diff mbox series

[2/3] ath11k: Don't check arvif->is_started before sending management frames

Message ID 20220505013851.1548789-3-quic_bqiang@quicinc.com (mailing list archive)
State Changes Requested
Delegated to: Kalle Valo
Headers show
Series ath11k: Add support for Passpoint | expand

Commit Message

Baochen Qiang May 5, 2022, 1:38 a.m. UTC
Commit 66307ca04057 ("ath11k: fix mgmt_tx_wmi cmd sent to FW for
deleted vdev") wants both of below two conditions are true before
sending management frames:

1: ar->allocated_vdev_map & (1LL << arvif->vdev_id)
2: arvif->is_started

Actually the second one is not necessary cause with the first one
we can make sure the vdev is present.

Also use ar->conf_mutex to synchronize vdev delete and mgmt. TX.

This issue is found in case of Passpoint scenario where ath11k
needs to send action frames before vdev is started.

Fix it by removing the second condition.

Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-01720.1-QCAHSPSWPL_V1_V2_SILICONZ_LITE-1

Fixes: 66307ca04057 ("ath11k: fix mgmt_tx_wmi cmd sent to FW for deleted vdev")
Signed-off-by: Baochen Qiang <quic_bqiang@quicinc.com>
---
 drivers/net/wireless/ath/ath11k/mac.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Comments

Jeff Johnson May 5, 2022, 6:53 p.m. UTC | #1
On 5/4/2022 6:38 PM, Baochen Qiang wrote:
> Commit 66307ca04057 ("ath11k: fix mgmt_tx_wmi cmd sent to FW for
> deleted vdev") wants both of below two conditions are true before
> sending management frames:
> 
> 1: ar->allocated_vdev_map & (1LL << arvif->vdev_id)
> 2: arvif->is_started
> 
> Actually the second one is not necessary cause with the first one

nit: s/cause/because/
Baochen Qiang May 6, 2022, 1:31 a.m. UTC | #2
On 5/6/2022 2:53 AM, Jeff Johnson wrote:
> On 5/4/2022 6:38 PM, Baochen Qiang wrote:
>> Commit 66307ca04057 ("ath11k: fix mgmt_tx_wmi cmd sent to FW for
>> deleted vdev") wants both of below two conditions are true before
>> sending management frames:
>>
>> 1: ar->allocated_vdev_map & (1LL << arvif->vdev_id)
>> 2: arvif->is_started
>>
>> Actually the second one is not necessary cause with the first one
>
> nit: s/cause/because/
>
Thanks Jeff, will address it in v2.
diff mbox series

Patch

diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c
index 6e6b8562b481..db6a38b98765 100644
--- a/drivers/net/wireless/ath/ath11k/mac.c
+++ b/drivers/net/wireless/ath/ath11k/mac.c
@@ -5551,8 +5551,8 @@  static void ath11k_mgmt_over_wmi_tx_work(struct work_struct *work)
 		}
 
 		arvif = ath11k_vif_to_arvif(skb_cb->vif);
-		if (ar->allocated_vdev_map & (1LL << arvif->vdev_id) &&
-		    arvif->is_started) {
+		mutex_lock(&ar->conf_mutex);
+		if (ar->allocated_vdev_map & (1LL << arvif->vdev_id)) {
 			ret = ath11k_mac_mgmt_tx_wmi(ar, arvif, skb);
 			if (ret) {
 				ath11k_warn(ar->ab, "failed to tx mgmt frame, vdev_id %d :%d\n",
@@ -5570,6 +5570,7 @@  static void ath11k_mgmt_over_wmi_tx_work(struct work_struct *work)
 				    arvif->is_started);
 			ath11k_mgmt_over_wmi_tx_drop(ar, skb);
 		}
+		mutex_unlock(&ar->conf_mutex);
 	}
 }