summaryrefslogtreecommitdiffstats
path: root/net/mac80211/sta_info.h
diff options
context:
space:
mode:
authorJohannes Berg2016-03-31 19:02:11 +0200
committerJohannes Berg2016-04-06 13:18:19 +0200
commitc9c5962b56c10c34d8fedc20cd6d6ebdaa2383c6 (patch)
tree3b5b98cc8a18efeffabc86ed6ac4247b7311a294 /net/mac80211/sta_info.h
parentmac80211: add fast-rx path (diff)
downloadkernel-qcow2-linux-c9c5962b56c10c34d8fedc20cd6d6ebdaa2383c6.tar.gz
kernel-qcow2-linux-c9c5962b56c10c34d8fedc20cd6d6ebdaa2383c6.tar.xz
kernel-qcow2-linux-c9c5962b56c10c34d8fedc20cd6d6ebdaa2383c6.zip
mac80211: enable collecting station statistics per-CPU
If the driver advertises the new HW flag USE_RSS, make the station statistics on the fast-rx path per-CPU. This will enable calling the RX in parallel, only hitting locking or shared cachelines when the fast-RX path isn't available. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/sta_info.h')
-rw-r--r--net/mac80211/sta_info.h38
1 files changed, 22 insertions, 16 deletions
diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h
index a0a06609338d..dd6c6d400208 100644
--- a/net/mac80211/sta_info.h
+++ b/net/mac80211/sta_info.h
@@ -297,6 +297,7 @@ struct ieee80211_fast_tx {
* @key: bool indicating encryption is expected (key is set)
* @sta_notify: notify the MLME code (once)
* @internal_forward: forward froms internally on AP/VLAN type interfaces
+ * @uses_rss: copy of USES_RSS hw flag
* @da_offs: offset of the DA in the header (for header conversion)
* @sa_offs: offset of the SA in the header (for header conversion)
* @rcu_head: RCU head for freeing this structure
@@ -311,7 +312,8 @@ struct ieee80211_fast_rx {
u8 icv_len;
u8 key:1,
sta_notify:1,
- internal_forward:1;
+ internal_forward:1,
+ uses_rss:1;
u8 da_offs, sa_offs;
struct rcu_head rcu_head;
@@ -367,6 +369,21 @@ struct mesh_sta {
DECLARE_EWMA(signal, 1024, 8)
+struct ieee80211_sta_rx_stats {
+ unsigned long packets;
+ unsigned long last_rx;
+ unsigned long num_duplicates;
+ unsigned long fragments;
+ unsigned long dropped;
+ int last_signal;
+ 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];
+};
+
/**
* struct sta_info - STA information
*
@@ -428,6 +445,8 @@ DECLARE_EWMA(signal, 1024, 8)
* the BSS one.
* @tx_stats: TX statistics
* @rx_stats: RX statistics
+ * @pcpu_rx_stats: per-CPU RX statistics, assigned only if the driver needs
+ * this (by advertising the USES_RSS hw flag)
* @status_stats: TX status statistics
*/
struct sta_info {
@@ -448,6 +467,7 @@ struct sta_info {
struct ieee80211_fast_tx __rcu *fast_tx;
struct ieee80211_fast_rx __rcu *fast_rx;
+ struct ieee80211_sta_rx_stats __percpu *pcpu_rx_stats;
#ifdef CONFIG_MAC80211_MESH
struct mesh_sta *mesh;
@@ -477,21 +497,7 @@ struct sta_info {
long last_connected;
/* Updated from RX path only, no locking requirements */
- struct {
- unsigned long packets;
- unsigned long last_rx;
- unsigned long num_duplicates;
- unsigned long fragments;
- unsigned long dropped;
- int last_signal;
- 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 ieee80211_sta_rx_stats rx_stats;
struct {
struct ewma_signal signal;
struct ewma_signal chain_signal[IEEE80211_MAX_CHAINS];