Skip to content

Commit

Permalink
mac80211: minstrel_ht: move supported bitrate mask out of group data
Browse files Browse the repository at this point in the history
Improves dcache footprint by ensuring that fewer cache lines need to be
touched.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  • Loading branch information
Felix Fietkau authored and Johannes Berg committed Dec 15, 2016
1 parent 0c2e384 commit 41d0858
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 22 deletions.
30 changes: 15 additions & 15 deletions net/mac80211/rc80211_minstrel_ht.c
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,7 @@ minstrel_ht_get_stats(struct minstrel_priv *mp, struct minstrel_ht_sta *mi,
break;

/* short preamble */
if (!(mi->groups[group].supported & BIT(idx)))
if (!(mi->supported[group] & BIT(idx)))
idx += 4;
}
return &mi->groups[group].rates[idx];
Expand Down Expand Up @@ -486,7 +486,7 @@ minstrel_ht_prob_rate_reduce_streams(struct minstrel_ht_sta *mi)
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;
Expand Down Expand Up @@ -540,7 +540,7 @@ minstrel_ht_update_stats(struct minstrel_priv *mp, struct minstrel_ht_sta *mi)
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++;
Expand All @@ -550,7 +550,7 @@ minstrel_ht_update_stats(struct minstrel_priv *mp, struct minstrel_ht_sta *mi)
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;
Expand Down Expand Up @@ -636,7 +636,7 @@ minstrel_set_next_sample_idx(struct minstrel_ht_sta *mi)
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) {
Expand All @@ -657,7 +657,7 @@ minstrel_downgrade_rate(struct minstrel_ht_sta *mi, u16 *idx, bool primary)
while (group > 0) {
group--;

if (!mi->groups[group].supported)
if (!mi->supported[group])
continue;

if (minstrel_mcs_groups[group].streams >
Expand Down Expand Up @@ -994,7 +994,7 @@ minstrel_get_sample_rate(struct minstrel_priv *mp, struct minstrel_ht_sta *mi)
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];
Expand Down Expand Up @@ -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;
Expand All @@ -1061,7 +1061,7 @@ minstrel_ht_check_cck_shortpreamble(struct minstrel_priv *mp,
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
Expand Down Expand Up @@ -1154,7 +1154,7 @@ minstrel_ht_update_cck(struct minstrel_priv *mp, struct minstrel_ht_sta *mi,
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
Expand Down Expand Up @@ -1224,7 +1224,7 @@ minstrel_ht_update_caps(void *priv, struct ieee80211_supported_band *sband,
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;
Expand Down Expand Up @@ -1256,8 +1256,8 @@ minstrel_ht_update_caps(void *priv, struct ieee80211_supported_band *sband,
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;
}
Expand All @@ -1283,10 +1283,10 @@ minstrel_ht_update_caps(void *priv, struct ieee80211_supported_band *sband,
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++;
}

Expand Down
6 changes: 3 additions & 3 deletions net/mac80211/rc80211_minstrel_ht.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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];
};
Expand Down
8 changes: 4 additions & 4 deletions net/mac80211/rc80211_minstrel_ht_debugfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ minstrel_ht_stats_dump(struct minstrel_ht_sta *mi, int i, char *p)
char gimode = 'L';
u32 gflags;

if (!mi->groups[i].supported)
if (!mi->supported[i])
return p;

mg = &minstrel_mcs_groups[i];
Expand All @@ -42,7 +42,7 @@ minstrel_ht_stats_dump(struct minstrel_ht_sta *mi, int i, char *p)
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) {
Expand Down Expand Up @@ -170,7 +170,7 @@ minstrel_ht_stats_csv_dump(struct minstrel_ht_sta *mi, int i, char *p)
char gimode = 'L';
u32 gflags;

if (!mi->groups[i].supported)
if (!mi->supported[i])
return p;

mg = &minstrel_mcs_groups[i];
Expand All @@ -188,7 +188,7 @@ minstrel_ht_stats_csv_dump(struct minstrel_ht_sta *mi, int i, char *p)
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) {
Expand Down

0 comments on commit 41d0858

Please sign in to comment.