Lingbo Kong <quic_lingbok@xxxxxxxxxxx> writes: > On 2024/4/26 0:54, Kalle Valo wrote: >> Lingbo Kong <quic_lingbok@xxxxxxxxxxx> writes: >> >>> +static void ath12k_dp_tx_update_txcompl(struct ath12k *ar, struct >>> hal_tx_status *ts) >>> +{ >>> + struct ath12k_base *ab = ar->ab; >>> + struct ath12k_peer *peer; >>> + struct ath12k_sta *arsta; >>> + struct ieee80211_sta *sta; >>> + u16 rate; >>> + u8 rate_idx = 0; >>> + int ret; >>> + >>> + spin_lock_bh(&ab->base_lock); >> >> Did you analyse how this function, and especially taking the >> base_lock, >> affects performance? > > The base_lock is used here because of the need to look for peers based > on the ts->peer_id when calling ath12k_peer_find_by_id() function, > which i think might affect performance. > > Do i need to run a throughput test? Ok, so to answer my question: no, you didn't do any performance analysis. Throughput test might not be enough, for example the driver can be used on slower systems and running the test on a fast CPU might not reveal any problem. A proper analysis would be much better. >>> +enum nl80211_he_ru_alloc >>> ath12k_mac_he_ru_tones_to_nl80211_he_ru_alloc(u16 ru_tones) >>> +{ >>> + enum nl80211_he_ru_alloc ret; >>> + >>> + switch (ru_tones) { >>> + case 26: >>> + ret = NL80211_RATE_INFO_HE_RU_ALLOC_26; >>> + break; >>> + case 52: >>> + ret = NL80211_RATE_INFO_HE_RU_ALLOC_52; >>> + break; >>> + case 106: >>> + ret = NL80211_RATE_INFO_HE_RU_ALLOC_106; >>> + break; >>> + case 242: >>> + ret = NL80211_RATE_INFO_HE_RU_ALLOC_242; >>> + break; >>> + case 484: >>> + ret = NL80211_RATE_INFO_HE_RU_ALLOC_484; >>> + break; >>> + case 996: >>> + ret = NL80211_RATE_INFO_HE_RU_ALLOC_996; >>> + break; >>> + case (996 * 2): >>> + ret = NL80211_RATE_INFO_HE_RU_ALLOC_2x996; >>> + break; >>> + default: >>> + ret = NL80211_RATE_INFO_HE_RU_ALLOC_26; >>> + break; >>> + } >>> + >>> + return ret; >>> +} >> How does this function compare to >> ath12k_he_ru_tones_to_nl80211_he_ru_alloc()? >> > > ath12k_mac_he_ru_tones_to_nl80211_he_ru_alloc() is different from > ath12k_he_ru_tones_to_nl80211_he_ru_alloc(). > > the logic of ath12k_he_ru_tones_to_nl80211_he_ru_alloc() is Sure, I can read C. But _why_ do we have two very similar but still different functions. That looks fishy to me. -- https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches