ixgbe: add double of VLAN header when computing the max MTU
authorJason Xing <kernelxing@tencent.com>
Thu, 9 Feb 2023 02:41:28 +0000 (10:41 +0800)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Tue, 14 Feb 2023 18:07:27 +0000 (10:07 -0800)
Include the second VLAN HLEN into account when computing the maximum
MTU size as other drivers do.

Fixes: fabf1bce103a ("ixgbe: Prevent unsupported configurations with XDP")
Signed-off-by: Jason Xing <kernelxing@tencent.com>
Reviewed-by: Alexander Duyck <alexanderduyck@fb.com>
Tested-by: Chandan Kumar Rout <chandanx.rout@intel.com> (A Contingent Worker at Intel)
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
drivers/net/ethernet/intel/ixgbe/ixgbe.h
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c

index bc68b8f..8736ca4 100644 (file)
@@ -73,6 +73,8 @@
 #define IXGBE_RXBUFFER_4K    4096
 #define IXGBE_MAX_RXBUFFER  16384  /* largest size for a single descriptor */
 
+#define IXGBE_PKT_HDR_PAD   (ETH_HLEN + ETH_FCS_LEN + (VLAN_HLEN * 2))
+
 /* Attempt to maximize the headroom available for incoming frames.  We
  * use a 2K buffer for receives and need 1536/1534 to store the data for
  * the frame.  This leaves us with 512 bytes of room.  From that we need
index 25ca329..4507fba 100644 (file)
@@ -6801,8 +6801,7 @@ static int ixgbe_change_mtu(struct net_device *netdev, int new_mtu)
        struct ixgbe_adapter *adapter = netdev_priv(netdev);
 
        if (ixgbe_enabled_xdp_adapter(adapter)) {
-               int new_frame_size = new_mtu + ETH_HLEN + ETH_FCS_LEN +
-                                    VLAN_HLEN;
+               int new_frame_size = new_mtu + IXGBE_PKT_HDR_PAD;
 
                if (new_frame_size > ixgbe_max_xdp_frame_size(adapter)) {
                        e_warn(probe, "Requested MTU size is not supported with XDP\n");