Kan Yan <kyan@xxxxxxxxxx> writes: >> + if (local->airtime_flags & AIRTIME_USE_AQL) { >> + airtime = ieee80211_calc_expected_tx_airtime(hw, vif, txq->sta, >> + skb->len); >> + if (airtime) { >> + /* We only have 10 bits in tx_time_est, so store airtime >> + * in increments of 4 us and clamp that to 2**10. >> + */ >> + info->tx_time_est = min_t(u32, airtime >> 2, 1 << 10); >> + ieee80211_sta_update_pending_airtime(local, tx.sta, ac, >> + airtime, false); >> + } >> + } >> + > > It should be: > ieee80211_sta_update_pending_airtime(local, tx.sta, ac, > > info->tx_time_est << 2, false); > > The airtime rounded to 4us (info->tx_time_est << 2), instead of the > original airtime should be used when registering the pending airtime, > to keep it consistent with airtime subtracted when the skb is freed. Yes, I realised that last night as well. The rounding is also off (max is 2**10-1, not 2**10. Will send a v4 :) -Toke