Sebastian Moeller <moeller0@xxxxxx> writes: >> On Oct 17, 2019, at 11:44, Toke Høiland-Jørgensen <toke@xxxxxxxxxx> wrote: >> >> Kan Yan <kyan@xxxxxxxxxx> writes: >> >>> Hi Toke, >>> >>> Thanks for getting this done! I will give it a try in the next few >>> days. A few comments: >>> >>>> The estimated airtime for each skb is stored in the tx_info, so we can >>>> subtract the same amount from the running total when the skb is freed or >>>> recycled. >>> >>> Looks like ath10k driver zero out the info->status before calling >>> ieee80211_tx_status(...): >>> int ath10k_txrx_tx_unref(struct ath10k_htt *htt, >>> const struct htt_tx_done *tx_done) >>> { >>> ... >>> info = IEEE80211_SKB_CB(msdu); >>> memset(&info->status, 0, sizeof(info->status)); >>> ... >>> ieee80211_tx_status(htt->ar->hw, msdu); >>> } >> >> Ah, bugger; I was afraid we'd run into this. A quick grep indicates that >> it's only ath10k and iwl that do this, though, so it's probably >> manageable to just fix this. I think the simplest solution is just to >> restore the field after clearing, no? >> >>> We need either restore the info->status.tx_time_est or calling >>> ieee80211_sta_update_pending_airtime() in ath10k before tx_time_est >>> get erased. >>> >>>> + if (local->airtime_flags & AIRTIME_USE_AQL) { >>>> + airtime = ieee80211_calc_expected_tx_airtime(hw, vif, txq->sta, >>>> + skb->len + 38); >>> >>> I think it is better to put the "+ 38" that takes care of the header >>> overhead inside ieee80211_calc_expected_tx_airtime(). >> >> Hmm, no strong opinion about this; but yeah, since we have a dedicated >> function for this use I guess there's no harm in adding it there :) >> > > Silly question, is this Overhead guaranteed to be 38 Bytes for all > eternity? Otherwise a variable or a preprocessor constant might be > more future proof? Well, yeah, as long as we're sending Ethernet packets. Which is kinda baked into the WiFi standard :) -Toke