From: Jason Gunthorpe <jgg@nvidia.com>
Cc: Christian Koenig <christian.koenig@amd.com>,
Dongwon Kim <dongwon.kim@intel.com>,
dri-devel@lists.freedesktop.org, intel-xe@lists.freedesktop.org,
iommu@lists.linux.dev, Kevin Tian <kevin.tian@intel.com>,
Leon Romanovsky <leonro@nvidia.com>,
linaro-mm-sig@lists.linaro.org, linux-media@vger.kernel.org,
Matthew Brost <matthew.brost@intel.com>,
Simona Vetter <simona.vetter@ffwll.ch>,
Sumit Semwal <sumit.semwal@linaro.org>,
Thomas Hellstrom <thomas.hellstrom@linux.intel.com>,
Vivek Kasireddy <vivek.kasireddy@intel.com>
Subject: [PATCH RFC 24/26] iommufd: Support DMA-bufs with multiple physical ranges
Date: Tue, 17 Feb 2026 20:11:55 -0400 [thread overview]
Message-ID: <24-v1-b5cab63049c0+191af-dmabuf_map_type_jgg@nvidia.com> (raw)
In-Reply-To: <0-v1-b5cab63049c0+191af-dmabuf_map_type_jgg@nvidia.com>
Support the full list of physical address protocol. This requires seeking
to the correct start entry in the physical list and maintaing the current
offset as the population progresses.
Remove the phys field related to the replaced single entry version.
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
---
drivers/iommu/iommufd/io_pagetable.h | 3 +-
drivers/iommu/iommufd/pages.c | 48 ++++++++++++++++++++--------
2 files changed, 35 insertions(+), 16 deletions(-)
diff --git a/drivers/iommu/iommufd/io_pagetable.h b/drivers/iommu/iommufd/io_pagetable.h
index fcd1a2c75dfa3d..3c95b631d86354 100644
--- a/drivers/iommu/iommufd/io_pagetable.h
+++ b/drivers/iommu/iommufd/io_pagetable.h
@@ -203,7 +203,6 @@ struct iopt_pages_dmabuf_track {
struct iopt_pages_dmabuf {
struct dma_buf_attachment *attach;
struct dma_buf_phys_list *exp_phys;
- struct dma_buf_phys_vec phys;
/* Always PAGE_SIZE aligned */
unsigned long start;
struct list_head tracker;
@@ -260,7 +259,7 @@ static inline bool iopt_dmabuf_revoked(struct iopt_pages *pages)
{
lockdep_assert_held(&pages->mutex);
if (iopt_is_dmabuf(pages))
- return pages->dmabuf.phys.len == 0;
+ return pages->dmabuf.exp_phys == NULL;
return false;
}
diff --git a/drivers/iommu/iommufd/pages.c b/drivers/iommu/iommufd/pages.c
index 9a23c3e30959a9..85cb1f9ab2ae91 100644
--- a/drivers/iommu/iommufd/pages.c
+++ b/drivers/iommu/iommufd/pages.c
@@ -1078,7 +1078,9 @@ static int pfn_reader_user_update_pinned(struct pfn_reader_user *user,
}
struct pfn_reader_dmabuf {
- struct dma_buf_phys_vec phys;
+ struct dma_buf_phys_list *exp_phys;
+ unsigned int cur_index;
+ unsigned long cur_base;
unsigned long start_offset;
};
@@ -1089,8 +1091,10 @@ static int pfn_reader_dmabuf_init(struct pfn_reader_dmabuf *dmabuf,
if (WARN_ON(iopt_dmabuf_revoked(pages)))
return -EINVAL;
- dmabuf->phys = pages->dmabuf.phys;
+ dmabuf->exp_phys = pages->dmabuf.exp_phys;
dmabuf->start_offset = pages->dmabuf.start;
+ dmabuf->cur_index = 0;
+ dmabuf->cur_base = 0;
return 0;
}
@@ -1100,6 +1104,15 @@ static int pfn_reader_fill_dmabuf(struct pfn_reader_dmabuf *dmabuf,
unsigned long last_index)
{
unsigned long start = dmabuf->start_offset + start_index * PAGE_SIZE;
+ unsigned long npages = last_index - start_index + 1;
+ struct dma_buf_phys_vec *vec =
+ &dmabuf->exp_phys->phys[dmabuf->cur_index];
+
+ while (dmabuf->cur_base + vec->len <= start) {
+ dmabuf->cur_base += vec->len;
+ dmabuf->cur_index++;
+ vec++;
+ }
/*
* start/last_index and start are all PAGE_SIZE aligned, the batch is
@@ -1107,8 +1120,25 @@ static int pfn_reader_fill_dmabuf(struct pfn_reader_dmabuf *dmabuf,
* If the dmabuf has been sliced on a sub page offset then the common
* batch to domain code will adjust it before mapping to the domain.
*/
- batch_add_pfn_num(batch, PHYS_PFN(dmabuf->phys.paddr + start),
- last_index - start_index + 1, BATCH_MMIO);
+ while (npages) {
+ unsigned long offset_in_entry = start - dmabuf->cur_base;
+ unsigned long avail_pages = (vec->len - offset_in_entry) >>
+ PAGE_SHIFT;
+ unsigned long nr = min(npages, avail_pages);
+
+ if (!batch_add_pfn_num(
+ batch, (vec->paddr + offset_in_entry) >> PAGE_SHIFT,
+ nr, BATCH_MMIO))
+ break;
+
+ start += nr * PAGE_SIZE;
+ npages -= nr;
+ if (nr == avail_pages) {
+ dmabuf->cur_base += vec->len;
+ dmabuf->cur_index++;
+ vec++;
+ }
+ }
return 0;
}
@@ -1447,7 +1477,6 @@ static void iopt_revoke_notify(struct dma_buf_attachment *attach)
iopt_area_index(area),
iopt_area_last_index(area));
}
- pages->dmabuf.phys.len = 0;
dma_buf_pal_unmap_phys(pages->dmabuf.attach, pages->dmabuf.exp_phys);
pages->dmabuf.exp_phys = NULL;
}
@@ -1487,21 +1516,12 @@ static int iopt_map_dmabuf(struct iommufd_ctx *ictx, struct iopt_pages *pages,
goto err_detach;
}
- /* For now only works with single range exporters */
- if (pages->dmabuf.exp_phys->length != 1) {
- rc = -EINVAL;
- goto err_unmap;
- }
- pages->dmabuf.phys = pages->dmabuf.exp_phys->phys[0];
-
dma_resv_unlock(dmabuf->resv);
/* On success iopt_release_pages() will detach and put the dmabuf. */
pages->dmabuf.attach = attach;
return 0;
-err_unmap:
- dma_buf_pal_unmap_phys(attach, pages->dmabuf.exp_phys);
err_detach:
dma_resv_unlock(dmabuf->resv);
dma_buf_detach(dmabuf, attach);
--
2.43.0
next prev parent reply other threads:[~2026-02-18 0:21 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-18 0:11 [PATCH RFC 00/26] Add DMA-buf mapping types and convert vfio/iommufd to use them Jason Gunthorpe
2026-02-18 0:11 ` [PATCH RFC 01/26] dma-buf: Introduce DMA-buf mapping types Jason Gunthorpe
2026-02-18 1:37 ` Claude review: " Claude Code Review Bot
2026-02-18 0:11 ` [PATCH RFC 02/26] dma-buf: Add the SGT DMA mapping type Jason Gunthorpe
2026-02-18 1:37 ` Claude review: " Claude Code Review Bot
2026-02-18 0:11 ` [PATCH RFC 03/26] dma-buf: Add dma_buf_mapping_attach() Jason Gunthorpe
2026-02-18 1:37 ` Claude review: " Claude Code Review Bot
2026-02-18 0:11 ` [PATCH RFC 04/26] dma-buf: Route SGT related actions through attach->map_type Jason Gunthorpe
2026-02-18 1:37 ` Claude review: " Claude Code Review Bot
2026-02-18 0:11 ` [PATCH RFC 05/26] dma-buf: Allow single exporter drivers to avoid the match_mapping function Jason Gunthorpe
2026-02-18 1:37 ` Claude review: " Claude Code Review Bot
2026-02-18 0:11 ` [PATCH RFC 06/26] drm: Check the SGT ops for drm_gem_map_dma_buf() Jason Gunthorpe
2026-02-18 1:37 ` Claude review: " Claude Code Review Bot
2026-02-18 0:11 ` [PATCH RFC 07/26] dma-buf: Convert all the simple exporters to use SGT mapping type Jason Gunthorpe
2026-02-18 1:37 ` Claude review: " Claude Code Review Bot
2026-02-18 0:11 ` [PATCH RFC 08/26] drm/vmwgfx: Use match_mapping instead of dummy calls Jason Gunthorpe
2026-02-18 1:37 ` Claude review: " Claude Code Review Bot
2026-02-18 0:11 ` [PATCH RFC 09/26] accel/habanalabs: Use the SGT mapping type Jason Gunthorpe
2026-02-18 1:37 ` Claude review: " Claude Code Review Bot
2026-02-18 0:11 ` [PATCH RFC 10/26] drm/xe/dma-buf: " Jason Gunthorpe
2026-02-18 1:37 ` Claude review: " Claude Code Review Bot
2026-02-18 0:11 ` [PATCH RFC 11/26] drm/amdgpu: " Jason Gunthorpe
2026-02-18 1:37 ` Claude review: " Claude Code Review Bot
2026-02-18 0:11 ` [PATCH RFC 12/26] vfio/pci: Change the DMA-buf exporter to use mapping_type Jason Gunthorpe
2026-02-18 1:37 ` Claude review: " Claude Code Review Bot
2026-02-18 0:11 ` [PATCH RFC 13/26] dma-buf: Update dma_buf_phys_vec_to_sgt() to use the SGT mapping type Jason Gunthorpe
2026-02-18 1:37 ` Claude review: " Claude Code Review Bot
2026-02-18 0:11 ` [PATCH RFC 14/26] iio: buffer: convert " Jason Gunthorpe
2026-02-18 1:37 ` Claude review: " Claude Code Review Bot
2026-02-18 0:11 ` [PATCH RFC 15/26] functionfs: " Jason Gunthorpe
2026-02-18 1:37 ` Claude review: " Claude Code Review Bot
2026-02-18 0:11 ` [PATCH RFC 16/26] dma-buf: Remove unused SGT stuff from the common structures Jason Gunthorpe
2026-02-18 1:37 ` Claude review: " Claude Code Review Bot
2026-02-18 0:11 ` [PATCH RFC 17/26] treewide: Rename dma_buf_map_attachment(_unlocked) to dma_buf_sgt_ Jason Gunthorpe
2026-02-18 1:38 ` Claude review: " Claude Code Review Bot
2026-02-18 0:11 ` [PATCH RFC 18/26] treewide: Rename dma_buf_unmap_attachment(_unlocked) to dma_buf_sgt_* Jason Gunthorpe
2026-02-18 1:38 ` Claude review: " Claude Code Review Bot
2026-02-18 0:11 ` [PATCH RFC 19/26] treewide: Rename dma_buf_attach() to dma_buf_sgt_attach() Jason Gunthorpe
2026-02-18 1:38 ` Claude review: " Claude Code Review Bot
2026-02-18 0:11 ` [PATCH RFC 20/26] treewide: Rename dma_buf_dynamic_attach() to dma_buf_sgt_dynamic_attach() Jason Gunthorpe
2026-02-18 1:38 ` Claude review: " Claude Code Review Bot
2026-02-18 0:11 ` [PATCH RFC 21/26] dma-buf: Add the Physical Address List DMA mapping type Jason Gunthorpe
2026-02-18 1:38 ` Claude review: " Claude Code Review Bot
2026-02-18 0:11 ` [PATCH RFC 22/26] vfio/pci: Add physical address list support to DMABUF Jason Gunthorpe
2026-02-18 1:38 ` Claude review: " Claude Code Review Bot
2026-02-18 0:11 ` [PATCH RFC 23/26] iommufd: Use the PAL mapping type instead of a vfio function Jason Gunthorpe
2026-02-18 1:38 ` Claude review: " Claude Code Review Bot
2026-02-18 0:11 ` Jason Gunthorpe [this message]
2026-02-18 1:38 ` Claude review: iommufd: Support DMA-bufs with multiple physical ranges Claude Code Review Bot
2026-02-18 0:11 ` [PATCH RFC 25/26] iommufd/selftest: Check multi-phys DMA-buf scenarios Jason Gunthorpe
2026-02-18 1:38 ` Claude review: " Claude Code Review Bot
2026-02-18 0:11 ` [PATCH RFC 26/26] dma-buf: Add kunit tests for mapping type Jason Gunthorpe
2026-02-18 1:38 ` Claude review: " Claude Code Review Bot
2026-02-18 1:37 ` Claude review: Add DMA-buf mapping types and convert vfio/iommufd to use them Claude Code Review Bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=24-v1-b5cab63049c0+191af-dmabuf_map_type_jgg@nvidia.com \
--to=jgg@nvidia.com \
--cc=christian.koenig@amd.com \
--cc=dongwon.kim@intel.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=iommu@lists.linux.dev \
--cc=kevin.tian@intel.com \
--cc=leonro@nvidia.com \
--cc=linaro-mm-sig@lists.linaro.org \
--cc=linux-media@vger.kernel.org \
--cc=matthew.brost@intel.com \
--cc=simona.vetter@ffwll.ch \
--cc=sumit.semwal@linaro.org \
--cc=thomas.hellstrom@linux.intel.com \
--cc=vivek.kasireddy@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox