From: Christoph Hellwig <hch@lst.de>
To: Catalin Marinas <catalin.marinas@arm.com>
Cc: "T.J. Mercier" <tjmercier@google.com>,
Christoph Hellwig <hch@lst.de>,
Marek Szyprowski <m.szyprowski@samsung.com>,
Robin Murphy <robin.murphy@arm.com>,
isaacmanjarres@google.com, iommu@lists.linux.dev,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] dma-direct: Set SG_DMA_SWIOTLB flag for dma-direct
Date: Thu, 9 May 2024 15:06:59 +0200 [thread overview]
Message-ID: <20240509130659.GA12345@lst.de> (raw)
In-Reply-To: <ZjyAFE4Fk_r7KnDA@arm.com>
On Thu, May 09, 2024 at 08:49:40AM +0100, Catalin Marinas wrote:
> I see the swiotlb use as some internal detail of the DMA API
> implementation that should not leak outside this framework.
And that's what it is.
> I think we should prevent bouncing if DMA_ATTR_SKIP_CPU_SYNC is passed.
> However, this is not sufficient with a proper use of the DMA API since
> the first dma_map_*() without this attribute can still do the bouncing.
> IMHO what we need is a DMA_ATTR_NO_BOUNCE or DMA_ATTR_SHARED that will
> be used on the first map and potentially on subsequent calls in
> combination with DMA_ATTR_SKIP_CPU_SYNC (though we could use the latter
> to imply "shared"). The downside is that mapping may fail if the
> coherent mask is too narrow.
We have two big problems here that kinda interact:
1) DMA_ATTR_SKIP_CPU_SYNC is just a horrible API. It exposes an
implementation detail instead of dealing with use cases.
The original one IIRC was to deal with networking receive
buffers that are often only partially filled and the networking
folks wanted to avoid the overhead for doing the cache operations
for the rest. It kinda works for that but already gets iffy
when swiotlb is involved. The other abuses of the flag just
went downhill form there.
2) the model of dma mapping a single chunk of memory to multiple
devices is not really well accounted for in the DMA API.
So for two we need a memory allocator that can take the constraints
of multiple devices into account, and probably a way to fail a
dma-buf attach when the importer can't address the memory.
We also then need to come up with a memory ownership / cache
maintenance protocol that works for this use case.
next prev parent reply other threads:[~2024-05-09 13:07 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-03 18:37 [PATCH] dma-direct: Set SG_DMA_SWIOTLB flag for dma-direct T.J. Mercier
2024-05-04 8:53 ` Petr Tesařík
2024-05-09 13:28 ` Robin Murphy
2024-05-06 5:29 ` Christoph Hellwig
2024-05-06 16:00 ` T.J. Mercier
2024-05-06 16:02 ` Christoph Hellwig
2024-05-06 16:10 ` T.J. Mercier
2024-05-06 16:19 ` Christoph Hellwig
2024-05-06 16:39 ` T.J. Mercier
2024-05-07 5:43 ` Christoph Hellwig
2024-05-07 20:07 ` T.J. Mercier
2024-05-08 11:33 ` Christoph Hellwig
2024-05-09 12:54 ` Robin Murphy
2024-05-09 18:26 ` T.J. Mercier
2024-05-08 17:19 ` Catalin Marinas
2024-05-08 20:14 ` T.J. Mercier
2024-05-09 7:49 ` Catalin Marinas
2024-05-09 13:06 ` Christoph Hellwig [this message]
2024-05-09 18:32 ` T.J. Mercier
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=20240509130659.GA12345@lst.de \
--to=hch@lst.de \
--cc=catalin.marinas@arm.com \
--cc=iommu@lists.linux.dev \
--cc=isaacmanjarres@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=robin.murphy@arm.com \
--cc=tjmercier@google.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