On 2024/4/26 19:21, Kalle Valo wrote:
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.
hi, kalle,
i found that ab->base_lock is used in a lot of places in ath12k, so it's
complicated to do performance analysis in here.
Do you have any suggestions? I would appreciate your suggestions:)
/lingbo kong
+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.