All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alistair Popple <apopple@nvidia.com>
To: "Thomas Hellström" <thomas.hellstrom@linux.intel.com>
Cc: Jason Gunthorpe <jgg@nvidia.com>,
	 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>,
	Vivek Kasireddy <vivek.kasireddy@intel.com>
Subject: Re: [PATCH RFC 01/26] dma-buf: Introduce DMA-buf mapping types
Date: Thu, 22 Oct 2026 22:17:55 +1100	[thread overview]
Message-ID: <atnkjQNkgXTmfecD@nvdebian.thelocal> (raw)
In-Reply-To: <6eeb6257a6ab3b5db384aeb255623a11cb09c603.camel@linux.intel.com>

On 2026-10-22 at 18:25 +1100, Thomas Hellström <thomas.hellstrom@linux.intel.com> wrote...
> On Thu, 2026-10-22 at 17:52 +1100, Alistair Popple wrote:
> > On 2026-10-21 at 23:37 +1100, Jason Gunthorpe <jgg@nvidia.com>
> > wrote...
> > > On Wed, Oct 21, 2026 at 08:24:40AM +0200, Thomas Hellström wrote:
> > > > > struct dma_buf_mapping_exp_ops
> > > > >    Base type for the per-mapping type exporter provided
> > > > > functions.
> > > > > This
> > > > >    would be the map/unmap callbacks. Each mapping type can
> > > > > provide
> > > > > its own
> > > > >    functions for map/unmap type operations with optimal type
> > > > > signatures.
> > > > 
> > > > Does it make sense to try to land this patch first, plus a
> > > > conversion
> > > > of pcie_p2p so we could agree on what the contract should look
> > > > like?
> > > 
> > > I think it would be good to focus on this patch as the main 'crux'
> > > of
> > > the series. The API contract is the main agreement. I'm relucant to
> > > merge code that has no users, so it woudl be ebtter to go up to at
> > > least through SGT.
> > >  
> > > > s/mapping/interconnect/? My gut feeling is that "interconnect"
> > > > best
> > > > describes what's typically going on, but "mapping" perhaps better
> > > > describes all cases.
> > > 
> > > My intention was to cover more than just the phyiscal transport. We
> > > do
> > > really want to get away from scatterlist, so having PCIe map with
> > > scatterlist and PCIe map with <something else> still ends up with
> > > two
> > > mapping types in the system.
> > > 
> > > This is why I choose the name over interconnect.
> > > 
> > > > Location of common protocols which typically carry cross-
> > > > subsystem
> > > > dependencies?
> > > > drivers/dma-buf/mapping_types? drivers/dma-buf/interconnects?
> > > 
> > > I'd encourage people to design more like PCI where the actual
> > > *interconnect* has its own home and there is just some minor call
> > > outs
> > > from dmabuf to help the matching logic.
> > > 
> > > > As discussed previously: 
> > > > Agree on theoretically possible matches at attach time, Match at
> > > > mapping time and guarantee the match is valid until
> > > > invalidate_mappings().
> > > 
> > > I was thinking about this some more, and I'm less sure now.
> > > 
> > > If I think about mlx5, in a multi-path PCIe configuration, it can
> > > move
> > > the translation around within a single PCIe path, but it cannot
> > > move
> > > it to another path without creating disruption for the
> > > application. This is a HW limitation in how the internal routing
> > > works..
> > > 
> > > I strongly suspect this will be the norm for any hardware that
> > > doesn't
> > > rely on decorated page tables to select the IO path..
> > > 
> > > So, while I agree we should support hardware that can fully change
> > > the
> > > path on each and every map, we also need to suport hardware that
> > > must
> > > pin the path during attach.
> > > 
> > > Probably this points to needing a 'pin' operation for the mapping
> > > selection after attach.
> > 
> > If I'm understanding things correctly we're expecting a change in
> > path between
> > attach and map time to be rare in practice. Therefore the need to
> > handle this
> > case is mostly as a fallback to not break things. So instead of
> > pinning could
> > new attachments just invalidate all existing incompatible attachments
> > on the
> > list by setting eg. attach->valid = 0?
> 
> I agree, (although I think the "invalidate_attachment" needs to be
> discussed). In the end the importer should be given a choice, either
> pin  and accept that subsequent attachers might see errors or accept
> app disruption.
> 
> > 
> > Attachment could also scan existing attachments to preferentially
> > pick matching
> > mapping_types that are compatible with existing attachments, thus
> > avoiding
> > invalidation where possible.
> 
> Current design appears to be that attach only determines the set of
> theoretically possible mapping types, disregarding other attachments. 
> Taking other attachments into account is also problematic because the
> dma-resv lock is not held.

