Commit dee4bf71 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files
Tony Nguyen says:

====================
Intel Wired LAN Driver Updates 2023-02-14 (ixgbe, i40e)

This series contains updates to ixgbe and i40e drivers.

Jason Xing corrects comparison of frame sizes for setting MTU with XDP on
ixgbe and adjusts frame size to account for a second VLAN header on ixgbe
and i40e.

* '10GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue:
  ixgbe: add double of VLAN header when computing the max MTU
  i40e: add double of VLAN header when computing the max MTU
  ixgbe: allow to increase MTU to 3K with XDP enabled
====================

Link: https://lore.kernel.org/r/20230214185146.1305819-1-anthony.l.nguyen@intel.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents fda6c89f 0967bf83
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -2921,7 +2921,7 @@ static int i40e_change_mtu(struct net_device *netdev, int new_mtu)
	struct i40e_pf *pf = vsi->back;
	struct i40e_pf *pf = vsi->back;


	if (i40e_enabled_xdp_vsi(vsi)) {
	if (i40e_enabled_xdp_vsi(vsi)) {
		int frame_size = new_mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN;
		int frame_size = new_mtu + I40E_PACKET_HDR_PAD;


		if (frame_size > i40e_max_xdp_frame_size(vsi))
		if (frame_size > i40e_max_xdp_frame_size(vsi))
			return -EINVAL;
			return -EINVAL;
+2 −0
Original line number Original line Diff line number Diff line
@@ -73,6 +73,8 @@
#define IXGBE_RXBUFFER_4K    4096
#define IXGBE_RXBUFFER_4K    4096
#define IXGBE_MAX_RXBUFFER  16384  /* largest size for a single descriptor */
#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
/* 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
 * 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
 * the frame.  This leaves us with 512 bytes of room.  From that we need
+17 −11
Original line number Original line Diff line number Diff line
@@ -6777,6 +6777,18 @@ static void ixgbe_free_all_rx_resources(struct ixgbe_adapter *adapter)
			ixgbe_free_rx_resources(adapter->rx_ring[i]);
			ixgbe_free_rx_resources(adapter->rx_ring[i]);
}
}


/**
 * ixgbe_max_xdp_frame_size - returns the maximum allowed frame size for XDP
 * @adapter: device handle, pointer to adapter
 */
static int ixgbe_max_xdp_frame_size(struct ixgbe_adapter *adapter)
{
	if (PAGE_SIZE >= 8192 || adapter->flags2 & IXGBE_FLAG2_RX_LEGACY)
		return IXGBE_RXBUFFER_2K;
	else
		return IXGBE_RXBUFFER_3K;
}

/**
/**
 * ixgbe_change_mtu - Change the Maximum Transfer Unit
 * ixgbe_change_mtu - Change the Maximum Transfer Unit
 * @netdev: network interface device structure
 * @netdev: network interface device structure
@@ -6788,20 +6800,14 @@ static int ixgbe_change_mtu(struct net_device *netdev, int new_mtu)
{
{
	struct ixgbe_adapter *adapter = netdev_priv(netdev);
	struct ixgbe_adapter *adapter = netdev_priv(netdev);


	if (adapter->xdp_prog) {
	if (ixgbe_enabled_xdp_adapter(adapter)) {
		int new_frame_size = new_mtu + ETH_HLEN + ETH_FCS_LEN +
		int new_frame_size = new_mtu + IXGBE_PKT_HDR_PAD;
				     VLAN_HLEN;
		int i;

		for (i = 0; i < adapter->num_rx_queues; i++) {
			struct ixgbe_ring *ring = adapter->rx_ring[i];


			if (new_frame_size > ixgbe_rx_bufsz(ring)) {
		if (new_frame_size > ixgbe_max_xdp_frame_size(adapter)) {
			e_warn(probe, "Requested MTU size is not supported with XDP\n");
			e_warn(probe, "Requested MTU size is not supported with XDP\n");
			return -EINVAL;
			return -EINVAL;
		}
		}
	}
	}
	}


	/*
	/*
	 * For 82599EB we cannot allow legacy VFs to enable their receive
	 * For 82599EB we cannot allow legacy VFs to enable their receive