Subject: [RFC PATCH v3 net-next 0/7] ethtool: track custom RSS contexts in the core

From: <[email-masked]>
Date: Tue, 12 Sep 2023 15:21:35 +0100

From: Edward Cree <[email-masked]>

Make the core responsible for tracking the set of custom RSS contexts,
 their IDs, indirection tables, hash keys, and hash functions; this
 lets us get rid of duplicative code in drivers, and will allow us to
 support netlink dumps later.

This series only moves the sfc EF10 & EF100 driver over to the new API; if
 the design is approved of, I plan to post a follow-up series to convert the
 other drivers (mvpp2, octeontx2, mlx5, sfc/siena) and remove the legacy API.
However, I don't have hardware for the drivers besides sfc, so I won't be
 able to test those myself.  Maintainers of those drivers (on CC), your
 comments on the API design would be appreciated, in particular whether the
 rss_ctx_max_id limit (corresponding to your fixed-size arrays of contexts)
 is actually needed.

Changes in v3:
* Added WangXun ngbe to patch #1, not sure if they've added WoL support since
  v2 or if I just missed it last time around
* Re-ordered struct ethtool_netdev_state to avoid hole (Andrew Lunn)
* Fixed some resource leaks in error handling paths (kuba)
* Added maintainers of other context-using drivers to CC

Edward Cree (7):
  net: move ethtool-related netdev state into its own struct
  net: ethtool: attach an IDR of custom RSS contexts to a netdevice
  net: ethtool: record custom RSS contexts in the IDR
  net: ethtool: let the core choose RSS context IDs
  net: ethtool: add an extack parameter to new rxfh_context APIs
  net: ethtool: add a mutex protecting RSS contexts
  sfc: use new rxfh_context API

 drivers/net/ethernet/realtek/r8169_main.c     |   4 +-
 drivers/net/ethernet/sfc/ef10.c               |   2 +-
 drivers/net/ethernet/sfc/ef100_ethtool.c      |   5 +-
 drivers/net/ethernet/sfc/efx.c                |   2 +-
 drivers/net/ethernet/sfc/efx.h                |   2 +-
 drivers/net/ethernet/sfc/efx_common.c         |  10 +-
 drivers/net/ethernet/sfc/ethtool.c            |   5 +-
 drivers/net/ethernet/sfc/ethtool_common.c     | 147 ++++++++++--------
 drivers/net/ethernet/sfc/ethtool_common.h     |  18 ++-
 drivers/net/ethernet/sfc/mcdi_filters.c       | 133 ++++++++--------
 drivers/net/ethernet/sfc/mcdi_filters.h       |   8 +-
 drivers/net/ethernet/sfc/net_driver.h         |  28 ++--
 drivers/net/ethernet/sfc/rx_common.c          |  64 ++------
 drivers/net/ethernet/sfc/rx_common.h          |   8 +-
 .../net/ethernet/wangxun/ngbe/ngbe_ethtool.c  |   4 +-
 drivers/net/ethernet/wangxun/ngbe/ngbe_main.c |   2 +-
 drivers/net/phy/phy.c                         |   2 +-
 drivers/net/phy/phy_device.c                  |   5 +-
 drivers/net/phy/phylink.c                     |   2 +-
 include/linux/ethtool.h                       | 109 ++++++++++++-
 include/linux/netdevice.h                     |   7 +-
 net/core/dev.c                                |  38 +++++
 net/ethtool/ioctl.c                           | 127 ++++++++++++++-
 net/ethtool/wol.c                             |   2 +-
 24 files changed, 491 insertions(+), 243 deletions(-)