Oh I see. Do you foresee any problems just taking the dma-resv lock to walk the
current attachments? If so we could probably resolve it with RCU, but I'd rather
keep it simple if we can.

> Looking at current GPU drivers, what you describe above is typically
> done at pin() time, but if some importers want an early very likely
> decision on what mapping_type to use, one could introduce a separate
> function that match the mapping_types, but that would be very similar
> to the map() function but without returning a sgt/mapping, or a pin()
> without actually pinning. One could reuse the invalidate_mappings()
> callback to indicate the mapping type is no longer valid?

I did wonder about that, but a callback for attachment invalidation seems like
it might be a pain for importers to syncrhonize with. What I'm thinking, which I
think is similar to what you describe, is something like the following:

1. Importer gets the likley attachment by passing a list of mapping types in
prefered order to dma_buf_mapping_attach() which returns the dma_buf_attachment
that would work based on current attachments and what the exporter provides:

attach = dma_buf_mapping_attach(...)

2. Takes dmabuf->resv lock.

3. Pins the attachment (if required):

rc = dma_buf_pin(attach)

DMA-BUF core revalidates the attachment is still valid (ie. by checking the
match again or via some other mechanism to detect the attachment path/location
has changed such as a sequence/generation number).

On error the importer can either fail or try to create a new attachment.

4. Map

rc = dma_buf_[sgt|pcie_p2p]_map(attach, ...)

Follows the same revalidation process as dma_buf_pin().

Thoughts?

 - Alistair

