From: Przemek Kitszel <przemyslaw.kitszel@intel.com>
To: netdev@vger.kernel.org
Cc: Tony Nguyen <anthony.l.nguyen@intel.com>,
Aleksandr Loktionov <aleksandr.loktionov@intel.com>,
Michal Schmidt <mschmidt@redhat.com>,
Jakub Kicinski <kuba@kernel.org>,
edumazet@kernel.org, horms@kernel.org, pabeni@redhat.com,
davem@davemloft.net, Jiri Pirko <jiri@resnulli.us>,
Jonathan Corbet <corbet@lwn.net>,
skhan@linuxfoundation.org, rdunlap@infradead.org,
andrew+netdev@lunn.ch, saeedm@nvidia.com, tariqt@nvidia.com,
leon@kernel.org, mbloch@nvidia.com, jacob.e.keller@intel.com,
jedrzej.jagielski@intel.com, anzaki@gmail.com,
brett.creeley@amd.com, jtornosm@redhat.com, ohartoov@nvidia.com,
Przemek Kitszel <przemyslaw.kitszel@intel.com>
Subject: [PATCH net-next v3 00/15] devlink, mlx5, iavf, ice: XLVF for iavf
Date: Thu, 15 Oct 2026 20:51:11 +0200 [thread overview]
Message-ID: <20261015185454.6332-1-przemyslaw.kitszel@intel.com> (raw)
Also available here
https://github.com/pkitszel/linux/tree/xlvf-v3
The purpose of this series is to allow iavf to use more than 16 queue
pairs, in two modes: up to 64 and up to 256 queue pairs.
In order to support more queues for VF, we must give it a bigger RSS
table (GLOBAL LUT or PF LUT). There are 16 GLOBAL LUTs on E810, and one
PF LUT for every PF on given card. Both kinds could be (re)assigned to
a VF, while a PF must hold at least one of them at any given moment.
GLOBAL LUT allows VF to use up to 64 queues, PF LUT lets it use up to
256 queues.
RSS LUTs are exposed to the user for assignment via devlink resources
API, which I have extended to make it possible.
Devlink changes:
1. Extend shared devlink by two callbacks, that give the driver
a constructor/destructor for the priv data attached to the shared
devlink instance. The constructor gets an additional param, used in
"ice: represent RSS LUTs as devlink resources". mlx5 is touched only
to adjust to the API change.
ice uses the shared devlink instance as a "whole device" aggregate
over all PFs on given card, instead of its custom xarray.
2. Extend devlink resources API to allow user to assign resources.
Before, only the driver could assign resources, without any way for
the user to interact. Now the driver could register an occupancy
setter (.occ_set()) for a resource. ice RSS LUTs are exposed that
way. It was proposed as an RFC in Feb 2025, link in the patch.
3. Add devlink_alloc_drv(), a variant of devlink_alloc() that takes the
owning driver explicitly. ice creates a devlink instance for each of
its VFs, while the VF device could be unbound, or bound to iavf or
vfio-pci at that time.
There are also patches for, Admin Queue extension, GLOBAL RSS LUT
alloc/free, and two rather big "new opcodes" patches, by Ahmed (iavf)
and Brett (ice).
Finally there is a patch that adds devlink instance for VF and
registers devlink resources on it, combined with all the glue code to
make actual use of the whole series and accept the larger number of
queues for VF. This (the last) patch contains usage examples.
There is one resource added that just groups GLOBAL and PF LUTs under
it, so there are 3 rows of data for each device (PF/VF/whole-dev):
$ devlink resource show pci/0000:18:00.0
pci/0000:18:00.0:
name rss size 1 unit entry size_min 0 size_max 2 size_gran 1 dpipe_tables none
resources:
name lut_512 size 0 unit entry size_min 0 size_max 1 size_gran 1 dpipe_tables none
name lut_2048 size 1 unit entry size_min 0 size_max 1 size_gran 1 dpipe_tables none
Technically the aggregate "name rss" line could be eliminated, with
just the two last ones kept (then renamed to "rss_lut_2048" form, from
the current "rss/lut_2048"). I like it as it is, but this is just an
opinion, I'm open to discussion.
Things AI reports but I don't want to change:
* hardening against a malicious or buggy FW: we have to trust the FW
* hardening of the VF against a malicious or buggy PF: likewise, VF has
to trust its PF; in particular, I'm not adding checks for the PF
reporting qregion_width so big that BIT(qregion_width) in
iavf_fill_rss_lut() overflows and yields a modulo by zero
* non-atomic updates of iavf adapter->flags: pre-existing pattern in
the whole driver, out of scope of this series
* lock inversion between PF devlink lock and pf->vfs.table_lock:
ice_tear_down_devlink_rate_tree() takes them in the opposite order
than ice_start_vfs() -> ice_eswitch_attach_vf(); pre-existing, will
be fixed separately; this series takes table_lock first
v3:
* ice: fix rollback of VF queue configuration to disable queues by
their IDs, not by qpair index, as the config could be now split into
many virtchnl messages
* ice: register PF devlink resources only in the regular probe path,
not in FW recovery mode
* ice: don't free the user RSS LUT in ice_vsi_decfg(), it was done
outside of pf->rss_lut_lock, and ice_vsi_cfg_def() frees it anyway
when the LUT size changes
* iavf: auto-request queues in LARGE mode only at init, not on every
reset, and only after VSI and RSS fields are initialized
* iavf: schedule a VF reset when RSS key/LUT reallocation fails
* devlink: keep size of .occ_set() resources in sync with the getter;
WARN on registering only one of .occ_set()/.occ_get()
* devlink: new patch, add devlink_alloc_drv(), so ice owns the VF
devlink instance, regardless of the driver bound to the VF
* ice: create VF devlinks only after all VFs are started, not while
ice_start_vfs() can still fail
* ice: reject out of range itr_idx in VIRTCHNL_OP_MAP_QUEUE_VECTOR
* ice: fill the new RSS LUT under rss_lut_lock, keep the PF LUT zeroed
when RXHASH is disabled
* ice: restore VF aggregator node accounting in ice_vsi_decfg()
* ice: drop PF RSS LUT ownership also in ice_deinit_pf(), as
ice_vsi_decfg() skips it after a NO_INIT VSI rebuild
* ice: restore default RSS LUT assignment of PF and its VFs after
reset, as FW drops it
* ice: check VF VSI for NULL in ice_vc_request_qs_msg()
* ice: fix RSS LUT tracking on dual-NAC E825C: each NAC numbers its
PFs and global LUTs from 0, so offset secondary NAC PFs by 4, and
keep a separate global LUT table for the secondary NAC
* ice: derive VF rss_size from its queue count and LUT capacity on
each VSI config, instead of keeping a stale value
* ice: wake up service task when scheduling a deferred VF reset
* ice: lower VF queue count to the capacity of its new RSS LUT when the
LUT shrinks, instead of keeping the queues allocated and offering them
to iavf without VIRTCHNL_VF_LARGE_NUM_QPAIRS
v2:
* drop "ice: simplify ice_vc_dis_qs_msg() a little", already applied
* devlink: propagate the .shd_init() error to the caller, so
devlink_shd_get() returns ERR_PTR() now; register the shared
instance only after successful .shd_init(); document the new ops
* devlink: document the .occ_set() mode of resources
* ice: prefix the shared devlink id with "ice:", handle errors of
devl_nested_devlink_set()
* iavf: stop multi-message virtchnl ops (queue config, queue-vector
mapping) at the first error or PF NACK, keep the op pending on
timeout
* iavf: fix queue and RSS (re)negotiation on init, reset and
ethtool -L
* ice: serialize devlink RSS LUT changes with ethtool -x/-X/-L, RXHASH
toggle and VSI (re)configuration, by new pf->rss_lut_lock; make ADQ
and devlink RSS LUT reassignment mutually exclusive
* ice: limit VF queue count and PF RSS size to the capacity of the
current RSS LUT
* ice: create VF devlink together with the VF, rework deferred VF reset
* many smaller fixes, mostly after Sashiko review; per-patch changelogs
are under "---", together with Sashiko suggestions that I decided
not to apply, and why
v1:
https://lore.kernel.org/netdev/20260508124208.11622-1-przemyslaw.kitszel@intel.com
v2:
https://lore.kernel.org/netdev/20261009121433.30347-1-przemyslaw.kitszel@intel.com
Ahmed Zaki (1):
iavf: use new opcodes to request more than 16 queues
Brett Creeley (2):
ice: add VF queue ena/dis helper functions
ice: introduce handling of virtchnl LARGE VF opcodes
Przemek Kitszel (12):
devlink, mlx5: add init/fini ops for shared devlink
ice: use shared devlink to store ice_adapters instead of custom xarray
ice: add helpers for Global RSS LUT alloc, free, vsi_update
ice: rename ICE_MAX_RSS_QS_PER_VF to ICE_MAX_QS_PER_VF_VCV1
ice: bump to 256qs for VF
iavf: extend iavf_configure_queues() to support more queues
iavf: temporary rename of IAVF_MAX_REQ_QUEUES to
IAVF_MAX_REQ_QUEUES_VCV1
iavf: increase max number of queues to 256
devlink: give user option to allocate resources
ice: represent RSS LUTs as devlink resources
devlink: add devlink_alloc_drv()
ice: support up to 256 VF queues
.../networking/devlink/devlink-resource.rst | 5 +
.../networking/devlink/devlink-shared.rst | 19 +-
drivers/net/ethernet/intel/ice/Makefile | 1 +
drivers/net/ethernet/intel/iavf/iavf.h | 21 +-
.../net/ethernet/intel/iavf/iavf_register.h | 4 +-
.../net/ethernet/intel/ice/devlink/devlink.h | 2 +-
.../net/ethernet/intel/ice/devlink/resource.h | 27 +
drivers/net/ethernet/intel/ice/ice.h | 5 +-
drivers/net/ethernet/intel/ice/ice_adapter.h | 55 +-
.../net/ethernet/intel/ice/ice_adminq_cmd.h | 1 +
drivers/net/ethernet/intel/ice/ice_common.h | 1 +
drivers/net/ethernet/intel/ice/ice_lag.h | 2 +-
drivers/net/ethernet/intel/ice/ice_lib.h | 5 +
drivers/net/ethernet/intel/ice/ice_switch.h | 2 +
drivers/net/ethernet/intel/ice/ice_vf_lib.h | 36 +-
drivers/net/ethernet/intel/ice/virt/queues.h | 3 +
drivers/net/ethernet/intel/ice/virt/rss.h | 1 +
.../net/ethernet/intel/ice/virt/virtchnl.h | 4 +
include/linux/net/intel/virtchnl.h | 136 +++-
include/net/devlink.h | 41 +
.../net/ethernet/intel/iavf/iavf_ethtool.c | 3 +
drivers/net/ethernet/intel/iavf/iavf_main.c | 140 +++-
.../net/ethernet/intel/iavf/iavf_virtchnl.c | 334 +++++++-
.../net/ethernet/intel/ice/devlink/devlink.c | 11 +-
.../net/ethernet/intel/ice/devlink/resource.c | 722 ++++++++++++++++++
drivers/net/ethernet/intel/ice/ice_adapter.c | 107 +--
drivers/net/ethernet/intel/ice/ice_common.c | 2 +-
drivers/net/ethernet/intel/ice/ice_ethtool.c | 103 ++-
drivers/net/ethernet/intel/ice/ice_lag.c | 6 +-
drivers/net/ethernet/intel/ice/ice_lib.c | 175 ++++-
drivers/net/ethernet/intel/ice/ice_main.c | 61 +-
drivers/net/ethernet/intel/ice/ice_sriov.c | 19 +-
drivers/net/ethernet/intel/ice/ice_switch.c | 41 +
drivers/net/ethernet/intel/ice/ice_vf_lib.c | 71 +-
.../net/ethernet/intel/ice/virt/allowlist.c | 8 +
drivers/net/ethernet/intel/ice/virt/queues.c | 493 ++++++++++--
drivers/net/ethernet/intel/ice/virt/rss.c | 37 +-
.../net/ethernet/intel/ice/virt/virtchnl.c | 42 +-
.../ethernet/mellanox/mlx5/core/sh_devlink.c | 6 +-
net/devlink/core.c | 20 +
net/devlink/resource.c | 100 ++-
net/devlink/sh_dev.c | 57 +-
42 files changed, 2637 insertions(+), 292 deletions(-)
create mode 100644 drivers/net/ethernet/intel/ice/devlink/resource.h
create mode 100644 drivers/net/ethernet/intel/ice/devlink/resource.c
--
2.51.1
next reply other threads:[~2026-10-15 18:55 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-15 18:51 Przemek Kitszel [this message]
2026-10-15 18:51 ` [PATCH net-next v3 01/15] devlink, mlx5: add init/fini ops for shared devlink Przemek Kitszel
2026-10-19 18:50 ` Tariq Toukan
2026-10-15 18:51 ` [PATCH net-next v3 02/15] ice: use shared devlink to store ice_adapters instead of custom xarray Przemek Kitszel
2026-10-15 18:51 ` [PATCH net-next v3 03/15] ice: add VF queue ena/dis helper functions Przemek Kitszel
2026-10-15 18:51 ` [PATCH net-next v3 04/15] ice: add helpers for Global RSS LUT alloc, free, vsi_update Przemek Kitszel
2026-10-15 18:51 ` [PATCH net-next v3 05/15] ice: rename ICE_MAX_RSS_QS_PER_VF to ICE_MAX_QS_PER_VF_VCV1 Przemek Kitszel
2026-10-15 18:51 ` [PATCH net-next v3 06/15] ice: bump to 256qs for VF Przemek Kitszel
2026-10-15 18:51 ` [PATCH net-next v3 07/15] iavf: extend iavf_configure_queues() to support more queues Przemek Kitszel
2026-10-15 18:51 ` [PATCH net-next v3 08/15] iavf: temporary rename of IAVF_MAX_REQ_QUEUES to IAVF_MAX_REQ_QUEUES_VCV1 Przemek Kitszel
2026-10-15 18:51 ` [PATCH net-next v3 09/15] iavf: increase max number of queues to 256 Przemek Kitszel
2026-10-15 18:51 ` [PATCH net-next v3 10/15] iavf: use new opcodes to request more than 16 queues Przemek Kitszel
2026-10-15 18:51 ` [PATCH net-next v3 11/15] ice: introduce handling of virtchnl LARGE VF opcodes Przemek Kitszel
2026-10-15 18:51 ` [PATCH net-next v3 12/15] devlink: give user option to allocate resources Przemek Kitszel
2026-10-21 3:20 ` Jakub Kicinski
2026-10-15 18:51 ` [PATCH net-next v3 13/15] ice: represent RSS LUTs as devlink resources Przemek Kitszel
2026-10-21 3:20 ` Jakub Kicinski
2026-10-15 18:51 ` [PATCH net-next v3 14/15] devlink: add devlink_alloc_drv() Przemek Kitszel
2026-10-15 18:51 ` [PATCH net-next v3 15/15] ice: support up to 256 VF queues Przemek Kitszel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261015185454.6332-1-przemyslaw.kitszel@intel.com \
--to=przemyslaw.kitszel@intel.com \
--cc=aleksandr.loktionov@intel.com \
--cc=andrew+netdev@lunn.ch \
--cc=anthony.l.nguyen@intel.com \
--cc=anzaki@gmail.com \
--cc=brett.creeley@amd.com \
--cc=corbet@lwn.net \
--cc=davem@davemloft.net \
--cc=edumazet@kernel.org \
--cc=horms@kernel.org \
--cc=jacob.e.keller@intel.com \
--cc=jedrzej.jagielski@intel.com \
--cc=jiri@resnulli.us \
--cc=jtornosm@redhat.com \
--cc=kuba@kernel.org \
--cc=leon@kernel.org \
--cc=mbloch@nvidia.com \
--cc=mschmidt@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=ohartoov@nvidia.com \
--cc=pabeni@redhat.com \
--cc=rdunlap@infradead.org \
--cc=saeedm@nvidia.com \
--cc=skhan@linuxfoundation.org \
--cc=tariqt@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox