lkml.org 
[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.16 0581/1039] ath11k: Fix mon status ring rx tlv processing
    Date
    From: Anilkumar Kolli <akolli@codeaurora.org>

    [ Upstream commit 09f16f7390f302937409738d6cb6ce99b265f455 ]

    In HE monitor capture, HAL_TLV_STATUS_PPDU_DONE is received
    on processing multiple skb. Do not clear the ppdu_info
    till the HAL_TLV_STATUS_PPDU_DONE is received.

    This fixes below warning and packet drops in monitor mode.
    "Rate marked as an HE rate but data is invalid: MCS: 6, NSS: 0"
    WARNING: at
    PC is at ieee80211_rx_napi+0x624/0x840 [mac80211]

    Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-01693-QCAHKSWPL_SILICONZ-1

    Signed-off-by: Anilkumar Kolli <akolli@codeaurora.org>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Link: https://lore.kernel.org/r/1637249433-10316-1-git-send-email-akolli@codeaurora.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/wireless/ath/ath11k/dp_rx.c | 14 +++++++-------
    1 file changed, 7 insertions(+), 7 deletions(-)

    diff --git a/drivers/net/wireless/ath/ath11k/dp_rx.c b/drivers/net/wireless/ath/ath11k/dp_rx.c
    index 22b6b6a470d4c..621372c568d2c 100644
    --- a/drivers/net/wireless/ath/ath11k/dp_rx.c
    +++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
    @@ -3064,10 +3064,10 @@ int ath11k_dp_rx_process_mon_status(struct ath11k_base *ab, int mac_id,
    if (!num_buffs_reaped)
    goto exit;

    - while ((skb = __skb_dequeue(&skb_list))) {
    - memset(&ppdu_info, 0, sizeof(ppdu_info));
    - ppdu_info.peer_id = HAL_INVALID_PEERID;
    + memset(&ppdu_info, 0, sizeof(ppdu_info));
    + ppdu_info.peer_id = HAL_INVALID_PEERID;

    + while ((skb = __skb_dequeue(&skb_list))) {
    if (ath11k_debugfs_is_pktlog_lite_mode_enabled(ar)) {
    log_type = ATH11K_PKTLOG_TYPE_LITE_RX;
    rx_buf_sz = DP_RX_BUFFER_SIZE_LITE;
    @@ -3095,10 +3095,7 @@ int ath11k_dp_rx_process_mon_status(struct ath11k_base *ab, int mac_id,
    ath11k_dbg(ab, ATH11K_DBG_DATA,
    "failed to find the peer with peer_id %d\n",
    ppdu_info.peer_id);
    - spin_unlock_bh(&ab->base_lock);
    - rcu_read_unlock();
    - dev_kfree_skb_any(skb);
    - continue;
    + goto next_skb;
    }

    arsta = (struct ath11k_sta *)peer->sta->drv_priv;
    @@ -3107,10 +3104,13 @@ int ath11k_dp_rx_process_mon_status(struct ath11k_base *ab, int mac_id,
    if (ath11k_debugfs_is_pktlog_peer_valid(ar, peer->addr))
    trace_ath11k_htt_rxdesc(ar, skb->data, log_type, rx_buf_sz);

    +next_skb:
    spin_unlock_bh(&ab->base_lock);
    rcu_read_unlock();

    dev_kfree_skb_any(skb);
    + memset(&ppdu_info, 0, sizeof(ppdu_info));
    + ppdu_info.peer_id = HAL_INVALID_PEERID;
    }
    exit:
    return num_buffs_reaped;
    --
    2.34.1


    \
     
     \ /
      Last update: 2022-01-24 23:10    [W:3.759 / U:0.340 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site