123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- 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) {
|