Message ID | 20200917125031.45009-1-nbd@nbd.name |
---|---|
State | New |
Headers | show |
Series | mac80211: do not allow bigger VHT MPDUs than the hardware supports | expand |
On 17/09/2020 15:50, Felix Fietkau wrote: > Limit maximum VHT MPDU size by local capability > > Signed-off-by: Felix Fietkau <nbd@nbd.name> > --- > net/mac80211/vht.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/net/mac80211/vht.c b/net/mac80211/vht.c > index 7e601d067d53..fb0e3a657d2d 100644 > --- a/net/mac80211/vht.c > +++ b/net/mac80211/vht.c > @@ -168,10 +168,7 @@ ieee80211_vht_cap_ie_to_sta_vht_cap(struct ieee80211_sub_if_data *sdata, > /* take some capabilities as-is */ > cap_info = le32_to_cpu(vht_cap_ie->vht_cap_info); > vht_cap->cap = cap_info; > - vht_cap->cap &= IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_3895 | > - IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_7991 | > - IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454 | > - IEEE80211_VHT_CAP_RXLDPC | > + vht_cap->cap &= IEEE80211_VHT_CAP_RXLDPC | > IEEE80211_VHT_CAP_VHT_TXOP_PS | > IEEE80211_VHT_CAP_HTC_VHT | > IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK | > @@ -180,6 +177,9 @@ ieee80211_vht_cap_ie_to_sta_vht_cap(struct ieee80211_sub_if_data *sdata, > IEEE80211_VHT_CAP_RX_ANTENNA_PATTERN | > IEEE80211_VHT_CAP_TX_ANTENNA_PATTERN; > > + vht_cap->cap |= min_t(u32, cap_info & IEEE80211_VHT_CAP_MAX_MPDU_MASK, > + own_cap.cap & IEEE80211_VHT_CAP_MAX_MPDU_MASK); > + > /* and some based on our own capabilities */ > switch (own_cap.cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK) { > case IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ: > The vht_cap->cap IEEE80211_VHT_CAP_MAX_MPDU* reflect the associated STA _RX_ capabilities. Why would you override the original STA _RX_ capabilities (vht_cap->cap) with your own HW _RX_ size limitation ? e.g. if HW support 11454 in TX and 3895 in RX, due to this change, you limit your TX to your own _RX_ limitation (3895) while STA actually reported 11454 RX.
diff --git a/net/mac80211/vht.c b/net/mac80211/vht.c index 7e601d067d53..fb0e3a657d2d 100644 --- a/net/mac80211/vht.c +++ b/net/mac80211/vht.c @@ -168,10 +168,7 @@ ieee80211_vht_cap_ie_to_sta_vht_cap(struct ieee80211_sub_if_data *sdata, /* take some capabilities as-is */ cap_info = le32_to_cpu(vht_cap_ie->vht_cap_info); vht_cap->cap = cap_info; - vht_cap->cap &= IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_3895 | - IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_7991 | - IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454 | - IEEE80211_VHT_CAP_RXLDPC | + vht_cap->cap &= IEEE80211_VHT_CAP_RXLDPC | IEEE80211_VHT_CAP_VHT_TXOP_PS | IEEE80211_VHT_CAP_HTC_VHT | IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK | @@ -180,6 +177,9 @@ ieee80211_vht_cap_ie_to_sta_vht_cap(struct ieee80211_sub_if_data *sdata, IEEE80211_VHT_CAP_RX_ANTENNA_PATTERN | IEEE80211_VHT_CAP_TX_ANTENNA_PATTERN; + vht_cap->cap |= min_t(u32, cap_info & IEEE80211_VHT_CAP_MAX_MPDU_MASK, + own_cap.cap & IEEE80211_VHT_CAP_MAX_MPDU_MASK); + /* and some based on our own capabilities */ switch (own_cap.cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK) { case IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ:
Limit maximum VHT MPDU size by local capability Signed-off-by: Felix Fietkau <nbd@nbd.name> --- net/mac80211/vht.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)