e1000: Small packets may get corrupted during padding by HW
On PCI/PCI-X HW, if packet size is less than ETH_ZLEN, packets may get corrupted during padding by HW. To WA this issue, pad all small packets manually. Signed-off-by: Tushar Dave <tushar.n.dave@intel.com> Tested-by: Aaron Brown <aaron.f.brown@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
433a195480
commit
59d86c760f
@@ -3149,6 +3149,17 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
|
|||||||
return NETDEV_TX_OK;
|
return NETDEV_TX_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* On PCI/PCI-X HW, if packet size is less than ETH_ZLEN,
|
||||||
|
* packets may get corrupted during padding by HW.
|
||||||
|
* To WA this issue, pad all small packets manually.
|
||||||
|
*/
|
||||||
|
if (skb->len < ETH_ZLEN) {
|
||||||
|
if (skb_pad(skb, ETH_ZLEN - skb->len))
|
||||||
|
return NETDEV_TX_OK;
|
||||||
|
skb->len = ETH_ZLEN;
|
||||||
|
skb_set_tail_pointer(skb, ETH_ZLEN);
|
||||||
|
}
|
||||||
|
|
||||||
mss = skb_shinfo(skb)->gso_size;
|
mss = skb_shinfo(skb)->gso_size;
|
||||||
/* The controller does a simple calculation to
|
/* The controller does a simple calculation to
|
||||||
* make sure there is enough room in the FIFO before
|
* make sure there is enough room in the FIFO before
|
||||||
|
|||||||
Reference in New Issue
Block a user