linux-block.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 00/10] vfio/pci: Allow MMIO regions to be exported through dma-buf
@ 2025-08-04 13:00 Leon Romanovsky
  2025-08-04 13:00 ` [PATCH v1 01/10] PCI/P2PDMA: Remove redundant bus_offset from map state Leon Romanovsky
                   ` (10 more replies)
  0 siblings, 11 replies; 21+ messages in thread
From: Leon Romanovsky @ 2025-08-04 13:00 UTC (permalink / raw)
  To: Alex Williamson
  Cc: Jason Gunthorpe, Andrew Morton, Bjorn Helgaas,
	Christian König, Christoph Hellwig, dri-devel, iommu,
	Jens Axboe, Joerg Roedel, kvm, linaro-mm-sig, linux-block,
	linux-kernel, linux-media, linux-mm, linux-pci, Logan Gunthorpe,
	Marek Szyprowski, Robin Murphy, Sumit Semwal, Vivek Kasireddy,
	Will Deacon

Changelog:
v1:
 * Changed commit messages.
 * Reused DMA_ATTR_MMIO attribute.
 * Returned support for multiple DMA ranges per-dMABUF.
v0: https://lore.kernel.org/all/cover.1753274085.git.leonro@nvidia.com

---------------------------------------------------------------------------
Based on "[PATCH v1 00/16] dma-mapping: migrate to physical address-based API"
https://lore.kernel.org/all/cover.1754292567.git.leon@kernel.org series.
---------------------------------------------------------------------------

This series extends the VFIO PCI subsystem to support exporting MMIO regions
from PCI device BARs as dma-buf objects, enabling safe sharing of non-struct
page memory with controlled lifetime management. This allows RDMA and other
subsystems to import dma-buf FDs and build them into memory regions for PCI
P2P operations.

The series supports a use case for SPDK where a NVMe device will be owned
by SPDK through VFIO but interacting with a RDMA device. The RDMA device
may directly access the NVMe CMB or directly manipulate the NVMe device's
doorbell using PCI P2P.

However, as a general mechanism, it can support many other scenarios with
VFIO. This dmabuf approach can be usable by iommufd as well for generic
and safe P2P mappings.

In addition to the SPDK use-case mentioned above, the capability added
in this patch series can also be useful when a buffer (located in device
memory such as VRAM) needs to be shared between any two dGPU devices or
instances (assuming one of them is bound to VFIO PCI) as long as they
are P2P DMA compatible.

The implementation provides a revocable attachment mechanism using dma-buf
move operations. MMIO regions are normally pinned as BARs don't change
physical addresses, but access is revoked when the VFIO device is closed
or a PCI reset is issued. This ensures kernel self-defense against
potentially hostile userspace.

The series includes significant refactoring of the PCI P2PDMA subsystem
to separate core P2P functionality from memory allocation features,
making it more modular and suitable for VFIO use cases that don't need
struct page support.

-----------------------------------------------------------------------
The series is based originally on
https://lore.kernel.org/all/20250307052248.405803-1-vivek.kasireddy@intel.com/
but heavily rewritten to be based on DMA physical API.
-----------------------------------------------------------------------
The WIP branch can be found here:
https://git.kernel.org/pub/scm/linux/kernel/git/leon/linux-rdma.git/log/?h=dmabuf-vfio-v1

Thanks

Leon Romanovsky (8):
  PCI/P2PDMA: Remove redundant bus_offset from map state
  PCI/P2PDMA: Separate the mmap() support from the core logic
  PCI/P2PDMA: Simplify bus address mapping API
  PCI/P2PDMA: Refactor to separate core P2P functionality from memory
    allocation
  PCI/P2PDMA: Export pci_p2pdma_map_type() function
  types: move phys_vec definition to common header
  vfio/pci: Enable peer-to-peer DMA transactions by default
  vfio/pci: Add dma-buf export support for MMIO regions

Vivek Kasireddy (2):
  vfio: Export vfio device get and put registration helpers
  vfio/pci: Share the core device pointer while invoking feature
    functions

 block/blk-mq-dma.c                 |   7 +-
 drivers/iommu/dma-iommu.c          |   4 +-
 drivers/pci/p2pdma.c               | 154 ++++++++----
 drivers/vfio/pci/Kconfig           |  20 ++
 drivers/vfio/pci/Makefile          |   2 +
 drivers/vfio/pci/vfio_pci_config.c |  22 +-
 drivers/vfio/pci/vfio_pci_core.c   |  59 +++--
 drivers/vfio/pci/vfio_pci_dmabuf.c | 390 +++++++++++++++++++++++++++++
 drivers/vfio/pci/vfio_pci_priv.h   |  23 ++
 drivers/vfio/vfio_main.c           |   2 +
 include/linux/dma-buf.h            |   1 +
 include/linux/pci-p2pdma.h         | 114 +++++----
 include/linux/types.h              |   5 +
 include/linux/vfio.h               |   2 +
 include/linux/vfio_pci_core.h      |   4 +
 include/uapi/linux/vfio.h          |  25 ++
 kernel/dma/direct.c                |   4 +-
 mm/hmm.c                           |   2 +-
 18 files changed, 715 insertions(+), 125 deletions(-)
 create mode 100644 drivers/vfio/pci/vfio_pci_dmabuf.c

-- 
2.50.1


^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2025-09-02 12:58 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-04 13:00 [PATCH v1 00/10] vfio/pci: Allow MMIO regions to be exported through dma-buf Leon Romanovsky
2025-08-04 13:00 ` [PATCH v1 01/10] PCI/P2PDMA: Remove redundant bus_offset from map state Leon Romanovsky
2025-08-06 20:58   ` Alex Williamson
2025-09-02 11:06     ` Leon Romanovsky
2025-08-04 13:00 ` [PATCH v1 02/10] PCI/P2PDMA: Separate the mmap() support from the core logic Leon Romanovsky
2025-08-04 13:00 ` [PATCH v1 03/10] PCI/P2PDMA: Simplify bus address mapping API Leon Romanovsky
2025-08-04 13:00 ` [PATCH v1 04/10] PCI/P2PDMA: Refactor to separate core P2P functionality from memory allocation Leon Romanovsky
2025-08-06 21:42   ` Alex Williamson
2025-08-07  0:02     ` Jason Gunthorpe
2025-08-04 13:00 ` [PATCH v1 05/10] PCI/P2PDMA: Export pci_p2pdma_map_type() function Leon Romanovsky
2025-08-04 13:00 ` [PATCH v1 06/10] types: move phys_vec definition to common header Leon Romanovsky
2025-08-04 13:00 ` [PATCH v1 07/10] vfio: Export vfio device get and put registration helpers Leon Romanovsky
2025-08-04 13:00 ` [PATCH v1 08/10] vfio/pci: Enable peer-to-peer DMA transactions by default Leon Romanovsky
2025-08-06 22:02   ` Alex Williamson
2025-09-02 12:58     ` Leon Romanovsky
2025-08-04 13:00 ` [PATCH v1 09/10] vfio/pci: Share the core device pointer while invoking feature functions Leon Romanovsky
2025-08-04 13:00 ` [PATCH v1 10/10] vfio/pci: Add dma-buf export support for MMIO regions Leon Romanovsky
2025-08-04 15:26   ` Leon Romanovsky
2025-08-06 22:24   ` Alex Williamson
2025-08-04 14:10 ` [PATCH v1 00/10] vfio/pci: Allow MMIO regions to be exported through dma-buf Benjamin LaHaise
2025-08-04 14:18   ` Leon Romanovsky

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).