mlx4: Advertise that the NIC pads to mintu
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 23 May 2017 18:00:58 +0000 (14:00 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 23 May 2017 18:00:58 +0000 (14:00 -0400)
The minimum ethernet packet is 60 bytes.  A TCP/IP packet with no options
and no data is 40 bytes.  The ethernet MAC is 14 bytes.  The extra 6 bytes
need to come from somewhere.

Some NICs will pad those bits in hardware, including the mlx4.  If we pad
them in software, the NIC can get confused.  This showed itself as TCP ACKs
with bad checksums when we used checksum offload.  The NIC computed a value
that was off by 6 - the size of the padding.  Not sure why, exactly.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/drivers/net/mlx4/en_netdev.c

index bdf20e8..777c382 100644 (file)
@@ -2995,7 +2995,7 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port,
                        NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX |
                        NETIF_F_HW_VLAN_CTAG_FILTER;
 #else
-       dev->feat = NETIF_F_SG | NETIF_F_IP_CSUM;
+       dev->feat = NETIF_F_SG | NETIF_F_IP_CSUM | NETF_PADMIN;
 #endif
        dev->hw_features |= NETIF_F_LOOPBACK |
                        NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX;