diff options
author | Johannes Berg <johannes.berg@intel.com> | 2013-02-05 04:55:21 -0500 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-03-07 08:32:18 -0500 |
commit | 560d268220d3416a2d473bcc906ea2ccbf51e4ec (patch) | |
tree | 4cc83a5346d70fc14ec1874d9ad5c9714b64a0a0 /net/mac80211/sta_info.h | |
parent | 87f59c70ce6d1abeaaf97594835be29f746b81a0 (diff) |
mac80211: provide race-free 64-bit traffic counters
Make the TX bytes/packets counters race-free by keeping
them per AC so concurrent TX on queues can't cause lost
or wrong updates. This works since each station belongs
to a single interface. While at it also make the bytes
counters 64-bit.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/sta_info.h')
-rw-r--r-- | net/mac80211/sta_info.h | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h index e5868c32d1a3..adc30045f99e 100644 --- a/net/mac80211/sta_info.h +++ b/net/mac80211/sta_info.h | |||
@@ -333,7 +333,8 @@ struct sta_info { | |||
333 | unsigned long driver_buffered_tids; | 333 | unsigned long driver_buffered_tids; |
334 | 334 | ||
335 | /* Updated from RX path only, no locking requirements */ | 335 | /* Updated from RX path only, no locking requirements */ |
336 | unsigned long rx_packets, rx_bytes; | 336 | unsigned long rx_packets; |
337 | u64 rx_bytes; | ||
337 | unsigned long wep_weak_iv_count; | 338 | unsigned long wep_weak_iv_count; |
338 | unsigned long last_rx; | 339 | unsigned long last_rx; |
339 | long last_connected; | 340 | long last_connected; |
@@ -353,9 +354,9 @@ struct sta_info { | |||
353 | unsigned int fail_avg; | 354 | unsigned int fail_avg; |
354 | 355 | ||
355 | /* Updated from TX path only, no locking requirements */ | 356 | /* Updated from TX path only, no locking requirements */ |
356 | unsigned long tx_packets; | 357 | u32 tx_fragments; |
357 | unsigned long tx_bytes; | 358 | u64 tx_packets[IEEE80211_NUM_ACS]; |
358 | unsigned long tx_fragments; | 359 | u64 tx_bytes[IEEE80211_NUM_ACS]; |
359 | struct ieee80211_tx_rate last_tx_rate; | 360 | struct ieee80211_tx_rate last_tx_rate; |
360 | int last_rx_rate_idx; | 361 | int last_rx_rate_idx; |
361 | u32 last_rx_rate_flag; | 362 | u32 last_rx_rate_flag; |