Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2ba279e2 authored by Emil Tantilov's avatar Emil Tantilov Committed by Jeff Kirsher
Browse files

ixgbe: disable RSC when Rx checksum is off



Disabling Rx checksumming leads to performance degradation due to
RSC causing packets to have incorrect checksums.

Signed-off-by: default avatarEmil Tantilov <emil.s.tantilov@intel.com>
Tested-by: default avatarEvan Swanson <evan.swanson@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent c988ee82
Loading
Loading
Loading
Loading
+33 −11
Original line number Diff line number Diff line
@@ -458,17 +458,6 @@ static u32 ixgbe_get_rx_csum(struct net_device *netdev)
	return adapter->flags & IXGBE_FLAG_RX_CSUM_ENABLED;
}

static int ixgbe_set_rx_csum(struct net_device *netdev, u32 data)
{
	struct ixgbe_adapter *adapter = netdev_priv(netdev);
	if (data)
		adapter->flags |= IXGBE_FLAG_RX_CSUM_ENABLED;
	else
		adapter->flags &= ~IXGBE_FLAG_RX_CSUM_ENABLED;

	return 0;
}

static void ixgbe_set_rsc(struct ixgbe_adapter *adapter)
{
	int i;
@@ -484,6 +473,39 @@ static void ixgbe_set_rsc(struct ixgbe_adapter *adapter)
	}
}

static int ixgbe_set_rx_csum(struct net_device *netdev, u32 data)
{
	struct ixgbe_adapter *adapter = netdev_priv(netdev);
	bool need_reset = false;

	if (data) {
		adapter->flags |= IXGBE_FLAG_RX_CSUM_ENABLED;
	} else {
		adapter->flags &= ~IXGBE_FLAG_RX_CSUM_ENABLED;

		if (adapter->flags2 & IXGBE_FLAG2_RSC_CAPABLE) {
			adapter->flags2 &= ~IXGBE_FLAG2_RSC_ENABLED;
			netdev->features &= ~NETIF_F_LRO;
		}

		switch (adapter->hw.mac.type) {
		case ixgbe_mac_X540:
			ixgbe_set_rsc(adapter);
			break;
		case ixgbe_mac_82599EB:
			need_reset = true;
			break;
		default:
			break;
		}
	}

	if (need_reset)
		ixgbe_do_reset(netdev);

	return 0;
}

static u32 ixgbe_get_tx_csum(struct net_device *netdev)
{
	return (netdev->features & NETIF_F_IP_CSUM) != 0;