On Mon, 11 May 2026 07:58:22 -0700 Matt Evans <[email protected]> wrote:
> Hi, > > These patches fix a potential race for concurrent calls to > vfio_pci_core_setup_barmap(), and a DMABUF missing check for resource > before the export. Discussion on a previous series (different, > replaced by this one) is here: > > https://lore.kernel.org/kvm/[email protected] > > Responses in that thread indicated there wasn't a strong historical > reason to require the mapping to be performed on-demand at BAR > reference time. It's much simpler to move this earlier, to > vfio_pci_core_enable(), and that then avoids having to deal with > concurrent requests later. > > The first patch requests PCI resources and pci_iomap() of the BARs > from vfio_pci_core_enable(), moving this out of > vfio_pci_core_setup_barmap(). > > Some callers rely on vfio_pci_core_setup_barmap() for its ioremap() > effect, and other callers use it for its resource-acquiring effect. > The function turns into a cheap error check that both these actions > have occurred; that maintains the same error behaviour as before the > fix. > > The second patch adds a call to vfio_pci_core_setup_barmap() to VFIO > DMABUF export to check the resource is reserved; previously this was > able to export an unrequested resource. Although patch 1 at first > appears to fix this by requesting resources at enable time, code using > the BAR still needs to check the resource really was acquired. > > (FWIW, Leon gave a R-B on v2 in > https://lore.kernel.org/kvm/20260426111606.GC440345@unreal/ though > this repost isn't 100% identical so I didn't propagate it.) > > The third patch refactors vfio_pci_core_setup_barmap() plus the various > vdev->barmap[] accesses into vfio_pci_core_get_iomap() which returns > either a pointer to the mapping or an ERR_PTR() describing why it > doesn't exist. This is used by callers that need the mapping, but > also by other callers to check that the resource/mapping step was > successful. > > Matt Evans (3): > vfio/pci: Set up BAR resources and maps in vfio_pci_core_enable() > vfio/pci: Check BAR resources before exporting a DMABUF > vfio/pci: Replace vfio_pci_core_setup_barmap() with > vfio_pci_core_get_iomap() > > drivers/vfio/pci/nvgrace-gpu/main.c | 20 +++++++----- > drivers/vfio/pci/vfio_pci_core.c | 48 ++++++++++++++++++++++++----- > drivers/vfio/pci/vfio_pci_dmabuf.c | 6 ++-- > drivers/vfio/pci/vfio_pci_rdwr.c | 42 +++++-------------------- > drivers/vfio/pci/virtio/legacy_io.c | 13 ++++---- > include/linux/vfio_pci_core.h | 20 +++++++++++- > 6 files changed, 91 insertions(+), 58 deletions(-) > Applied 1/ and 2/ to the vfio for-linus branch for v7.1-rc. My intention is to have these merged for rc4, which I'll then use as the base for the v7.2 queue where we can pull in 3/. Thanks, Alex

