diff options
author | Johannes Berg <johannes.berg@intel.com> | 2016-03-31 13:02:05 -0400 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2016-04-06 07:18:15 -0400 |
commit | 0be6ed133835b1a5e492f86099ce372b5a2e2296 (patch) | |
tree | 22100670875711abc06de00bb6cb05eeca4a2526 /net/mac80211 | |
parent | 8ebaa5b0a791631dddbb3a215b342fabb2a5307b (diff) |
mac80211: move averaged values out of rx_stats
Move the averaged values out of rx_stats and into rx_stats_avg,
to cleanly split them out. The averaged ones cannot be supported
for parallel RX in a per-CPU fashion, while the other values can
be collected per CPU and then combined/selected when needed.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211')
-rw-r--r-- | net/mac80211/mesh_plink.c | 2 | ||||
-rw-r--r-- | net/mac80211/rx.c | 4 | ||||
-rw-r--r-- | net/mac80211/sta_info.c | 10 | ||||
-rw-r--r-- | net/mac80211/sta_info.h | 6 |
4 files changed, 12 insertions, 10 deletions
diff --git a/net/mac80211/mesh_plink.c b/net/mac80211/mesh_plink.c index ecfba8ad29e4..563bea050383 100644 --- a/net/mac80211/mesh_plink.c +++ b/net/mac80211/mesh_plink.c | |||
@@ -61,7 +61,7 @@ static bool rssi_threshold_check(struct ieee80211_sub_if_data *sdata, | |||
61 | s32 rssi_threshold = sdata->u.mesh.mshcfg.rssi_threshold; | 61 | s32 rssi_threshold = sdata->u.mesh.mshcfg.rssi_threshold; |
62 | return rssi_threshold == 0 || | 62 | return rssi_threshold == 0 || |
63 | (sta && | 63 | (sta && |
64 | (s8)-ewma_signal_read(&sta->rx_stats.avg_signal) > | 64 | (s8)-ewma_signal_read(&sta->rx_stats_avg.signal) > |
65 | rssi_threshold); | 65 | rssi_threshold); |
66 | } | 66 | } |
67 | 67 | ||
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index 570ae3d03ae1..d14c66df9e86 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
@@ -1455,7 +1455,7 @@ ieee80211_rx_h_sta_process(struct ieee80211_rx_data *rx) | |||
1455 | sta->rx_stats.bytes += rx->skb->len; | 1455 | sta->rx_stats.bytes += rx->skb->len; |
1456 | if (!(status->flag & RX_FLAG_NO_SIGNAL_VAL)) { | 1456 | if (!(status->flag & RX_FLAG_NO_SIGNAL_VAL)) { |
1457 | sta->rx_stats.last_signal = status->signal; | 1457 | sta->rx_stats.last_signal = status->signal; |
1458 | ewma_signal_add(&sta->rx_stats.avg_signal, -status->signal); | 1458 | ewma_signal_add(&sta->rx_stats_avg.signal, -status->signal); |
1459 | } | 1459 | } |
1460 | 1460 | ||
1461 | if (status->chains) { | 1461 | if (status->chains) { |
@@ -1467,7 +1467,7 @@ ieee80211_rx_h_sta_process(struct ieee80211_rx_data *rx) | |||
1467 | continue; | 1467 | continue; |
1468 | 1468 | ||
1469 | sta->rx_stats.chain_signal_last[i] = signal; | 1469 | sta->rx_stats.chain_signal_last[i] = signal; |
1470 | ewma_signal_add(&sta->rx_stats.chain_signal_avg[i], | 1470 | ewma_signal_add(&sta->rx_stats_avg.chain_signal[i], |
1471 | -signal); | 1471 | -signal); |
1472 | } | 1472 | } |
1473 | } | 1473 | } |
diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c index 01e070c6e713..4f19505f3757 100644 --- a/net/mac80211/sta_info.c +++ b/net/mac80211/sta_info.c | |||
@@ -341,9 +341,9 @@ struct sta_info *sta_info_alloc(struct ieee80211_sub_if_data *sdata, | |||
341 | sta->reserved_tid = IEEE80211_TID_UNRESERVED; | 341 | sta->reserved_tid = IEEE80211_TID_UNRESERVED; |
342 | 342 | ||
343 | sta->last_connected = ktime_get_seconds(); | 343 | sta->last_connected = ktime_get_seconds(); |
344 | ewma_signal_init(&sta->rx_stats.avg_signal); | 344 | ewma_signal_init(&sta->rx_stats_avg.signal); |
345 | for (i = 0; i < ARRAY_SIZE(sta->rx_stats.chain_signal_avg); i++) | 345 | for (i = 0; i < ARRAY_SIZE(sta->rx_stats_avg.chain_signal); i++) |
346 | ewma_signal_init(&sta->rx_stats.chain_signal_avg[i]); | 346 | ewma_signal_init(&sta->rx_stats_avg.chain_signal[i]); |
347 | 347 | ||
348 | if (local->ops->wake_tx_queue) { | 348 | if (local->ops->wake_tx_queue) { |
349 | void *txq_data; | 349 | void *txq_data; |
@@ -2056,7 +2056,7 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo) | |||
2056 | 2056 | ||
2057 | if (!(sinfo->filled & BIT(NL80211_STA_INFO_SIGNAL_AVG))) { | 2057 | if (!(sinfo->filled & BIT(NL80211_STA_INFO_SIGNAL_AVG))) { |
2058 | sinfo->signal_avg = | 2058 | sinfo->signal_avg = |
2059 | -ewma_signal_read(&sta->rx_stats.avg_signal); | 2059 | -ewma_signal_read(&sta->rx_stats_avg.signal); |
2060 | sinfo->filled |= BIT(NL80211_STA_INFO_SIGNAL_AVG); | 2060 | sinfo->filled |= BIT(NL80211_STA_INFO_SIGNAL_AVG); |
2061 | } | 2061 | } |
2062 | } | 2062 | } |
@@ -2072,7 +2072,7 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo) | |||
2072 | sinfo->chain_signal[i] = | 2072 | sinfo->chain_signal[i] = |
2073 | sta->rx_stats.chain_signal_last[i]; | 2073 | sta->rx_stats.chain_signal_last[i]; |
2074 | sinfo->chain_signal_avg[i] = | 2074 | sinfo->chain_signal_avg[i] = |
2075 | -ewma_signal_read(&sta->rx_stats.chain_signal_avg[i]); | 2075 | -ewma_signal_read(&sta->rx_stats_avg.chain_signal[i]); |
2076 | } | 2076 | } |
2077 | } | 2077 | } |
2078 | 2078 | ||
diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h index 4e1ed6f26484..93dc567e6100 100644 --- a/net/mac80211/sta_info.h +++ b/net/mac80211/sta_info.h | |||
@@ -450,16 +450,18 @@ struct sta_info { | |||
450 | unsigned long fragments; | 450 | unsigned long fragments; |
451 | unsigned long dropped; | 451 | unsigned long dropped; |
452 | int last_signal; | 452 | int last_signal; |
453 | struct ewma_signal avg_signal; | ||
454 | u8 chains; | 453 | u8 chains; |
455 | s8 chain_signal_last[IEEE80211_MAX_CHAINS]; | 454 | s8 chain_signal_last[IEEE80211_MAX_CHAINS]; |
456 | struct ewma_signal chain_signal_avg[IEEE80211_MAX_CHAINS]; | ||
457 | int last_rate_idx; | 455 | int last_rate_idx; |
458 | u32 last_rate_flag; | 456 | u32 last_rate_flag; |
459 | u32 last_rate_vht_flag; | 457 | u32 last_rate_vht_flag; |
460 | u8 last_rate_vht_nss; | 458 | u8 last_rate_vht_nss; |
461 | u64 msdu[IEEE80211_NUM_TIDS + 1]; | 459 | u64 msdu[IEEE80211_NUM_TIDS + 1]; |
462 | } rx_stats; | 460 | } rx_stats; |
461 | struct { | ||
462 | struct ewma_signal signal; | ||
463 | struct ewma_signal chain_signal[IEEE80211_MAX_CHAINS]; | ||
464 | } rx_stats_avg; | ||
463 | 465 | ||
464 | /* Plus 1 for non-QoS frames */ | 466 | /* Plus 1 for non-QoS frames */ |
465 | __le16 last_seq_ctrl[IEEE80211_NUM_TIDS + 1]; | 467 | __le16 last_seq_ctrl[IEEE80211_NUM_TIDS + 1]; |