Re: [PATCH v4 12/12] wifi: ath12k: support get_survey mac op for single wiphy

Rameshkumar Sundaram
2024-03-19T16:23:07Z

On 3/13/2024 4:55 AM, Jeff Johnson wrote:
> On 3/12/2024 6:55 AM, Rameshkumar Sundaram wrote:
>> From: Sriram R <quic_srirrama@quicinc.com>
>>
>> The radio for which the survey info needs to be collected
>> depends on the channel idx which could be based on the band.
>> Use the idx to identify the appropriate sband since multiple
>> bands could be combined for single wiphy case.
>>
>> Also use the channel idx and sband to identify the corresponding
>> radio on which the survey results needs to be populated.
>>
>> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
>> Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3
>>
>> Signed-off-by: Sriram R <quic_srirrama@quicinc.com>
>> Signed-off-by: Rameshkumar Sundaram <quic_ramess@quicinc.com>
>> ---
>> drivers/net/wireless/ath/ath12k/mac.c | 25 ++++++++++++++++---------
>> 1 file changed, 16 insertions(+), 9 deletions(-)
>>
>> diff --git a/drivers/net/wireless/ath/ath12k/mac.c b/drivers/net/wireless/ath/ath12k/mac.c
>> index 6123d7db2edc..a31003f8325d 100644
>> --- a/drivers/net/wireless/ath/ath12k/mac.c
>> +++ b/drivers/net/wireless/ath/ath12k/mac.c
>> @@ -7821,7 +7821,6 @@ ath12k_mac_update_bss_chan_survey(struct ath12k *ar,
>> static int ath12k_mac_op_get_survey(struct ieee80211_hw *hw, int idx,
>> struct survey_info *survey)
>> {
>> - struct ath12k_hw *ah = ath12k_hw_to_ah(hw);
>> struct ath12k *ar;
>> struct ieee80211_supported_band *sband;
>> struct survey_info *ar_survey;
>> @@ -7830,12 +7829,6 @@ static int ath12k_mac_op_get_survey(struct ieee80211_hw *hw, int idx,
>> if (idx >= ATH12K_NUM_CHANS)
>> return -ENOENT;
>>
>> - ar = ath12k_ah_to_ar(ah, 0);
>> -
>> - ar_survey = &ar->survey[idx];
>> -
>> - mutex_lock(&ar->conf_mutex);
>> -
>> sband = hw->wiphy->bands[NL80211_BAND_2GHZ];
>> if (sband && idx >= sband->n_channels) {
>> idx -= sband->n_channels;
>> @@ -7850,6 +7843,21 @@ static int ath12k_mac_op_get_survey(struct ieee80211_hw *hw, int idx,
>> goto exit;
>> }
>>
>> + ar = ath12k_mac_get_ar_by_chan(hw, &sband->channels[idx]);
>> + if (!ar) {
>> + if (sband->channels[idx].flags & IEEE80211_CHAN_DISABLED) {
>> + ret = 0;
>> + memset(survey, 0, sizeof(*survey));
>> + goto exit;
>> + }
>> + ret = -ENOENT;
>> + goto exit;
>> + }
>> +
>> + ar_survey = &ar->survey[idx];
>> +
>> + mutex_lock(&ar->conf_mutex);
>> +
>> ath12k_mac_update_bss_chan_survey(ar, &sband->channels[idx]);
>>
>> spin_lock_bh(&ar->data_lock);
>> @@ -7861,9 +7869,8 @@ static int ath12k_mac_op_get_survey(struct ieee80211_hw *hw, int idx,
>> if (ar->rx_channel == survey->channel)
>> survey->filled |= SURVEY_INFO_IN_USE;
>>
>> -exit:
>> mutex_unlock(&ar->conf_mutex);
>> -
>> +exit:
>
> goto should normally only be used when there is centralized cleanup.
> since now there is no cleanup required, all of the goto exit calls should just
> directly return the appropriate error
>
Sure, this sneaked through while rebasing, thanks for pointing out. Will
fix it in next version.
>> return ret;
>> }
>>
>