e1000e: Minimum packet size must be 17 bytes
authorTushar Dave <tushar.n.dave@intel.com>
Fri, 14 Sep 2012 02:21:37 +0000 (02:21 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Tue, 23 Oct 2012 08:02:19 +0000 (01:02 -0700)
This is a HW requirement. Although a buffer as short as 1 byte is allowed,
the total length of packet before, padding and CRC insertion, must be at
least 17 bytes.  So pad all small packets manually up to 17 bytes before
delivering them to HW.

Signed-off-by: Tushar Dave <tushar.n.dave@intel.com>
Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/e1000e/netdev.c

index f444eb0b76d8d9c0c7147b8dc4a9fa7266d517b9..dadb13be479af807812c4291e74cf99481f4019d 100644 (file)
@@ -5067,6 +5067,17 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
                return NETDEV_TX_OK;
        }
 
+       /*
+        * The minimum packet size with TCTL.PSP set is 17 bytes so
+        * pad skb in order to meet this minimum size requirement
+        */
+       if (unlikely(skb->len < 17)) {
+               if (skb_pad(skb, 17 - skb->len))
+                       return NETDEV_TX_OK;
+               skb->len = 17;
+               skb_set_tail_pointer(skb, 17);
+       }
+
        mss = skb_shinfo(skb)->gso_size;
        if (mss) {
                u8 hdr_len;