|
|
Subscribe / Log in / New account

dma-buf: Add support for mapping dmabufs via interconnects

From:  Vivek Kasireddy <vivek.kasireddy-AT-intel.com>
To:  dri-devel-AT-lists.freedesktop.org, intel-xe-AT-lists.freedesktop.org, linux-media-AT-vger.kernel.org, linaro-mm-sig-AT-lists.linaro.org
Subject:  [RFC 0/8] dma-buf: Add support for mapping dmabufs via interconnects
Date:  Tue, 14 Oct 2025 00:08:50 -0700
Message-ID:  <20251014071243.811884-1-vivek.kasireddy@intel.com>
Cc:  Vivek Kasireddy <vivek.kasireddy-AT-intel.com>, Jason Gunthorpe <jgg-AT-nvidia.com>, Leon Romanovsky <leonro-AT-nvidia.com>, Christian Koenig <christian.koenig-AT-amd.com>, Sumit Semwal <sumit.semwal-AT-linaro.org>, Thomas Hellström <thomas.hellstrom-AT-linux.intel.com>, Simona Vetter <simona.vetter-AT-ffwll.ch>, Matthew Brost <matthew.brost-AT-intel.com>, Dongwon Kim <dongwon.kim-AT-intel.com>
Archive-link:  Article

In a typical dma-buf use case, a dmabuf exporter makes its buffer
buffer available to an importer by mapping it using DMA APIs
such as dma_map_sgtable() or dma_map_resource(). However, this
is not desirable in some cases where the exporter and importer
are directly connected via a physical or virtual link (or
interconnect) and the importer can access the buffer without
having it DMA mapped.

So, to address this scenario, this patch series adds APIs to map/
unmap dmabufs via interconnects and also provides a helper to
identify the first common interconnect between the exporter and
importer. Furthermore, this patch series also adds support for
IOV interconnect in the vfio-pci driver and Intel Xe driver.

The IOV interconnect is a virtual interconnect between an SRIOV
physical function (PF) and its virtual functions (VFs). And, for
the IOV interconnect, the addresses associated with a buffer are
shared using an xarray (instead of an sg_table) that is populated
with entries of type struct range. 

The dma-buf patches in this series are based on ideas/suggestions
provided by Jason Gunthorpe, Christian Koenig and Thomas Hellström.
Note that the Xe driver patches in this series need to be rebased
in the next version to include feedback from the previous round
of review.

Patchset overview:
Patch 1-3: Add dma-buf APIs to map/unmap and match
Patch 4: Add support for IOV interconnect in vfio-pci driver
Patch 5: Add support for IOV interconnect in Xe driver
Patch 6-8: Create and use a new dma_addr array for LMEM based
           dmabuf BOs to store translated addresses (DPAs)

This series is rebased on top of the following repo:
https://git.kernel.org/pub/scm/linux/kernel/git/leon/linu...

Associated Qemu patch series:
https://lore.kernel.org/qemu-devel/20251003234138.85820-1...
Associated vfio-pci patch series:
https://lore.kernel.org/dri-devel/cover.1760368250.git.le...

This series is tested using the following method:
- Run Qemu with the following relevant options:
  qemu-system-x86_64 -m 4096m ....
  -device ioh3420,id=root_port1,bus=pcie.0
  -device x3130-upstream,id=upstream1,bus=root_port1
  -device xio3130-downstream,id=downstream1,bus=upstream1,chassis=9
  -device xio3130-downstream,id=downstream2,bus=upstream1,chassis=10
  -device vfio-pci,host=0000:03:00.1,bus=downstream1
  -device virtio-gpu,max_outputs=1,blob=true,xres=1920,yres=1080,bus=downstream2
  -display gtk,gl=on
  -object memory-backend-memfd,id=mem1,size=4096M
  -machine q35,accel=kvm,memory-backend=mem1 ...
- Run Gnome Wayland with the following options in the Guest VM:
  # cat /usr/lib/udev/rules.d/61-mutter-primary-gpu.rules
  ENV{DEVNAME}=="/dev/dri/card1", TAG+="mutter-device-preferred-primary", TAG+="mutter-device-disable-kms-modifiers"
  # XDG_SESSION_TYPE=wayland dbus-run-session -- /usr/bin/gnome-shell --wayland --no-x11 &

Cc: Jason Gunthorpe <jgg@nvidia.com>
Cc: Leon Romanovsky <leonro@nvidia.com>
Cc: Christian Koenig <christian.koenig@amd.com>
Cc: Sumit Semwal <sumit.semwal@linaro.org>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Simona Vetter <simona.vetter@ffwll.ch>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Dongwon Kim <dongwon.kim@intel.com>

Vivek Kasireddy (8):
  dma-buf: Add support for map/unmap APIs for interconnects
  dma-buf: Add a helper to match interconnects between exporter/importer
  dma-buf: Add support for IOV interconnect
  vfio/pci/dmabuf: Add support for IOV interconnect
  drm/xe/dma_buf: Add support for IOV interconnect
  drm/xe/pf: Add a helper function to get a VF's backing object in LMEM
  drm/xe/bo: Create new dma_addr array for dmabuf BOs associated with
    VFs
  drm/xe/pt: Add an additional check for dmabuf BOs while doing bind

 drivers/dma-buf/dma-buf.c                  | 113 +++++++++++++++-
 drivers/gpu/drm/xe/xe_bo.c                 | 148 +++++++++++++++++++--
 drivers/gpu/drm/xe/xe_bo_types.h           |  12 ++
 drivers/gpu/drm/xe/xe_dma_buf.c            |  19 ++-
 drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c |  23 ++++
 drivers/gpu/drm/xe/xe_gt_sriov_pf_config.h |   1 +
 drivers/gpu/drm/xe/xe_pt.c                 |   8 ++
 drivers/gpu/drm/xe/xe_sriov_pf_types.h     |  19 +++
 drivers/vfio/pci/vfio_pci_dmabuf.c         | 141 +++++++++++++++++++-
 include/linux/dma-buf-interconnect.h       |  51 +++++++
 include/linux/dma-buf.h                    |  20 +++
 11 files changed, 540 insertions(+), 15 deletions(-)
 create mode 100644 include/linux/dma-buf-interconnect.h

-- 
2.50.1




Copyright © 2025, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds