ixgbe: enable HW RSC for 82599
This patch enables hardware receive side coalescing for 82599 hardware. 82599 can merge multiple frames from the same TCP/IP flow into a single structure that can span one ore more descriptors. The accumulated data is arranged similar to how jumbo frames are arranged with the exception that other packets can be interlaced inbetween. To overcome this issue a next pointer is included in the written back descriptor which indicates the next descriptor in the writeback sequence. This feature sets the NETIF_F_LRO flag and clearing it via the ethtool set flags operation will also disable hardware RSC. Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
45a5ead022
commit
f8212f979f
@@ -67,6 +67,7 @@ static struct ixgbe_stats ixgbe_gstrings_stats[] = {
|
||||
{"rx_over_errors", IXGBE_STAT(net_stats.rx_over_errors)},
|
||||
{"rx_crc_errors", IXGBE_STAT(net_stats.rx_crc_errors)},
|
||||
{"rx_frame_errors", IXGBE_STAT(net_stats.rx_frame_errors)},
|
||||
{"hw_rsc_count", IXGBE_STAT(rsc_count)},
|
||||
{"rx_fifo_errors", IXGBE_STAT(net_stats.rx_fifo_errors)},
|
||||
{"rx_missed_errors", IXGBE_STAT(net_stats.rx_missed_errors)},
|
||||
{"tx_aborted_errors", IXGBE_STAT(net_stats.tx_aborted_errors)},
|
||||
@@ -1127,6 +1128,27 @@ static int ixgbe_set_coalesce(struct net_device *netdev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ixgbe_set_flags(struct net_device *netdev, u32 data)
|
||||
{
|
||||
struct ixgbe_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
ethtool_op_set_flags(netdev, data);
|
||||
|
||||
if (!(adapter->flags & IXGBE_FLAG_RSC_CAPABLE))
|
||||
return 0;
|
||||
|
||||
/* if state changes we need to update adapter->flags and reset */
|
||||
if ((!!(data & ETH_FLAG_LRO)) !=
|
||||
(!!(adapter->flags & IXGBE_FLAG_RSC_ENABLED))) {
|
||||
adapter->flags ^= IXGBE_FLAG_RSC_ENABLED;
|
||||
if (netif_running(netdev))
|
||||
ixgbe_reinit_locked(adapter);
|
||||
else
|
||||
ixgbe_reset(adapter);
|
||||
}
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
static const struct ethtool_ops ixgbe_ethtool_ops = {
|
||||
.get_settings = ixgbe_get_settings,
|
||||
@@ -1161,7 +1183,7 @@ static const struct ethtool_ops ixgbe_ethtool_ops = {
|
||||
.get_coalesce = ixgbe_get_coalesce,
|
||||
.set_coalesce = ixgbe_set_coalesce,
|
||||
.get_flags = ethtool_op_get_flags,
|
||||
.set_flags = ethtool_op_set_flags,
|
||||
.set_flags = ixgbe_set_flags,
|
||||
};
|
||||
|
||||
void ixgbe_set_ethtool_ops(struct net_device *netdev)
|
||||
|
||||
Reference in New Issue
Block a user