lkml.org 
[lkml]   [2022]   [Jun]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.18 411/879] ath11k: Dont check arvif->is_started before sending management frames
    Date
    From: Baochen Qiang <quic_bqiang@quicinc.com>

    [ Upstream commit 355333a217541916576351446b5832fec7930566 ]

    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 because 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>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20220506013614.1580274-3-quic_bqiang@quicinc.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/wireless/ath/ath11k/mac.c | 5 +++--
    1 file changed, 3 insertions(+), 2 deletions(-)

    diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c
    index 2c8d5f2a0517..54d738bdee0e 100644
    --- a/drivers/net/wireless/ath/ath11k/mac.c
    +++ b/drivers/net/wireless/ath/ath11k/mac.c
    @@ -5520,8 +5520,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",
    @@ -5539,6 +5539,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);
    }
    }

    --
    2.35.1


    \
     
     \ /
      Last update: 2022-06-08 02:18    [W:2.135 / U:0.280 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site