On Wed, 28 Aug 2019 22:27:30 +0200, Heiner Kallweit wrote: > On RTL8125 this bit is always cleared after send. Therefore check for > tx_skb->skb being set what is functionally equivalent. > > Signed-off-by: Heiner Kallweit <hkallwe...@gmail.com> > --- > drivers/net/ethernet/realtek/r8169_main.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/realtek/r8169_main.c > b/drivers/net/ethernet/realtek/r8169_main.c > index 652bacf62..4489cd9f2 100644 > --- a/drivers/net/ethernet/realtek/r8169_main.c > +++ b/drivers/net/ethernet/realtek/r8169_main.c > @@ -5713,7 +5713,7 @@ static void rtl_tx(struct net_device *dev, struct > rtl8169_private *tp, > > rtl8169_unmap_tx_skb(tp_to_dev(tp), tx_skb, > tp->TxDescArray + entry); > - if (status & LastFrag) { > + if (tx_skb->skb) { > pkts_compl++; > bytes_compl += tx_skb->skb->len; > napi_consume_skb(tx_skb->skb, budget);
Hmm.. the dma_rmb() looks a little sus. Honestly I'm unclear on what it was doing in the first place. READ_ONCE() should've been sufficient.. And it's not obviously clear what does the smp_rmb() at the start of the function pair with. But I don't think you're making anything worse here :)