From: James.Bottomley@HansenPartnership.com (James Bottomley)
To: linux-arm-kernel@lists.infradead.org
Subject: USB mass storage and ARM cache coherency
Date: Sun, 28 Feb 2010 10:31:03 +0530 [thread overview]
Message-ID: <1267333263.2762.11.camel@mulgrave.site> (raw)
In-Reply-To: <1267316072.23523.1842.camel@pasglop>
On Sun, 2010-02-28 at 11:14 +1100, Benjamin Herrenschmidt wrote:
> On Fri, 2010-02-26 at 21:00 +0000, Russell King - ARM Linux wrote:
> > On Fri, Feb 26, 2010 at 04:25:21PM +0000, Catalin Marinas wrote:
> > > For mmap'ed pages (and present in the page cache), is it guaranteed that
> > > the HCD driver won't write to it once it has been mapped into user
> > > space? If that's the case, it may solve the problem by just reversing
> > > the meaning of PG_arch_1 on ARM and assume that a newly allocated page
> > > has dirty D-cache by default.
> >
> > I guess we could also set PG_arch_1 in the DMA API as well, to avoid the
> > unnecessary D cache flushing when clean pages get mapped into userspace.
>
> That's an interesting thought for us too. When doing I$/D$ coherency, we
> have to fist flush the D$ and then invalidate the I$. If we could keep
> track of D$ and I$ separately, we could avoid the first step in many
> cases, including the DMA API trick you mentioned.
>
> I wonder if it's time to get a PG_arch_2 :-)
Sorry to be a bit late to the party (on holiday), but I/D coherency is
supposed to be taken care of using flush_cache_page in the memory
mapping routines. On parisc, at least, we don't use any PG_arch flags
to help. The way it's supposed to work is that I is invalidated on
mapping or remapping, so the I/O code only needs to worry about flushing
D. The guarantee we pass to userland is that any page we do I/O to has
a clean D cache before it goes back to userspace. Thus if userspace
executes the page, the I cache gets its first movein there. There is an
underlying assumption to all of this: The CPU won't speculatively move
in I cache until the page is executed, so we can rely on the
flush_cache_page in the mapping to keep the I cache invalidated until
we're ready to execute. The other fundamental assumption is that if
userspace needs to modify an executable region (say for dynamic linking)
it has to take care of reinvalidating the I cache itself ... although it
can do this by remapping the region to alter the flags (i.e W no X then
X no W).
But the point of all of this is that I cache invalidation doesn't appear
anywhere in the I/O path ... so if we're getting I/D incoherency,
there's some problem in the mm code (or there's a missing arch
assumption ... like I cache gets moved in more aggressively than we
expect). Parisc is very sensitive to I/D incoherency, so we'd notice if
there were a serious generic problem here.
James
next prev parent reply other threads:[~2010-02-28 5:01 UTC|newest]
Thread overview: 155+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20100129185434.GH19501@one-eyed-alien.net>
[not found] ` <1265045354.25750.52.camel@pc1117.cambridge.arm.com>
2010-02-08 6:55 ` USB mass storage and ARM cache coherency Pavel Machek
2010-02-08 7:33 ` Andreas Mohr
2010-02-08 10:19 ` Catalin Marinas
2010-02-08 9:51 ` Catalin Marinas
2010-02-08 10:03 ` Andy Green
2010-02-17 9:50 ` Sascha Hauer
2010-02-17 9:57 ` Andy Green
2010-02-08 10:52 ` Pavel Machek
2010-02-08 11:28 ` Catalin Marinas
2010-02-16 7:57 ` Shilimkar, Santosh
2010-02-16 8:22 ` Oliver Neukum
2010-02-16 8:55 ` Shilimkar, Santosh
2010-02-16 9:07 ` Oliver Neukum
2010-02-16 9:39 ` Russell King - ARM Linux
2010-02-16 13:32 ` Oliver Neukum
2010-02-16 13:40 ` Shilimkar, Santosh
2010-02-16 13:46 ` Oliver Neukum
2010-02-16 14:12 ` Shilimkar, Santosh
2010-02-16 14:22 ` Oliver Neukum
2010-02-16 14:45 ` Shilimkar, Santosh
2010-02-16 15:44 ` Alan Stern
2010-02-17 8:55 ` Shilimkar, Santosh
2010-02-17 9:10 ` Oliver Neukum
2010-02-17 9:17 ` Shilimkar, Santosh
2010-02-17 17:02 ` Alan Stern
2010-02-17 20:26 ` Russell King - ARM Linux
2010-02-17 20:30 ` Gadiyar, Anand
2010-02-18 6:56 ` Oliver Neukum
2010-02-18 7:14 ` Gadiyar, Anand
2010-02-17 12:29 ` Jamie Lokier
2010-02-17 3:21 ` Ming Lei
2010-02-17 9:05 ` Benjamin Herrenschmidt
2010-02-17 9:15 ` Oliver Neukum
2010-02-17 9:40 ` Benjamin Herrenschmidt
2010-02-17 10:09 ` Oliver Neukum
2010-02-17 10:18 ` Benjamin Herrenschmidt
2010-02-17 10:23 ` Oliver Neukum
2010-02-17 12:15 ` Benjamin Herrenschmidt
2010-02-17 9:55 ` Russell King - ARM Linux
2010-02-17 10:05 ` Benjamin Herrenschmidt
2010-02-17 15:27 ` Catalin Marinas
2010-02-17 20:37 ` Benjamin Herrenschmidt
2010-02-17 20:44 ` Russell King - ARM Linux
2010-02-17 22:31 ` Benjamin Herrenschmidt
2010-02-19 17:15 ` Catalin Marinas
2010-02-19 17:36 ` Catalin Marinas
2010-02-19 20:53 ` Oliver Neukum
2010-02-24 2:48 ` Benjamin Herrenschmidt
2010-02-24 7:16 ` Oliver Neukum
2010-02-24 21:12 ` Benjamin Herrenschmidt
2010-02-25 3:48 ` Oliver Neukum
2010-02-26 0:22 ` Benjamin Herrenschmidt
2010-02-25 12:36 ` James Bottomley
2010-02-24 2:47 ` Benjamin Herrenschmidt
2010-02-24 16:19 ` Alan Stern
2010-02-24 21:13 ` Benjamin Herrenschmidt
2010-02-24 21:50 ` Alan Stern
2010-02-25 20:52 ` Benjamin Herrenschmidt
2010-02-26 16:00 ` Catalin Marinas
2010-02-26 21:36 ` Benjamin Herrenschmidt
2010-02-26 16:25 ` Catalin Marinas
2010-02-26 16:52 ` Alan Stern
2010-02-26 21:51 ` Benjamin Herrenschmidt
2010-02-26 21:00 ` Russell King - ARM Linux
2010-02-28 0:14 ` Benjamin Herrenschmidt
2010-02-28 5:01 ` James Bottomley [this message]
2010-03-01 10:39 ` Catalin Marinas
2010-03-01 11:06 ` Russell King - ARM Linux
2010-03-02 12:11 ` FUJITA Tomonori
2010-03-02 17:05 ` Catalin Marinas
2010-03-02 17:47 ` Catalin Marinas
2010-03-02 23:33 ` Benjamin Herrenschmidt
2010-03-03 10:21 ` Catalin Marinas
2010-03-02 23:29 ` Benjamin Herrenschmidt
2010-03-03 3:47 ` FUJITA Tomonori
2010-03-03 5:10 ` Benjamin Herrenschmidt
2010-03-03 5:40 ` James Bottomley
2010-03-03 9:36 ` Russell King - ARM Linux
2010-03-03 10:24 ` James Bottomley
2010-03-03 19:41 ` Russell King - ARM Linux
2010-03-04 2:00 ` Benjamin Herrenschmidt
2010-03-04 8:26 ` James Bottomley
2010-03-04 21:25 ` Benjamin Herrenschmidt
2010-03-03 6:35 ` FUJITA Tomonori
2010-03-03 10:43 ` Catalin Marinas
2010-03-03 10:40 ` Catalin Marinas
2010-03-03 21:54 ` Pavel Machek
2010-03-04 6:54 ` Wolfgang Mües
2010-03-04 9:31 ` Russell King - ARM Linux
2010-03-06 10:56 ` Wolfgang Mües
2010-03-06 11:05 ` Oliver Neukum
2010-03-06 19:44 ` Russell King - ARM Linux
2010-03-04 13:47 ` Catalin Marinas
2010-03-04 13:35 ` Catalin Marinas
2010-03-04 13:51 ` Pavel Machek
2010-03-04 14:21 ` James Bottomley
2010-03-04 14:27 ` Russell King - ARM Linux
2010-03-04 15:25 ` Catalin Marinas
2010-03-04 15:34 ` Russell King - ARM Linux
2010-03-04 21:31 ` Benjamin Herrenschmidt
2010-03-06 10:47 ` James Bottomley
2010-03-06 19:36 ` Russell King - ARM Linux
2010-03-06 21:07 ` Benjamin Herrenschmidt
2010-03-07 5:54 ` James Bottomley
2010-03-08 11:17 ` Catalin Marinas
2010-03-06 21:03 ` Benjamin Herrenschmidt
2010-03-07 3:37 ` James Bottomley
2010-03-08 8:46 ` FUJITA Tomonori
2010-03-09 2:25 ` Benjamin Herrenschmidt
2010-03-04 15:29 ` Catalin Marinas
2010-03-04 15:41 ` Paul Mundt
2010-03-04 16:30 ` Russell King - ARM Linux
2010-03-04 17:34 ` Catalin Marinas
2010-03-04 17:54 ` Russell King - ARM Linux
2010-03-04 18:07 ` Catalin Marinas
2010-03-04 21:37 ` Benjamin Herrenschmidt
2010-03-04 22:11 ` Catalin Marinas
2010-03-05 4:34 ` Benjamin Herrenschmidt
2010-03-05 9:27 ` Catalin Marinas
2010-03-05 1:17 ` Paul Mundt
2010-03-05 4:44 ` Benjamin Herrenschmidt
2010-03-10 3:52 ` Paul Mundt
2010-03-11 21:44 ` Benjamin Herrenschmidt
2010-03-04 21:34 ` Benjamin Herrenschmidt
2010-03-04 21:28 ` Benjamin Herrenschmidt
2010-03-04 21:40 ` Russell King - ARM Linux
2010-03-05 4:31 ` Benjamin Herrenschmidt
2010-03-04 15:35 ` Catalin Marinas
2010-03-07 8:23 ` Pavel Machek
2010-03-08 10:57 ` Catalin Marinas
2010-03-02 23:26 ` Benjamin Herrenschmidt
2010-03-01 10:42 ` Catalin Marinas
2010-03-03 20:24 ` Jamie Lokier
2010-02-26 21:40 ` Benjamin Herrenschmidt
2010-02-26 21:49 ` Russell King - ARM Linux
2010-02-28 0:24 ` Benjamin Herrenschmidt
2010-02-28 19:17 ` Pavel Machek
2010-03-01 11:10 ` Catalin Marinas
2010-03-02 4:11 ` Benjamin Herrenschmidt
2010-02-24 2:39 ` Benjamin Herrenschmidt
2010-02-26 16:44 ` Catalin Marinas
2010-02-26 21:49 ` Benjamin Herrenschmidt
2010-02-26 22:03 ` Russell King - ARM Linux
2010-02-28 0:29 ` Benjamin Herrenschmidt
2010-02-28 23:20 ` Catalin Marinas
2010-02-28 23:17 ` Catalin Marinas
2010-02-17 15:27 ` Catalin Marinas
2010-02-17 15:39 ` Catalin Marinas
2010-02-17 15:40 ` Catalin Marinas
2010-02-17 15:40 ` Catalin Marinas
2010-02-17 16:19 ` Catalin Marinas
2010-02-17 16:19 ` Catalin Marinas
2010-02-16 8:44 ` Russell King - ARM Linux
2010-02-16 8:51 ` Gadiyar, Anand
2010-02-20 7:21 ` Pete Zaitcev
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=1267333263.2762.11.camel@mulgrave.site \
--to=james.bottomley@hansenpartnership.com \
--cc=linux-arm-kernel@lists.infradead.org \
/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;
as well as URLs for NNTP newsgroup(s).