[PATCH ath-next] wifi: ath12k: Add fallback for invalid channel number in PHY metadata
Baochen Qiang
baochen.qiang at oss.qualcomm.com
Tue Sep 16 19:53:42 PDT 2025
On 7/24/2025 3:06 AM, Aishwarya R wrote:
> From: Sriram R <quic_srirrama at quicinc.com>
>
> Currently, ath12k_dp_rx_h_ppdu() determines the band and frequency
> based on the channel number and center frequency from the RX descriptor's
> PHY metadata. However, in rare cases, it is observed that frequency
> retrieved from the metadata may be invalid or unexpected especially for
> 6 GHz frames.
> This can result in a NULL sband, which prevents proper frequency assignment
> in rx_status and potentially leading to incorrect RX packet classification.
>
> To fix this potential issue, add a fallback mechanism that uses
> ar->rx_channel to populate the band and frequency when the derived
> sband is invalid or missing.
>
> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.4.1-00199-QCAHKSWPL_SILICONZ-1
>
> Fixes: d889913205cf ("wifi: ath12k: driver for Qualcomm Wi-Fi 7 devices")
> Signed-off-by: Sriram R <quic_srirrama at quicinc.com>
> Co-developed-by: Vinith Kumar R <quic_vinithku at quicinc.com>
> Signed-off-by: Vinith Kumar R <quic_vinithku at quicinc.com>
> Signed-off-by: Aishwarya R <aishwarya.r at oss.qualcomm.com>
> ---
> drivers/net/wireless/ath/ath12k/dp_rx.c | 16 +++++++++++++++-
> 1 file changed, 15 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/wireless/ath/ath12k/dp_rx.c b/drivers/net/wireless/ath/ath12k/dp_rx.c
> index 8ab91273592c..adb0cfe109e6 100644
> --- a/drivers/net/wireless/ath/ath12k/dp_rx.c
> +++ b/drivers/net/wireless/ath/ath12k/dp_rx.c
> @@ -2533,6 +2533,8 @@ void ath12k_dp_rx_h_ppdu(struct ath12k *ar, struct ath12k_dp_rx_info *rx_info)
> channel_num = meta_data;
> center_freq = meta_data >> 16;
>
> + rx_status->band = NUM_NL80211_BANDS;
> +
> if (center_freq >= ATH12K_MIN_6GHZ_FREQ &&
> center_freq <= ATH12K_MAX_6GHZ_FREQ) {
> rx_status->band = NL80211_BAND_6GHZ;
> @@ -2541,21 +2543,33 @@ void ath12k_dp_rx_h_ppdu(struct ath12k *ar, struct ath12k_dp_rx_info *rx_info)
> rx_status->band = NL80211_BAND_2GHZ;
> } else if (channel_num >= 36 && channel_num <= 173) {
> rx_status->band = NL80211_BAND_5GHZ;
> - } else {
> + }
> +
> + if (unlikely(rx_status->band == NUM_NL80211_BANDS ||
> + !ath12k_ar_to_hw(ar)->wiphy->bands[rx_status->band])) {
> + ath12k_warn(ar->ab, "sband is NULL for status band %d channel_num %d center_freq %d pdev_id %d\n",
> + rx_status->band, channel_num, center_freq, ar->pdev_idx);
> +
> spin_lock_bh(&ar->data_lock);
> channel = ar->rx_channel;
> if (channel) {
> rx_status->band = channel->band;
> channel_num =
> ieee80211_frequency_to_channel(channel->center_freq);
> + rx_status->freq = ieee80211_channel_to_frequency(channel_num,
> + rx_status->band);
> + } else {
> + ath12k_err(ar->ab, "unable to determine channel, band for rx packet");
> }
> spin_unlock_bh(&ar->data_lock);
> + goto h_rate;
> }
>
> if (rx_status->band != NL80211_BAND_6GHZ)
> rx_status->freq = ieee80211_channel_to_frequency(channel_num,
> rx_status->band);
>
> +h_rate:
> ath12k_dp_rx_h_rate(ar, rx_info);
> }
>
> base-commit: 708243c62efde8241e2c66e9c3f377658855149d
Reviewed-by: Baochen Qiang <baochen.qiang at oss.qualcomm.com>
More information about the ath12k
mailing list