linux/drivers/net/ethernet/intel
Brett Creeley 28bf26724f ice: Implement aRFS
Enable accelerated Receive Flow Steering (aRFS). It is used to steer Rx
flows to a specific queue. This functionality is triggered by the network
stack through ndo_rx_flow_steer and requires Flow Director (ntuple on) to
function.

The fltr_info is used to add/remove/update flow rules in the HW, the
fltr_state is used to determine what to do with the filter with respect
to HW and/or SW, and the flow_id is used in co-ordination with the
network stack.

The work for aRFS is split into two paths: the ndo_rx_flow_steer
operation and the ice_service_task. The former is where the kernel hands
us an Rx SKB among other items to setup aRFS and the latter is where
the driver adds/updates/removes filter rules from HW and updates filter
state.

In the Rx path the following things can happen:
        1. New aRFS entries are added to the hash table and the state is
           set to ICE_ARFS_INACTIVE so the filter can be updated in HW
           by the ice_service_task path.
        2. aRFS entries have their Rx Queue updated if we receive a
           pre-existing flow_id and the filter state is ICE_ARFS_ACTIVE.
           The state is set to ICE_ARFS_INACTIVE so the filter can be
           updated in HW by the ice_service_task path.
        3. aRFS entries marked as ICE_ARFS_TODEL are deleted

In the ice_service_task path the following things can happen:
        1. New aRFS entries marked as ICE_ARFS_INACTIVE are added or
           updated in HW.
           and their state is updated to ICE_ARFS_ACTIVE.
        2. aRFS entries are deleted from HW and their state is updated
           to ICE_ARFS_TODEL.

Signed-off-by: Brett Creeley <brett.creeley@intel.com>
Signed-off-by: Madhu Chittim <madhu.chittim@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
2020-05-22 22:02:34 -07:00
..
e1000 Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2020-04-25 20:18:53 -07:00
e1000e e1000e: fix S0ix flows for cable connected case 2020-04-19 11:37:00 -07:00
fm10k net: fm10k: reject unsupported coalescing params 2020-03-12 11:32:36 -07:00
i40e xdp: For Intel AF_XDP drivers add XDP frame_sz 2020-05-14 21:21:56 -07:00
iavf net: iavf: reject unsupported coalescing params 2020-03-12 11:32:36 -07:00
ice ice: Implement aRFS 2020-05-22 22:02:34 -07:00
igb igb: convert to use i2c_new_client_device() 2020-03-26 19:31:21 -07:00
igbvf net: igbvf: reject unsupported coalescing params 2020-03-12 11:32:36 -07:00
igc igc: Remove unused registers 2020-05-19 16:00:00 -07:00
ixgb Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2019-12-22 15:15:05 -08:00
ixgbe xdp: For Intel AF_XDP drivers add XDP frame_sz 2020-05-14 21:21:56 -07:00
ixgbevf ixgbevf: Add XDP frame size to VF driver 2020-05-14 21:21:56 -07:00
e100.c netdev: pass the stuck queue to the timeout handler 2019-12-12 21:38:57 -08:00
Kconfig ice: enable initial devlink support 2020-03-21 00:55:42 -07:00
Makefile