[PATCH 0/2] PCI: Convert bitfield flags to atomic accessors
From: Maurice Hieronymus
Date: Sat Jul 11 2026 - 11:23:30 EST
`struct pci_dev` keeps ~60 flags in one C bitfield. Bits sharing a
word must not be modified concurrently, but several writers take no
common lock: `pci_set_master()` writes `is_busmaster` and can run
without the device lock (e.g. runtime PM resume paths),
`pci_disable_device()` clears it, and `broken_parity_status_store()`
writes the same word from sysfs at any time without any lock.
Convert these two bits to a new public `flags` bitmap accessed with
atomic bitops, mirroring how the driver core replaced its
`offline`/`offline_disabled` bitfield in commit a7cc262a1135 ("driver
core: Replace dev->offline + ->offline_disabled with accessors").
More bits can follow the same pattern later.
An alternative would be to reuse `priv_flags`, but its bit definitions
and accessors are deliberately private to drivers/pci, while
`is_busmaster` is accessed by xen-pciback, lpfc and sfc. Happy to
respin that way if preferred.
This is also a prerequisite for the Rust device enabling API rework
[1]: the guard object planned there calls `pci_disable_device()` from
contexts that may run concurrently with `pci_set_master()`, which
requires `is_busmaster` to not be part of a shared bitfield word.
Link: https://lore.kernel.org/rust-for-linux/DJOEYVBS17MJ.1YD3TNGQBWHNK@xxxxxxxxxx/ [1]
Signed-off-by: Maurice Hieronymus <mhi@xxxxxxxxxxx>
---
Maurice Hieronymus (2):
PCI: Replace pci_dev->is_busmaster with accessors
PCI: Replace pci_dev->broken_parity_status with accessors
drivers/edac/edac_pci_sysfs.c | 4 +--
drivers/net/ethernet/sfc/falcon/farch.c | 2 +-
drivers/net/ethernet/sfc/siena/farch.c | 2 +-
drivers/pci/pci-driver.c | 2 +-
drivers/pci/pci-sysfs.c | 4 +--
drivers/pci/pci.c | 6 ++---
drivers/scsi/lpfc/lpfc_init.c | 4 +--
drivers/xen/xen-pciback/conf_space_header.c | 4 +--
drivers/xen/xen-pciback/pciback_ops.c | 4 +--
include/linux/pci.h | 42 +++++++++++++++++++++++++++--
10 files changed, 56 insertions(+), 18 deletions(-)
---
base-commit: dc59e4fea9d83f03bad6bddf3fa2e52491777482
change-id: 20260711-pci-dev-flags-fbbcf4ff9031
Best regards,
--
Maurice Hieronymus <mhi@xxxxxxxxxxx>