[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