[PATCH v4 0/1] PCI/IOV: Add reentrant locking in sriov_add_vfs/sriov_del_vfs

From: Ionut Nechita (Wind River)

Date: Sat Feb 28 2026 - 07:04:04 EST


From: Ionut Nechita <ionut.nechita@xxxxxxxxxxxxx>

From: Ionut Nechita <ionut.nechita@xxxxxxxxxxxxx>

Hi,

This is v4 of the patch adding owner-tracked reentrant locking for
pci_rescan_remove_lock in sriov_add_vfs() and sriov_del_vfs(), to
serialize VF addition/removal against concurrent hotplug events
(including platform-generated events on s390) without deadlocking
on paths that already hold the lock.

Rebased on linux-next (next-20260227).

Changes in v4:
- Rebased on linux-next (next-20260227)
- Declared pci_rescan_remove_owner as const pointer
(const struct task_struct *) to make clear it is not meant to
modify the task (Benjamin Block)
- Added Reviewed-by and Tested-by from Benjamin Block (IBM)

Changes in v3:
- Rebased on linux-next (next-20260225)
- Added Tested-by from Dragos Tatulea (NVIDIA)
- No code changes from v2

Changes in v2:
- Renamed from pci_lock_rescan_remove_nested() to
pci_lock_rescan_remove_reentrant() to avoid confusion with
mutex_lock_nested() lockdep annotations (Benjamin Block)
- Added pci_unlock_rescan_remove_reentrant(const bool locked) helper
to avoid open-coding conditional unlock at each call site
(Benjamin Block)
- Moved declarations from drivers/pci/pci.h to include/linux/pci.h
alongside existing lock/unlock declarations (Benjamin Block)
- Simplified callers: removed negation of return value and manual
conditional unlock in favor of the paired lock/unlock helpers

Link: https://lore.kernel.org/linux-pci/20260214193235.262219-3-ionut.nechita@xxxxxxxxxxxxx/ [v1]
Link: https://lore.kernel.org/linux-pci/20260219212648.82606-1-ionut.nechita@xxxxxxxxxxxxx/ [v2]
Link: https://lore.kernel.org/linux-pci/20260225202434.18737-1-ionut.nechita@xxxxxxxxxxxxx/ [v3]

Ionut Nechita (1):
PCI/IOV: Add reentrant locking in sriov_add_vfs/sriov_del_vfs for
complete serialization

drivers/pci/iov.c | 7 +++++++
drivers/pci/probe.c | 19 +++++++++++++++++++
include/linux/pci.h | 2 ++
3 files changed, 28 insertions(+)

--
2.53.0