On Mon, Sep 16, 2019 at 02:50:53PM -0700, Arlie Davis wrote: > See section 4.2.2 for the specs on the transfer descriptor. > > Here's my patch that fixes it: > > diff --git a/drivers/net/ethernet/dec/tulip/de2104x.c > b/drivers/net/ethernet/dec/tulip/de2104x.c > index f1a2da15dd0a..3a420ceb52e5 100644 > --- a/drivers/net/ethernet/dec/tulip/de2104x.c > +++ b/drivers/net/ethernet/dec/tulip/de2104x.c > @@ -545,6 +545,7 @@ static void de_tx (struct de_private *de) > while (tx_tail != tx_head) { > struct sk_buff *skb; > u32 status; > + u32 control; > > rmb(); > status = le32_to_cpu(de->tx_ring[tx_tail].opts1); > @@ -565,7 +566,8 @@ static void de_tx (struct de_private *de) > pci_unmap_single(de->pdev, de->tx_skb[tx_tail].mapping, > skb->len, PCI_DMA_TODEVICE); > > - if (status & LastFrag) { > + control = le32_to_cpu(de->tx_ring[tx_tail].opts2); > + if (control & LastFrag) { how about just remove the complete if ? We know that we always use one descriptor per packet and chip doesn't touch control field. So I see no reason to check it here. Tulip driver for 2114x cards doesn't check it neither. Thomas. -- Crap can work. Given enough thrust pigs will fly, but it's not necessarily a good idea. [ RFC1925, 2.3 ]