From: Russell King - ARM Linux <linux@armlinux.org.uk>
To: Lars-Peter Clausen <lars@metafoo.de>
Cc: Masahiro Yamada <yamada.masahiro@socionext.com>,
Robin Murphy <robin.murphy@arm.com>,
dmaengine@vger.kernel.org,
linux-arm-kernel <linux-arm-kernel@lists.infradead.org>,
Arnd Bergmann <arnd@arndb.de>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
Tejun Heo <tj@kernel.org>,
"David S. Miller" <davem@davemloft.net>
Subject: Re: [Question] devm_kmalloc() for DMA ?
Date: Wed, 8 Mar 2017 21:19:00 +0000 [thread overview]
Message-ID: <20170308211900.GE21222@n2100.armlinux.org.uk> (raw)
In-Reply-To: <456e0515-b9d7-e1b6-fc25-a2ec5244d9db@metafoo.de>
On Wed, Mar 08, 2017 at 09:44:17PM +0100, Lars-Peter Clausen wrote:
> On 03/08/2017 08:59 PM, Russell King - ARM Linux wrote:
> > On Wed, Mar 08, 2017 at 08:48:31PM +0100, Lars-Peter Clausen wrote:
> >> When the DMA memory is mapped for reading from the device the associated
> >> cachelines are invalidated without writeback. There is no guarantee that
> >> the changes made to the devres_node have made it to main memory yet, or
> >> is there?
> >
> > That is incorrect.
> >
> > Overlapping cache lines are always written back on transitions from CPU
> > to device ownership of the buffer (eg, dma_map_*().)
>
> On ARM. But my understanding is that this is not a universal requirement
> according to DMA-API.txt. It says that mappings must be cache line aligned
> and otherwise behavior is undefined.
There is no use of the term "undefined" in the document you refer to.
There is the recommendation that regions are cache line aligned, but
there is quite a bit of history in the kernel where DMA has been to
regions that are not cache line aligned, and where the DMA region
overlaps with data that has recent accesses made to it.
The situation is improving (in that DMA buffers are being allocated
separately, rather than being part of some other structure) but that
doesn't mean that it's safe to assume that overlapping cache lines can
be invalidated.
In any case, DMA with devm allocated buffers really is not a good idea.
The lifetime of devm allocated buffers is between their allocation and
the point that the driver is unbound (either via probe failure or
removal.) If that turns out to be shorter than DMA, then you end up
scribbing over free'd memory.
Moreover, any memory that is dma_map'd must be dma_unmap'd before
being freed.
So, unless we're going to get devm_* stuff for DMA API and for ensuring
that DMA is disabled, I don't think using devm_k*alloc() with DMA is
really a good idea.
Take the fact that it returns memory that is not cache line aligned to
be a big clue that it shouldn't be used for this purpose.
--
RMK's Patch system: http://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up
according to speedtest.net.
next prev parent reply other threads:[~2017-03-08 21:19 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-08 10:59 Masahiro Yamada
2017-03-08 11:15 ` Robin Murphy
2017-03-08 18:06 ` Masahiro Yamada
2017-03-08 19:48 ` Lars-Peter Clausen
2017-03-08 19:59 ` Russell King - ARM Linux
2017-03-08 20:44 ` Lars-Peter Clausen
2017-03-08 21:19 ` Russell King - ARM Linux [this message]
2017-03-08 21:33 ` Lars-Peter Clausen
2017-03-09 3:25 ` Masahiro Yamada
2017-03-09 9:20 ` Russell King - ARM Linux
2017-03-09 11:19 ` Robin Murphy
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=20170308211900.GE21222@n2100.armlinux.org.uk \
--to=linux@armlinux.org.uk \
--cc=James.Bottomley@hansenpartnership.com \
--cc=arnd@arndb.de \
--cc=davem@davemloft.net \
--cc=dmaengine@vger.kernel.org \
--cc=lars@metafoo.de \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=robin.murphy@arm.com \
--cc=tj@kernel.org \
--cc=yamada.masahiro@socionext.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
all inboxes | Powered by JetHome®