Message ID | 0b88b34cc5103e247c134901f9c39614128eb599.1638424783.git.deren.wu@mediatek.com (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Felix Fietkau |
Headers | show |
Series | mt76: fix 802.3 RX fail by hdr_trans | expand |
On 2021-12-02 08:40, Deren Wu wrote: > From: Deren Wu <deren.wu@mediatek.com> > > Should not run hdr_trans process for 802.3 packets, > this would cause all data frame RX fail. > > Fixes: d9930ec65b9f ("mt76: only set rx radiotap flag from within decoder functions") > Reviewed-by: Ryder Lee <ryder.lee@mediatek.com> > Signed-off-by: Deren Wu <deren.wu@mediatek.com> > --- > drivers/net/wireless/mediatek/mt76/mt7915/mac.c | 2 +- > drivers/net/wireless/mediatek/mt76/mt7921/mac.c | 3 +-- > 2 files changed, 2 insertions(+), 3 deletions(-) > > diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c > index 6c14cb1cfd5a..5757284b24a5 100644 > --- a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c > +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c > @@ -794,7 +794,7 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) > status->flag |= RX_FLAG_8023; > } > > - if (rxv && mode >= MT_PHY_TYPE_HE_SU) > + if (rxv && mode >= MT_PHY_TYPE_HE_SU && !(status->flag & RX_FLAG_8023)) > mt7915_mac_decode_he_radiotap(skb, rxv, mode); > > if (!status->wcid || !ieee80211_is_data_qos(fc)) > diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c > index e17c8f4c9747..eaffe665cb28 100644 > --- a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c > +++ b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c > @@ -780,7 +780,6 @@ mt7921_mac_fill_rx(struct mt7921_dev *dev, struct sk_buff *skb) > mt76_insert_ccmp_hdr(skb, key_id); > } > > - hdr = mt76_skb_get_hdr(skb); This line is not safe to remove, since mt76_insert_ccmp_hdr moves the header. However, there is a redundant call to mt76_skb_get_hdr above this part, which you can remove. Please do that in a separate patch though, since it has nothing to do with the rest of the changes. Thanks, - Felix
On 2021-12-02 09:37, Felix Fietkau wrote: > > On 2021-12-02 08:40, Deren Wu wrote: >> From: Deren Wu <deren.wu@mediatek.com> >> >> Should not run hdr_trans process for 802.3 packets, >> this would cause all data frame RX fail. >> >> Fixes: d9930ec65b9f ("mt76: only set rx radiotap flag from within decoder functions") >> Reviewed-by: Ryder Lee <ryder.lee@mediatek.com> >> Signed-off-by: Deren Wu <deren.wu@mediatek.com> >> --- >> drivers/net/wireless/mediatek/mt76/mt7915/mac.c | 2 +- >> drivers/net/wireless/mediatek/mt76/mt7921/mac.c | 3 +-- >> 2 files changed, 2 insertions(+), 3 deletions(-) >> >> diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c >> index 6c14cb1cfd5a..5757284b24a5 100644 >> --- a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c >> +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c >> @@ -794,7 +794,7 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) >> status->flag |= RX_FLAG_8023; >> } >> >> - if (rxv && mode >= MT_PHY_TYPE_HE_SU) >> + if (rxv && mode >= MT_PHY_TYPE_HE_SU && !(status->flag & RX_FLAG_8023)) >> mt7915_mac_decode_he_radiotap(skb, rxv, mode); >> >> if (!status->wcid || !ieee80211_is_data_qos(fc)) >> diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c >> index e17c8f4c9747..eaffe665cb28 100644 >> --- a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c >> +++ b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c >> @@ -780,7 +780,6 @@ mt7921_mac_fill_rx(struct mt7921_dev *dev, struct sk_buff *skb) >> mt76_insert_ccmp_hdr(skb, key_id); >> } >> >> - hdr = mt76_skb_get_hdr(skb); > This line is not safe to remove, since mt76_insert_ccmp_hdr moves the > header. However, there is a redundant call to mt76_skb_get_hdr above > this part, which you can remove. Please do that in a separate patch > though, since it has nothing to do with the rest of the changes. I folded this patch into the commit that it fixes (excluding the mt76_skb_get_hdr bit). - Felix
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c index 6c14cb1cfd5a..5757284b24a5 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c @@ -794,7 +794,7 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) status->flag |= RX_FLAG_8023; } - if (rxv && mode >= MT_PHY_TYPE_HE_SU) + if (rxv && mode >= MT_PHY_TYPE_HE_SU && !(status->flag & RX_FLAG_8023)) mt7915_mac_decode_he_radiotap(skb, rxv, mode); if (!status->wcid || !ieee80211_is_data_qos(fc)) diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c index e17c8f4c9747..eaffe665cb28 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c +++ b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c @@ -780,7 +780,6 @@ mt7921_mac_fill_rx(struct mt7921_dev *dev, struct sk_buff *skb) mt76_insert_ccmp_hdr(skb, key_id); } - hdr = mt76_skb_get_hdr(skb); fc = hdr->frame_control; if (ieee80211_is_data_qos(fc)) { seq_ctrl = le16_to_cpu(hdr->seq_ctrl); @@ -792,7 +791,7 @@ mt7921_mac_fill_rx(struct mt7921_dev *dev, struct sk_buff *skb) mt7921_mac_assoc_rssi(dev, skb); - if (rxv && mode >= MT_PHY_TYPE_HE_SU) + if (rxv && mode >= MT_PHY_TYPE_HE_SU && !(status->flag & RX_FLAG_8023)) mt7921_mac_decode_he_radiotap(skb, rxv, mode); if (!status->wcid || !ieee80211_is_data_qos(fc))