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: Emil Tantilov <emil.s.tantilov@intel.com> Tested-by: Evan Swanson <evan.swanson@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
c988ee8290
commit
2ba279e2f7
1 changed files with 33 additions and 11 deletions
|
@ -458,17 +458,6 @@ static u32 ixgbe_get_rx_csum(struct net_device *netdev)
|
||||||
return adapter->flags & IXGBE_FLAG_RX_CSUM_ENABLED;
|
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)
|
static void ixgbe_set_rsc(struct ixgbe_adapter *adapter)
|
||||||
{
|
{
|
||||||
int i;
|
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)
|
static u32 ixgbe_get_tx_csum(struct net_device *netdev)
|
||||||
{
|
{
|
||||||
return (netdev->features & NETIF_F_IP_CSUM) != 0;
|
return (netdev->features & NETIF_F_IP_CSUM) != 0;
|
||||||
|
|
Loading…
Add table
Reference in a new issue