@@ -2522,7 +2522,7 @@ static void sta_set_tidstats(struct sta_info *sta,
if (!(tidstats->filled & BIT(NL80211_TID_STATS_TX_MSDU))) {
tidstats->filled |= BIT(NL80211_TID_STATS_TX_MSDU);
- tidstats->tx_msdu = sta->deflink.tx_stats.msdu[tid];
+ tidstats->tx_msdu = sta->deflink.tx_stats.req_msdu[tid];
}
if (!(tidstats->filled & BIT(NL80211_TID_STATS_TX_MSDU_RETRIES)) &&
@@ -2606,14 +2606,14 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo,
BIT_ULL(NL80211_STA_INFO_TX_BYTES)))) {
sinfo->tx_bytes = 0;
for (ac = 0; ac < IEEE80211_NUM_ACS; ac++)
- sinfo->tx_bytes += sta->deflink.tx_stats.bytes[ac];
+ sinfo->tx_bytes += sta->deflink.tx_stats.req_bytes[ac];
sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_BYTES64);
}
if (!(sinfo->filled & BIT_ULL(NL80211_STA_INFO_TX_PACKETS))) {
sinfo->tx_packets = 0;
for (ac = 0; ac < IEEE80211_NUM_ACS; ac++)
- sinfo->tx_packets += sta->deflink.tx_stats.packets[ac];
+ sinfo->tx_packets += sta->deflink.tx_stats.req_packets[ac];
sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_PACKETS);
}
@@ -553,14 +553,16 @@ struct link_sta_info {
/* Updated from TX path only, no locking requirements */
struct {
- u64 packets[IEEE80211_NUM_ACS];
- u64 bytes[IEEE80211_NUM_ACS];
+ /* Packets and bytes requested to be transmitted, deflink only */
+ u64 req_packets[IEEE80211_NUM_ACS];
+ u64 req_bytes[IEEE80211_NUM_ACS];
/* Packets and bytes reported transmitted (per link) */
u64 rep_packets;
u64 rep_bytes;
struct ieee80211_tx_rate last_rate;
struct rate_info last_rate_info;
- u64 msdu[IEEE80211_NUM_TIDS + 1];
+ /* Requested to be transmitted */
+ u64 req_msdu[IEEE80211_NUM_TIDS + 1];
} tx_stats;
enum ieee80211_sta_rx_bandwidth cur_max_bandwidth;
@@ -866,7 +866,7 @@ ieee80211_tx_h_sequence(struct ieee80211_tx_data *tx)
hdr->seq_ctrl = cpu_to_le16(tx->sdata->sequence_number);
tx->sdata->sequence_number += 0x10;
if (tx->sta)
- tx->sta->deflink.tx_stats.msdu[IEEE80211_NUM_TIDS]++;
+ tx->sta->deflink.tx_stats.req_msdu[IEEE80211_NUM_TIDS]++;
return TX_CONTINUE;
}
@@ -880,7 +880,7 @@ ieee80211_tx_h_sequence(struct ieee80211_tx_data *tx)
/* include per-STA, per-TID sequence counter */
tid = ieee80211_get_tid(hdr);
- tx->sta->deflink.tx_stats.msdu[tid]++;
+ tx->sta->deflink.tx_stats.req_msdu[tid]++;
hdr->seq_ctrl = ieee80211_tx_next_seq(tx->sta, tid);
@@ -1033,10 +1033,10 @@ ieee80211_tx_h_stats(struct ieee80211_tx_data *tx)
skb_queue_walk(&tx->skbs, skb) {
ac = skb_get_queue_mapping(skb);
- tx->sta->deflink.tx_stats.bytes[ac] += skb->len;
+ tx->sta->deflink.tx_stats.req_bytes[ac] += skb->len;
}
if (ac >= 0)
- tx->sta->deflink.tx_stats.packets[ac]++;
+ tx->sta->deflink.tx_stats.req_packets[ac]++;
return TX_CONTINUE;
}
@@ -3575,18 +3575,18 @@ ieee80211_xmit_fast_finish(struct ieee80211_sub_if_data *sdata,
}
if (skb_shinfo(skb)->gso_size)
- sta->deflink.tx_stats.msdu[tid] +=
+ sta->deflink.tx_stats.req_msdu[tid] +=
DIV_ROUND_UP(skb->len, skb_shinfo(skb)->gso_size);
else
- sta->deflink.tx_stats.msdu[tid]++;
+ sta->deflink.tx_stats.req_msdu[tid]++;
info->hw_queue = sdata->vif.hw_queue[skb_get_queue_mapping(skb)];
/* statistics normally done by ieee80211_tx_h_stats (but that
* has to consider fragmentation, so is more complex)
*/
- sta->deflink.tx_stats.bytes[skb_get_queue_mapping(skb)] += skb->len;
- sta->deflink.tx_stats.packets[skb_get_queue_mapping(skb)]++;
+ sta->deflink.tx_stats.req_bytes[skb_get_queue_mapping(skb)] += skb->len;
+ sta->deflink.tx_stats.req_packets[skb_get_queue_mapping(skb)]++;
if (pn_offs) {
u64 pn;
@@ -4672,8 +4672,8 @@ static void ieee80211_8023_xmit(struct ieee80211_sub_if_data *sdata,
}
dev_sw_netstats_tx_add(dev, skbs, len);
- sta->deflink.tx_stats.packets[queue] += skbs;
- sta->deflink.tx_stats.bytes[queue] += len;
+ sta->deflink.tx_stats.req_packets[queue] += skbs;
+ sta->deflink.tx_stats.req_bytes[queue] += len;
ieee80211_tpt_led_trig_tx(local, len);