From: Bjorn Helgaas <helgaas@kernel.org>
To: Lukasz Laguna <lukasz.laguna@intel.com>
Cc: linux-pci@vger.kernel.org, bhelgaas@google.com,
michal.winiarski@intel.com, djbw@kernel.org,
brett.creeley@amd.com, anthony.l.nguyen@intel.com,
przemyslaw.kitszel@intel.com, pabeni@redhat.com,
andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com,
kuba@kernel.org, "Leon Romanovsky" <leon@kernel.org>,
"Alex Williamson" <alex@shazbot.org>,
"Jason Gunthorpe" <jgg@ziepe.ca>,
"Uwe Kleine-König" <u.kleine-koenig@baylibre.com>,
"Vipin Sharma" <vipinsh@google.com>,
"David Matlack" <dmatlack@google.com>,
"Samiullah Khawaja" <skhawaja@google.com>
Subject: Re: [PATCH v2 00/13] PCI/IOV: Improve reset handling with VFs enabled
Date: Tue, 27 Oct 2026 14:49:05 -0500 [thread overview]
Message-ID: <20261027194905.GA462134@bhelgaas> (raw)
In-Reply-To: <20261027160446.858300-1-lukasz.laguna@intel.com>
[+cc others interested in VF reset]
On Tue, Oct 27, 2026 at 05:04:33PM +0100, Lukasz Laguna wrote:
> This series improves reset handling for SR-IOV devices. Today there
> are a few gaps when resets happen with VFs enabled:
>
> 1. VF state is lost across PF reset. The PCI core saves and restores
> the PF's config state, including its SR-IOV capability, and the
> kernel representation of each VF (struct pci_dev / struct device)
> survives the reset, but the VFs' hardware state does not. From the
> PCI point of view, the VFs do not exist between the PF reset and
> the restore of the PF IOV state. Their config space is lost, and
> their drivers are never notified about the reset.
>
> 2. VFs are prepared in the wrong order during bus and slot reset. VFs
> are handled like any other device on the bus, and because the walk
> is top-down, the PF's .reset_prepare() runs before its VFs'
> callbacks.
>
> 3. VFs on an SR-IOV virtual bus are not handled during bus and slot
> reset. The walk recurses only through dev->subordinate, so it never
> reaches them, as such a bus has no bridge. Those VFs are reset
> without being locked, without driver notification and without
> config space save/restore.
>
> 4. The "bus" reset method is unavailable for a PF with VFs enabled.
> pci_parent_bus_reset() accepts a device only if no other devices
> are on its bus. A PF's VFs typically sit on the same bus as the PF,
> so enabling VFs makes the PF fail this check. The VFs are in the
> PF's reset domain, so they should not block a bus reset of the PF.
I want to hear opinions on this part. I guess it's obvious that VFs
are in the PF reset domain, since resetting the PF destroys any VFs.
But I don't know what coordination people expect between users of the
VFs and the PF.
I think people expect to be able to reset VFs independently so they
can be assigned to different VMs and be reset without bothering peer
VMs.
But whoever owns the PF can reset it and all the VFs, potentially
destroying any VMs using the VFs?
> This series addresses these gaps as follows:
>
> - Patches 1-3 add the PCI core helpers used by the rest of the series.
>
> - Patch 4 fixes (1), (2) and (3). It locks all VFs together with the PF
> around a function reset, saves and restores the VFs' config state,
> and calls the VF drivers' .reset_prepare() / .reset_done()
> callbacks, so both architected and device-specific state can be
> preserved. During bus and slot resets, VFs are skipped in the device
> walk and handled through their PF, so VFs on an SR-IOV virtual bus
> are covered as well. VFs are prepared before the PF and restored
> after it. As a result, pci_reset_function_locked() now requires PF
> callers to hold the device locks of all enabled VFs as well.
>
> - Patches 5-7 adapt PF drivers to the new core behavior. ionic and
> pds_core call pci_reset_function_locked() from their error resume
> handlers, so they now need to lock the VFs around it. i40e no longer
> needs to restore the VFs' MSI state in its .reset_done(), since the
> PCI core now restores the VFs' config state.
>
> - Patch 8 fixes (4). pci_parent_bus_reset() now ignores the PF's own
> VFs when it checks for other devices on the bus.
>
> - Patches 9-13 replace open-coded VF lookups with the new helpers.
> PCI/TSM and ixgbe use the VF iterators, and ice, liquidio and xe
> use pci_iov_get_virtfn(). These patches depend on patches 1-2 and
> are independent of the reset changes.
>
> Link: https://lore.kernel.org/linux-pci/20261019083514.838640-1-lukasz.laguna@intel.com/ [v1]
>
> Lukasz Laguna (12):
> PCI/IOV: Introduce pci_iov_get_virtfn()
> PCI/IOV: Introduce VF iterators
> PCI/IOV: Introduce VF locking helpers
> ionic: Lock VFs around pci_reset_function_locked()
> pds_core: Lock VFs around pci_reset_function_locked()
> i40e: Drop VF MSI state restore from PF reset_done
> PCI/IOV: Allow bus reset_method for PF with VFs enabled
> PCI/TSM: Use generic VF iterators
> ixgbe: Use generic VF iterator
> ice: Use pci_iov_get_virtfn()
> liquidio: Use pci_iov_get_virtfn()
> drm/xe/pf: Use pci_iov_get_virtfn()
>
> Michał Winiarski (1):
> PCI/IOV: Allow VF drivers to handle resets
>
> drivers/gpu/drm/xe/xe_pci_sriov.c | 4 +-
> drivers/net/ethernet/amd/pds_core/main.c | 5 +-
> .../ethernet/cavium/liquidio/octeon_mailbox.c | 10 +-
> drivers/net/ethernet/intel/i40e/i40e_main.c | 3 -
> .../ethernet/intel/i40e/i40e_virtchnl_pf.c | 26 ---
> .../ethernet/intel/i40e/i40e_virtchnl_pf.h | 3 -
> drivers/net/ethernet/intel/ice/ice_sriov.c | 20 +-
> .../net/ethernet/intel/ixgbe/ixgbe_sriov.c | 25 +-
> .../ethernet/pensando/ionic/ionic_bus_pci.c | 5 +-
> drivers/pci/iov.c | 88 ++++++-
> drivers/pci/pci.c | 217 +++++++++++++++---
> drivers/pci/tsm.c | 25 +-
> include/linux/pci.h | 63 +++++
> 13 files changed, 357 insertions(+), 137 deletions(-)
>
> --
> 2.43.0
>
next prev parent reply other threads:[~2026-10-27 19:49 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-27 16:04 [PATCH v2 00/13] PCI/IOV: Improve reset handling with VFs enabled Lukasz Laguna
2026-10-27 16:04 ` [PATCH v2 01/13] PCI/IOV: Introduce pci_iov_get_virtfn() Lukasz Laguna
2026-10-27 16:20 ` sashiko-bot
2026-10-27 16:04 ` [PATCH v2 02/13] PCI/IOV: Introduce VF iterators Lukasz Laguna
2026-10-27 16:21 ` sashiko-bot
2026-10-27 21:35 ` Bjorn Helgaas
2026-10-28 7:29 ` Laguna, Lukasz
2026-10-27 16:04 ` [PATCH v2 03/13] PCI/IOV: Introduce VF locking helpers Lukasz Laguna
2026-10-27 16:26 ` sashiko-bot
2026-10-27 16:04 ` [PATCH v2 04/13] PCI/IOV: Allow VF drivers to handle resets Lukasz Laguna
2026-10-27 16:34 ` sashiko-bot
2026-10-27 16:51 ` Laguna, Lukasz
2026-10-28 8:52 ` Weili Qian
2026-10-28 14:05 ` Laguna, Lukasz
2026-10-27 20:00 ` Bjorn Helgaas
2026-10-28 6:39 ` Laguna, Lukasz
2026-10-27 16:04 ` [PATCH v2 05/13] ionic: Lock VFs around pci_reset_function_locked() Lukasz Laguna
2026-10-27 16:14 ` sashiko-bot
2026-10-27 16:04 ` [PATCH v2 06/13] pds_core: " Lukasz Laguna
2026-10-27 16:12 ` sashiko-bot
2026-10-27 16:04 ` [PATCH v2 07/13] i40e: Drop VF MSI state restore from PF reset_done Lukasz Laguna
2026-10-27 16:13 ` sashiko-bot
2026-10-27 16:04 ` [PATCH v2 08/13] PCI/IOV: Allow bus reset_method for PF with VFs enabled Lukasz Laguna
2026-10-27 16:20 ` sashiko-bot
2026-10-27 16:04 ` [PATCH v2 09/13] PCI/TSM: Use generic VF iterators Lukasz Laguna
2026-10-27 16:15 ` sashiko-bot
2026-10-27 20:08 ` Bjorn Helgaas
2026-10-28 7:25 ` Laguna, Lukasz
2026-10-27 16:04 ` [PATCH v2 10/13] ixgbe: Use generic VF iterator Lukasz Laguna
2026-10-27 16:17 ` sashiko-bot
2026-10-27 16:04 ` [PATCH v2 11/13] ice: Use pci_iov_get_virtfn() Lukasz Laguna
2026-10-27 16:20 ` sashiko-bot
2026-10-27 16:04 ` [PATCH v2 12/13] liquidio: " Lukasz Laguna
2026-10-27 16:19 ` sashiko-bot
2026-10-27 16:04 ` [PATCH v2 13/13] drm/xe/pf: " Lukasz Laguna
2026-10-27 16:21 ` sashiko-bot
2026-10-27 19:49 ` Bjorn Helgaas [this message]
2026-10-28 7:03 ` [PATCH v2 00/13] PCI/IOV: Improve reset handling with VFs enabled Laguna, Lukasz
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=20261027194905.GA462134@bhelgaas \
--to=helgaas@kernel.org \
--cc=alex@shazbot.org \
--cc=andrew+netdev@lunn.ch \
--cc=anthony.l.nguyen@intel.com \
--cc=bhelgaas@google.com \
--cc=brett.creeley@amd.com \
--cc=davem@davemloft.net \
--cc=djbw@kernel.org \
--cc=dmatlack@google.com \
--cc=edumazet@google.com \
--cc=jgg@ziepe.ca \
--cc=kuba@kernel.org \
--cc=leon@kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=lukasz.laguna@intel.com \
--cc=michal.winiarski@intel.com \
--cc=pabeni@redhat.com \
--cc=przemyslaw.kitszel@intel.com \
--cc=skhawaja@google.com \
--cc=u.kleine-koenig@baylibre.com \
--cc=vipinsh@google.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