lkml.org 
[lkml]   [2021]   [Nov]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 368/917] ath11k: fix packet drops due to incorrect 6 GHz freq value in rx status
    Date
    From: Pradeep Kumar Chitrapu <pradeepc@codeaurora.org>

    [ Upstream commit 9d6ae1f5cf733c0e8d7f904c501fd015c4b9f0f4 ]

    Frequency in rx status is being filled incorrectly in the 6 GHz band as
    channel number received is invalid in this case which is causing packet
    drops. So fix that.

    Fixes: 5dcf42f8b79d ("ath11k: Use freq instead of channel number in rx path")
    Signed-off-by: Pradeep Kumar Chitrapu <pradeepc@codeaurora.org>
    Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Link: https://lore.kernel.org/r/20210722102054.43419-2-jouni@codeaurora.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/wireless/ath/ath11k/dp_rx.c | 9 ++++++---
    drivers/net/wireless/ath/ath11k/wmi.c | 10 +++++++---
    2 files changed, 13 insertions(+), 6 deletions(-)

    diff --git a/drivers/net/wireless/ath/ath11k/dp_rx.c b/drivers/net/wireless/ath/ath11k/dp_rx.c
    index af0a600ea067c..0ae6bebff801d 100644
    --- a/drivers/net/wireless/ath/ath11k/dp_rx.c
    +++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
    @@ -2337,8 +2337,10 @@ static void ath11k_dp_rx_h_ppdu(struct ath11k *ar, struct hal_rx_desc *rx_desc,
    channel_num = meta_data;
    center_freq = meta_data >> 16;

    - if (center_freq >= 5935 && center_freq <= 7105) {
    + if (center_freq >= ATH11K_MIN_6G_FREQ &&
    + center_freq <= ATH11K_MAX_6G_FREQ) {
    rx_status->band = NL80211_BAND_6GHZ;
    + rx_status->freq = center_freq;
    } else if (channel_num >= 1 && channel_num <= 14) {
    rx_status->band = NL80211_BAND_2GHZ;
    } else if (channel_num >= 36 && channel_num <= 173) {
    @@ -2356,8 +2358,9 @@ static void ath11k_dp_rx_h_ppdu(struct ath11k *ar, struct hal_rx_desc *rx_desc,
    rx_desc, sizeof(struct hal_rx_desc));
    }

    - rx_status->freq = ieee80211_channel_to_frequency(channel_num,
    - rx_status->band);
    + if (rx_status->band != NL80211_BAND_6GHZ)
    + rx_status->freq = ieee80211_channel_to_frequency(channel_num,
    + rx_status->band);

    ath11k_dp_rx_h_rate(ar, rx_desc, rx_status);
    }
    diff --git a/drivers/net/wireless/ath/ath11k/wmi.c b/drivers/net/wireless/ath/ath11k/wmi.c
    index a53eef8e2631c..99c0b81e496bf 100644
    --- a/drivers/net/wireless/ath/ath11k/wmi.c
    +++ b/drivers/net/wireless/ath/ath11k/wmi.c
    @@ -6127,8 +6127,10 @@ static void ath11k_mgmt_rx_event(struct ath11k_base *ab, struct sk_buff *skb)
    if (rx_ev.status & WMI_RX_STATUS_ERR_MIC)
    status->flag |= RX_FLAG_MMIC_ERROR;

    - if (rx_ev.chan_freq >= ATH11K_MIN_6G_FREQ) {
    + if (rx_ev.chan_freq >= ATH11K_MIN_6G_FREQ &&
    + rx_ev.chan_freq <= ATH11K_MAX_6G_FREQ) {
    status->band = NL80211_BAND_6GHZ;
    + status->freq = rx_ev.chan_freq;
    } else if (rx_ev.channel >= 1 && rx_ev.channel <= 14) {
    status->band = NL80211_BAND_2GHZ;
    } else if (rx_ev.channel >= 36 && rx_ev.channel <= ATH11K_MAX_5G_CHAN) {
    @@ -6149,8 +6151,10 @@ static void ath11k_mgmt_rx_event(struct ath11k_base *ab, struct sk_buff *skb)

    sband = &ar->mac.sbands[status->band];

    - status->freq = ieee80211_channel_to_frequency(rx_ev.channel,
    - status->band);
    + if (status->band != NL80211_BAND_6GHZ)
    + status->freq = ieee80211_channel_to_frequency(rx_ev.channel,
    + status->band);
    +
    status->signal = rx_ev.snr + ATH11K_DEFAULT_NOISE_FLOOR;
    status->rate_idx = ath11k_mac_bitrate_to_idx(sband, rx_ev.rate / 100);

    --
    2.33.0


    \
     
     \ /
      Last update: 2021-11-16 01:54    [W:4.112 / U:0.136 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site