On Tue, Nov 19, 2019 at 01:24:08PM +0100, Markus Theil wrote: > This patch removes a mt76_wr_copy call from the beacon path to hw. > The skb which is used in this place gets therefore build with txwi > inside its data. For mt76 usb drivers, this saves one synchronuous > copy call over usb, which lets the beacon work complete faster. > > Signed-off-by: Markus Theil <markus.theil@xxxxxxxxxxxxx> > --- > drivers/net/wireless/mediatek/mt76/mt76x02_beacon.c | 10 +++++----- > 1 file changed, 5 insertions(+), 5 deletions(-) > > diff --git a/drivers/net/wireless/mediatek/mt76/mt76x02_beacon.c b/drivers/net/wireless/mediatek/mt76/mt76x02_beacon.c > index 09013adae854..a9df8f2d41b8 100644 > --- a/drivers/net/wireless/mediatek/mt76/mt76x02_beacon.c > +++ b/drivers/net/wireless/mediatek/mt76/mt76x02_beacon.c > @@ -26,15 +26,15 @@ static int > mt76x02_write_beacon(struct mt76x02_dev *dev, int offset, struct sk_buff *skb) > { > int beacon_len = dev->beacon_ops->slot_size; > - struct mt76x02_txwi txwi; > + struct mt76x02_txwi *txwi; > > if (WARN_ON_ONCE(beacon_len < skb->len + sizeof(struct mt76x02_txwi))) > return -ENOSPC; > > - mt76x02_mac_write_txwi(dev, &txwi, skb, NULL, NULL, skb->len); > - > - mt76_wr_copy(dev, offset, &txwi, sizeof(txwi)); > - offset += sizeof(txwi); > + mt76_insert_hdr_pad(skb); > + txwi = (struct mt76x02_txwi *)(skb->data - sizeof(*txwi)); > + mt76x02_mac_write_txwi(dev, txwi, skb, NULL, NULL, skb->len); > + skb_push(skb, sizeof(*txwi)); This require enough skb headroom for txwi . Mac80211 reserve headroom for us according to hw->extra_tx_headroom . Currently we ask for extra space for txwi only for usb in mt76x02_init_device(). So this code should be put under mt76_is_usb() condition or, what I think is less preferred, reserve extra space also for mmio. Stanislaw