summaryrefslogtreecommitdiffstats
path: root/net/mac80211/sta_info.h
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2016-03-31 20:02:09 +0300
committerJohannes Berg <johannes.berg@intel.com>2016-04-06 13:18:17 +0200
commit0f9c5a61d4b2330b12c59126aa5a9108dbfce555 (patch)
tree6d18031607d94831c71dba87fec4abfb990c6465 /net/mac80211/sta_info.h
parent4f6b1b3daaf167bf927174224e07efd17ed95984 (diff)
downloadop-kernel-dev-0f9c5a61d4b2330b12c59126aa5a9108dbfce555.zip
op-kernel-dev-0f9c5a61d4b2330b12c59126aa5a9108dbfce555.tar.gz
mac80211: fix RX u64 stats consistency on 32-bit platforms
On 32-bit platforms, the 64-bit counters we keep need to be protected to be consistently read. Use the u64_stats_sync mechanism to do that. In order to not end up with overly long lines, refactor the tidstats assignments a 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.h5
1 files changed, 4 insertions, 1 deletions
diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h
index 5549ceb..7c23b57 100644
--- a/net/mac80211/sta_info.h
+++ b/net/mac80211/sta_info.h
@@ -18,6 +18,7 @@
#include <linux/average.h>
#include <linux/etherdevice.h>
#include <linux/rhashtable.h>
+#include <linux/u64_stats_sync.h>
#include "key.h"
/**
@@ -444,7 +445,6 @@ struct sta_info {
/* Updated from RX path only, no locking requirements */
struct {
unsigned long packets;
- u64 bytes;
unsigned long last_rx;
unsigned long num_duplicates;
unsigned long fragments;
@@ -453,6 +453,9 @@ struct sta_info {
u8 chains;
s8 chain_signal_last[IEEE80211_MAX_CHAINS];
u16 last_rate;
+
+ struct u64_stats_sync syncp;
+ u64 bytes;
u64 msdu[IEEE80211_NUM_TIDS + 1];
} rx_stats;
struct {
OpenPOWER on IntegriCloud