> From: Sean Wang > > 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 > Signed-off-by: Sean Wang > --- > 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 f5a8f7fa4244..8e49df20a8cb 100644 > --- a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c > +++ b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c > @@ -458,7 +458,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); is it true for sdio only? if so what about doing something like: if (mt76_is_sdio() && 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 >