Message ID | a6aebd446a9aa7902397a7e7b87fe427076fc9df.1631918993.git.objelf@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Felix Fietkau |
Headers | show |
Series | Add MT7921 SDIO support | expand |
> From: Sean Wang <sean.wang@mediatek.com> > > The longer event such as the event for mcu_get_nic_capability would hold > the data in paged fragment skb for the SDIO device so we turn the skb to > be linearized skb before accessing it to reuse the same event parser > betweem mt7921s and mt7921e. > > Tested-by: Deren Wu <deren.wu@mediatek.com> > Signed-off-by: Sean Wang <sean.wang@mediatek.com> > --- > drivers/net/wireless/mediatek/mt76/mt7921/mcu.c | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c > index 866b8797f16e..863781895652 100644 > --- a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c > +++ b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c > @@ -456,7 +456,14 @@ mt7921_mcu_rx_unsolicited_event(struct mt7921_dev *dev, struct sk_buff *skb) > > void mt7921_mcu_rx_event(struct mt7921_dev *dev, struct sk_buff *skb) > { > - struct mt7921_mcu_rxd *rxd = (struct mt7921_mcu_rxd *)skb->data; > + struct mt7921_mcu_rxd *rxd; > + int ret; > + > + ret = skb_linearize(skb); nit: we do not need ret variable here: if (skb_linearize(skb)) return; > + if (ret) > + return; > + > + rxd = (struct mt7921_mcu_rxd *)skb->data; > > if (rxd->eid == 0x6) { > mt76_mcu_rx_event(&dev->mt76, skb); > -- > 2.25.1 >
diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c index 866b8797f16e..863781895652 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c +++ b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c @@ -456,7 +456,14 @@ mt7921_mcu_rx_unsolicited_event(struct mt7921_dev *dev, struct sk_buff *skb) void mt7921_mcu_rx_event(struct mt7921_dev *dev, struct sk_buff *skb) { - struct mt7921_mcu_rxd *rxd = (struct mt7921_mcu_rxd *)skb->data; + struct mt7921_mcu_rxd *rxd; + int ret; + + ret = skb_linearize(skb); + if (ret) + return; + + rxd = (struct mt7921_mcu_rxd *)skb->data; if (rxd->eid == 0x6) { mt76_mcu_rx_event(&dev->mt76, skb);