> /Thomas
> 
> 
> > 
> > Map time functions (eg. dma_buf_sgt_map_attachment) would check
> > attach->valid
> > and return a failure if a subsequent attachment/event had invalidated
> > the
> > mapping type.
> > 
> > Importers with invalidated attachments would then have to retry
> > creating the
> > attachment, probably getting a different mapping_type. Would this be
> > acceptable?
> > Or do some importers absolutely require the mapping_type to never
> > change once
> > the intial match/attachment has happened?
> > 
> >  - Alistair
> > 
> > > > > +/*
> > > > > + * Match items are generated by the importer using the
> > > > > DMA_BUF_IMAPPING_*() and
> > > > > + * the exporter using the DMA_BUF_EMAPPING_*() functions. Each
> > > > > mapping type
> > > > > + * defines its own signature with its own data to make the
> > > > > match and
> > > > > attachment.
> > > > > + */
> > > > > +struct dma_buf_mapping_match {
> > > > > +	const struct dma_buf_mapping_type *type;
> > > > > +	const struct dma_buf_mapping_exp_ops *exp_ops;
> > > > > +	union {
> > > > > +		/* Each mapping_type has unique match
> > > > > parameters
> > > > > here */
> > > > > +	};
> > > > 
> > > > Do we really need to add all global mapping types here? Then we'd
> > > > need
> > > > something for driver-private mapping types as well.
> > > 
> > > IIRC it is fixed size up front like this because of how the
> > > structure's memory is managed in this design..
> > > 
> > > If you want a driver private thing then I'd add a 'u64
> > > driver_private[2]' to the union and the driver can cast over it.
> > > 
> > > But this is the kernel, if you want to add an xe_mapping_type, then
> > > just add it. I don't know we need to do driver private things.
> > > 
> > > Jason

  reply	other threads:[~2026-10-22 11:18 UTC|newest]

Thread overview: 65+ 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-10-21  6:24   ` Thomas Hellström
2026-10-21 12:37     ` Jason Gunthorpe
2026-10-22  6:52       ` Alistair Popple
2026-10-22  7:25         ` Thomas Hellström
2026-10-22 11:17           ` Alistair Popple [this message]
2026-10-22 13:57             ` Thomas Hellström
2026-10-22 11:52           ` Jason Gunthorpe
2026-10-22 12:05             ` Thomas Hellström
2026-10-22 12:11               ` Jason Gunthorpe
2026-10-22 13:30         ` Christian König
2026-10-22 14:00           ` Jason Gunthorpe
2026-10-22  6:59       ` Thomas Hellström
2026-10-22  7:20         ` Alistair Popple
2026-10-22  7:29           ` Thomas Hellström
2026-02-18  0:11 ` [PATCH RFC 02/26] dma-buf: Add the SGT DMA mapping type Jason Gunthorpe
2026-02-18  0:11 ` [PATCH RFC 03/26] dma-buf: Add dma_buf_mapping_attach() Jason Gunthorpe
2026-10-16 20:26   ` Karl Mehltretter
2026-10-19  8:35     ` Christian König
2026-10-19 12:43       ` Thomas Hellström
2026-10-19 13:30         ` Jason Gunthorpe
2026-10-19 13:47           ` Thomas Hellström
2026-10-19 15:34             ` Christian König
2026-10-19 18:41             ` Jason Gunthorpe
2026-10-20  7:01           ` Christian König
2026-10-20 14:31             ` Jason Gunthorpe
2026-02-18  0:11 ` [PATCH RFC 04/26] dma-buf: Route SGT related actions through attach->map_type Jason Gunthorpe
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  0:11 ` [PATCH RFC 06/26] drm: Check the SGT ops for drm_gem_map_dma_buf() Jason Gunthorpe
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  0:11 ` [PATCH RFC 08/26] drm/vmwgfx: Use match_mapping instead of dummy calls Jason Gunthorpe
2026-02-18  0:11 ` [PATCH RFC 09/26] accel/habanalabs: Use the SGT mapping type Jason Gunthorpe
2026-02-18  0:11 ` [PATCH RFC 10/26] drm/xe/dma-buf: " Jason Gunthorpe
2026-02-18  0:11 ` [PATCH RFC 11/26] drm/amdgpu: " Jason Gunthorpe
2026-02-18  0:11 ` [PATCH RFC 12/26] vfio/pci: Change the DMA-buf exporter to use mapping_type Jason Gunthorpe
2026-04-13  8:29   ` Baolu Lu
2026-04-13 13:01     ` Jason Gunthorpe
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  0:11 ` [PATCH RFC 14/26] iio: buffer: convert " Jason Gunthorpe
2026-02-18  0:11 ` [PATCH RFC 15/26] functionfs: " Jason Gunthorpe
2026-02-18  0:11 ` [PATCH RFC 16/26] dma-buf: Remove unused SGT stuff from the common structures Jason Gunthorpe
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  0:11 ` [PATCH RFC 18/26] treewide: Rename dma_buf_unmap_attachment(_unlocked) to dma_buf_sgt_* Jason Gunthorpe
2026-02-18  0:11 ` [PATCH RFC 19/26] treewide: Rename dma_buf_attach() to dma_buf_sgt_attach() Jason Gunthorpe
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  0:11 ` [PATCH RFC 21/26] dma-buf: Add the Physical Address List DMA mapping type Jason Gunthorpe
2026-04-13  8:58   ` Christian König
2026-04-13 12:16     ` Jason Gunthorpe
2026-04-22  8:17       ` Christian König
2026-04-22 11:53         ` Jason Gunthorpe
2026-04-22 12:39           ` Christian König
2026-04-22 13:13             ` Jason Gunthorpe
2026-04-22 14:04               ` Christian König
2026-04-22 15:00                 ` Jason Gunthorpe
2026-05-09  5:31                   ` Xu Yilun
2026-05-11 22:48                     ` Jason Gunthorpe
2026-02-18  0:11 ` [PATCH RFC 22/26] vfio/pci: Add physical address list support to DMABUF Jason Gunthorpe
2026-02-18  0:11 ` [PATCH RFC 23/26] iommufd: Use the PAL mapping type instead of a vfio function Jason Gunthorpe
2026-10-16 19:40   ` Karl Mehltretter
2026-02-18  0:11 ` [PATCH RFC 24/26] iommufd: Support DMA-bufs with multiple physical ranges Jason Gunthorpe
2026-02-18  0:11 ` [PATCH RFC 25/26] iommufd/selftest: Check multi-phys DMA-buf scenarios Jason Gunthorpe
2026-02-18  0:11 ` [PATCH RFC 26/26] dma-buf: Add kunit tests for mapping type Jason Gunthorpe
2026-03-01 19:05 ` [PATCH RFC 00/26] Add DMA-buf mapping types and convert vfio/iommufd to use them Jason Gunthorpe
2026-03-03  7:07   ` Kasireddy, Vivek

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=atnkjQNkgXTmfecD@nvdebian.thelocal \
    --to=apopple@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=jgg@nvidia.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.