aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/334-mac80211-minstrel_ht-move-supported-bitrate-mask-out.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/334-mac80211-minstrel_ht-move-supported-bitrate-mask-out.patch')
-rw-r--r--package/kernel/mac80211/patches/334-mac80211-minstrel_ht-move-supported-bitrate-mask-out.patch196
1 files changed, 196 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/334-mac80211-minstrel_ht-move-supported-bitrate-mask-out.patch b/package/kernel/mac80211/patches/334-mac80211-minstrel_ht-move-supported-bitrate-mask-out.patch
new file mode 100644
index 0000000000..5e5992e6b4
--- /dev/null
+++ b/package/kernel/mac80211/patches/334-mac80211-minstrel_ht-move-supported-bitrate-mask-out.patch
@@ -0,0 +1,196 @@
+From: Felix Fietkau <nbd@nbd.name>
+Date: Wed, 14 Dec 2016 19:33:23 +0100
+Subject: [PATCH] mac80211: minstrel_ht: move supported bitrate mask out of
+ group data
+
+Improves dcache footprint by ensuring that fewer cache lines need to be
+touched.
+
+Signed-off-by: Felix Fietkau <nbd@nbd.name>
+---
+
+--- a/net/mac80211/rc80211_minstrel_ht.c
++++ b/net/mac80211/rc80211_minstrel_ht.c
+@@ -301,7 +301,7 @@ minstrel_ht_get_stats(struct minstrel_pr
+ break;
+
+ /* short preamble */
+- if (!(mi->groups[group].supported & BIT(idx)))
++ if (!(mi->supported[group] & BIT(idx)))
+ idx += 4;
+ }
+ return &mi->groups[group].rates[idx];
+@@ -486,7 +486,7 @@ minstrel_ht_prob_rate_reduce_streams(str
+ MCS_GROUP_RATES].streams;
+ for (group = 0; group < ARRAY_SIZE(minstrel_mcs_groups); group++) {
+ mg = &mi->groups[group];
+- if (!mg->supported || group == MINSTREL_CCK_GROUP)
++ if (!mi->supported[group] || group == MINSTREL_CCK_GROUP)
+ continue;
+
+ tmp_idx = mg->max_group_prob_rate % MCS_GROUP_RATES;
+@@ -540,7 +540,7 @@ minstrel_ht_update_stats(struct minstrel
+ for (group = 0; group < ARRAY_SIZE(minstrel_mcs_groups); group++) {
+
+ mg = &mi->groups[group];
+- if (!mg->supported)
++ if (!mi->supported[group])
+ continue;
+
+ mi->sample_count++;
+@@ -550,7 +550,7 @@ minstrel_ht_update_stats(struct minstrel
+ tmp_group_tp_rate[j] = group;
+
+ for (i = 0; i < MCS_GROUP_RATES; i++) {
+- if (!(mg->supported & BIT(i)))
++ if (!(mi->supported[group] & BIT(i)))
+ continue;
+
+ index = MCS_GROUP_RATES * group + i;
+@@ -636,7 +636,7 @@ minstrel_set_next_sample_idx(struct mins
+ mi->sample_group %= ARRAY_SIZE(minstrel_mcs_groups);
+ mg = &mi->groups[mi->sample_group];
+
+- if (!mg->supported)
++ if (!mi->supported[mi->sample_group])
+ continue;
+
+ if (++mg->index >= MCS_GROUP_RATES) {
+@@ -657,7 +657,7 @@ minstrel_downgrade_rate(struct minstrel_
+ while (group > 0) {
+ group--;
+
+- if (!mi->groups[group].supported)
++ if (!mi->supported[group])
+ continue;
+
+ if (minstrel_mcs_groups[group].streams >
+@@ -994,7 +994,7 @@ minstrel_get_sample_rate(struct minstrel
+ sample_idx = sample_table[mg->column][mg->index];
+ minstrel_set_next_sample_idx(mi);
+
+- if (!(mg->supported & BIT(sample_idx)))
++ if (!(mi->supported[sample_group] & BIT(sample_idx)))
+ return -1;
+
+ mrs = &mg->rates[sample_idx];
+@@ -1052,7 +1052,7 @@ static void
+ minstrel_ht_check_cck_shortpreamble(struct minstrel_priv *mp,
+ struct minstrel_ht_sta *mi, bool val)
+ {
+- u8 supported = mi->groups[MINSTREL_CCK_GROUP].supported;
++ u8 supported = mi->supported[MINSTREL_CCK_GROUP];
+
+ if (!supported || !mi->cck_supported_short)
+ return;
+@@ -1061,7 +1061,7 @@ minstrel_ht_check_cck_shortpreamble(stru
+ return;
+
+ supported ^= mi->cck_supported_short | (mi->cck_supported_short << 4);
+- mi->groups[MINSTREL_CCK_GROUP].supported = supported;
++ mi->supported[MINSTREL_CCK_GROUP] = supported;
+ }
+
+ static void
+@@ -1154,7 +1154,7 @@ minstrel_ht_update_cck(struct minstrel_p
+ mi->cck_supported_short |= BIT(i);
+ }
+
+- mi->groups[MINSTREL_CCK_GROUP].supported = mi->cck_supported;
++ mi->supported[MINSTREL_CCK_GROUP] = mi->cck_supported;
+ }
+
+ static void
+@@ -1233,7 +1233,7 @@ minstrel_ht_update_caps(void *priv, stru
+ u32 gflags = minstrel_mcs_groups[i].flags;
+ int bw, nss;
+
+- mi->groups[i].supported = 0;
++ mi->supported[i] = 0;
+ if (i == MINSTREL_CCK_GROUP) {
+ minstrel_ht_update_cck(mp, mi, sband, sta);
+ continue;
+@@ -1265,8 +1265,8 @@ minstrel_ht_update_caps(void *priv, stru
+ if (use_vht && minstrel_vht_only)
+ continue;
+ #endif
+- mi->groups[i].supported = mcs->rx_mask[nss - 1];
+- if (mi->groups[i].supported)
++ mi->supported[i] = mcs->rx_mask[nss - 1];
++ if (mi->supported[i])
+ n_supported++;
+ continue;
+ }
+@@ -1292,10 +1292,10 @@ minstrel_ht_update_caps(void *priv, stru
+ else
+ bw = BW_20;
+
+- mi->groups[i].supported = minstrel_get_valid_vht_rates(bw, nss,
++ mi->supported[i] = minstrel_get_valid_vht_rates(bw, nss,
+ vht_cap->vht_mcs.tx_mcs_map);
+
+- if (mi->groups[i].supported)
++ if (mi->supported[i])
+ n_supported++;
+ }
+
+--- a/net/mac80211/rc80211_minstrel_ht.h
++++ b/net/mac80211/rc80211_minstrel_ht.h
+@@ -52,9 +52,6 @@ struct minstrel_mcs_group_data {
+ u8 index;
+ u8 column;
+
+- /* bitfield of supported MCS rates of this group */
+- u16 supported;
+-
+ /* sorted rate set within a MCS group*/
+ u16 max_group_tp_rate[MAX_THR_RATES];
+ u16 max_group_prob_rate;
+@@ -101,6 +98,9 @@ struct minstrel_ht_sta {
+ u8 cck_supported;
+ u8 cck_supported_short;
+
++ /* Bitfield of supported MCS rates of all groups */
++ u16 supported[MINSTREL_GROUPS_NB];
++
+ /* MCS rate group info and statistics */
+ struct minstrel_mcs_group_data groups[MINSTREL_GROUPS_NB];
+ };
+--- a/net/mac80211/rc80211_minstrel_ht_debugfs.c
++++ b/net/mac80211/rc80211_minstrel_ht_debugfs.c
+@@ -24,7 +24,7 @@ minstrel_ht_stats_dump(struct minstrel_h
+ char gimode = 'L';
+ u32 gflags;
+
+- if (!mi->groups[i].supported)
++ if (!mi->supported[i])
+ return p;
+
+ mg = &minstrel_mcs_groups[i];
+@@ -42,7 +42,7 @@ minstrel_ht_stats_dump(struct minstrel_h
+ static const int bitrates[4] = { 10, 20, 55, 110 };
+ int idx = i * MCS_GROUP_RATES + j;
+
+- if (!(mi->groups[i].supported & BIT(j)))
++ if (!(mi->supported[i] & BIT(j)))
+ continue;
+
+ if (gflags & IEEE80211_TX_RC_MCS) {
+@@ -170,7 +170,7 @@ minstrel_ht_stats_csv_dump(struct minstr
+ char gimode = 'L';
+ u32 gflags;
+
+- if (!mi->groups[i].supported)
++ if (!mi->supported[i])
+ return p;
+
+ mg = &minstrel_mcs_groups[i];
+@@ -188,7 +188,7 @@ minstrel_ht_stats_csv_dump(struct minstr
+ static const int bitrates[4] = { 10, 20, 55, 110 };
+ int idx = i * MCS_GROUP_RATES + j;
+
+- if (!(mi->groups[i].supported & BIT(j)))
++ if (!(mi->supported[i] & BIT(j)))
+ continue;
+
+ if (gflags & IEEE80211_TX_RC_MCS) {