[PATCH v3 0/6] vfio/pci: Latch module params, fix bitfield use and VGA unwind

From: Alex Williamson

Date: Mon Jun 15 2026 - 15:13:13 EST


The vfio-pci module pushes module parameters into vfio-pci-core at
initialization that change global policies for all devices, whether
bound to vfio-pci itself or other variant drivers. Not only is this
generally bad practice, but in the case of runtime PM, policy changes
can affect initialized devices, even while they're in use, resulting in
unbalanced operations.

This series first addresses the runtime PM case as a separate fix for
stable, latching the runtime PM support into the device.

Then, in preparing for moving disable_vga to per device, it's discovered
that we lack proper unwind support for a registration failure, leaving
the VGA arbiter client registered. This is resolved before it turns into
an issue, also marked for stable.

Next, we're again reminded of the risky bitfield use in both the
vfio-pci-core and mlx5 variant driver, therefore before expanding use
for more per-device flags, perform the binary split to categorize
flags as either setup/release or runtime to avoid RMW hazards of the
bitfields. Also for stable.

Finally, close the series by pulling vfio-pci module parameter policy
out of the core, latching each into the device structure.

This latter change also has the effect of restoring the mutability of
two of the module parameters, where that functionality was lost with the
vfio-pci-core split. With this series, the current parameter values are
latched into the device at probe time.

Please review. Thanks,
Alex

v3:
- patch 1: Remove the conditional runtime PM get/put in
vfio_pci_dev_set_pm_runtime_get(), which failed to account for devices
that might already be in low power due to the low power device feature
ioctl. Now that disable_idle_d3 is no longer global, use the same
unconditional runtime PM get/put around try_reset from the disable path.
This is harmless regardless of the disable_idle_d3 flag and consistent
with other unconditional use cases, such as read/write accesses.

- patch 6: New. Since we need a respin, implement the suggested debugfs
exposure of the per-device flag state.

v2:
- Sashiko fixes, including pulling in the bitfield split series.

Alex Williamson (6):
vfio/pci: Latch disable_idle_d3 per device
vfio/pci: Release the VGA arbiter client on register_device() failure
vfio/pci: Fix racy bitfields and tighten struct layout
vfio/mlx5: Fix racy bitfields and tighten struct layout
vfio/pci: Latch all module parameters per device
vfio/pci: Expose latched module parameter policy in debugfs

Documentation/ABI/testing/debugfs-vfio | 26 +++++++
drivers/vfio/pci/mlx5/cmd.h | 15 ++--
drivers/vfio/pci/vfio_pci.c | 30 ++++++--
drivers/vfio/pci/vfio_pci_core.c | 101 ++++++++++++++++++-------
include/linux/vfio_pci_core.h | 18 +++--
5 files changed, 142 insertions(+), 48 deletions(-)

--
2.53.0