This series introduces the ability to mark an ethtool steering filter to use RSS spreading, and the ability to create and configure multiple RSS contexts with different indirection tables, hash keys, and hash fields. An implementation for the sfc driver (for 7000-series and later SFC NICs) is included in patch 2/2.
The anticipated use case of this feature is for steering traffic destined for a container (or virtual machine) to the subset of CPUs on which processes in the container (or the VM's vCPUs) are bound, while retaining the scalability of RSS spreading from the viewpoint inside the container. The use of both a base queue number (ring_cookie) and indirection table is intended to allow re-use of a single RSS context to target multiple sets of CPUs. For instance, if an 8-core system is hosting three containers on CPUs [1,2], [3,4] and [6,7], then a single RSS context with an equal-weight [0,1] indirection table could be used to target all three containers by setting ring_cookie to 1, 3 and 6 on the respective filters. v2: Initialised ctx in efx_ef10_filter_insert() to avoid (false positive) gcc warning. Edward Cree (2): net: ethtool: extend RXNFC API to support RSS spreading of filter matches sfc: support RSS spreading of ethtool ntuple filters drivers/net/ethernet/sfc/ef10.c | 273 ++++++++++++++++++++++------------ drivers/net/ethernet/sfc/efx.c | 65 +++++++- drivers/net/ethernet/sfc/efx.h | 12 +- drivers/net/ethernet/sfc/ethtool.c | 153 ++++++++++++++++--- drivers/net/ethernet/sfc/farch.c | 11 +- drivers/net/ethernet/sfc/filter.h | 7 +- drivers/net/ethernet/sfc/net_driver.h | 44 +++++- drivers/net/ethernet/sfc/nic.h | 2 - drivers/net/ethernet/sfc/siena.c | 26 ++-- include/linux/ethtool.h | 5 + include/uapi/linux/ethtool.h | 32 +++- net/core/ethtool.c | 64 ++++++-- 12 files changed, 523 insertions(+), 171 deletions(-)