From: Catalin Marinas <catalin.marinas@arm.com>
To: Pavel Machek <pavel@ucw.cz>
Cc: Matthew Dharm <mdharm-kernel@one-eyed-alien.net>,
Sergei Shtylyov <sshtylyov@ru.mvista.com>,
Ming Lei <tom.leiming@gmail.com>,
linux-usb@vger.kernel.org,
linux-kernel <linux-kernel@vger.kernel.org>,
Sebastian Siewior <bigeasy@linutronix.de>,
Greg KH <greg@kroah.com>,
linux-arm-kernel <linux-arm-kernel@lists.infradead.org>
Subject: Re: USB mass storage and ARM cache coherency
Date: Mon, 08 Feb 2010 09:51:16 +0000 [thread overview]
Message-ID: <1265622676.4020.19.camel@pc1117.cambridge.arm.com> (raw)
In-Reply-To: <20100208065519.GE1290@ucw.cz>
Hi,
On Mon, 2010-02-08 at 06:55 +0000, Pavel Machek wrote:
> > > So, let's put this in the HCD drivers and be done with it.
> >
> > The patch below is what fixes the I-D cache incoherency issues on ARM. I
> > don't particularly like the solution but it seems to be the only one
> > available.
>
> Really? It looks like arm should just flush the caches when mapping
> executable page to the userspace.... you can't expect all the drivers
> to be modified like that...
We could of course flush the caches every time we get a page fault but
that's far from optimal, especially since DMA-capable drivers to do not
pollute the D-cache and don't need this extra flushing. Note that the
recent ARM processors have PIPT caches but separate for I and D and it's
the PIO drivers that pollute the D-cache.
The kernel API provides flush_dcache_page() to be called every time the
kernel writes to a page cache page. This is further optimised for
working in pair with update_mmu_cache() to delay the flushing until the
actual page is mapped into user space and this latter function is called
(which in general is not a cache maintenance function).
The problem with some PIO drivers and a filesystems like ext2 is that
there is no call to flush_dcache_page() when getting data into a page
cache page. Since the page isn't marked as dirty (PG_arch_1), a
subsequent call to update_mmu_cache() as a result of a page fault
doesn't flush the caches.
There is a flush_icache_page() function called from __do_fault(),
however, Documentation/cachetlb.txt states that all the functionality of
this function can be implemented in flush_dcache_page() and
update_mmu_cache(), hence this function is a no-op.
Please suggest a better solution that does not involve modifying generic
Linux code.
> Plus it does unneccessary flushes on x86, etc...
On x86, it should indeed be conditionally compiled based on
ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE.
Regards.
--
Catalin
next prev parent reply other threads:[~2010-02-08 9:51 UTC|newest]
Thread overview: 193+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-29 14:34 Catalin Marinas
2010-01-29 16:10 ` Oliver Neukum
2010-01-29 16:23 ` Ming Lei
2010-01-29 16:34 ` Catalin Marinas
2010-01-29 16:41 ` Oliver Neukum
2010-01-29 17:14 ` Catalin Marinas
2010-01-29 17:51 ` Sergei Shtylyov
2010-01-29 18:54 ` Matthew Dharm
2010-01-29 19:35 ` Greg KH
2010-02-01 13:49 ` Catalin Marinas
2010-02-01 17:29 ` Catalin Marinas
2010-02-01 20:14 ` Alan Stern
2010-02-02 4:24 ` Paul Mundt
2010-02-02 9:58 ` Catalin Marinas
2010-02-01 22:30 ` Andreas Mohr
2010-02-02 6:58 ` Oliver Neukum
2010-02-02 9:31 ` Florian Fainelli
2010-02-02 6:39 ` Paul Mundt
2010-02-02 11:05 ` Catalin Marinas
2010-02-02 11:15 ` Paul Mundt
2010-02-02 9:11 ` Sebastian Andrzej Siewior
2010-02-02 11:09 ` Catalin Marinas
2010-02-02 11:48 ` Oliver Neukum
2010-02-02 12:01 ` Catalin Marinas
2010-02-02 12:07 ` Oliver Neukum
2010-02-02 12:11 ` Andreas Mohr
2010-02-02 14:42 ` Clemens Ladisch
2010-02-02 14:52 ` Oliver Neukum
2010-02-02 15:10 ` Andreas Mohr
2010-02-02 15:34 ` Catalin Marinas
2010-02-02 20:38 ` Andreas Mohr
2010-02-02 12:39 ` Catalin Marinas
2010-02-02 13:08 ` Oliver Neukum
2010-02-02 14:34 ` Catalin Marinas
2010-02-02 17:11 ` Alan Stern
2010-02-02 17:20 ` Catalin Marinas
2010-02-02 21:52 ` Andreas Mohr
2010-02-03 15:15 ` Alan Stern
2010-02-08 6:55 ` Pavel Machek
2010-02-02 13:36 ` Ming Lei
2010-02-02 14:35 ` Catalin Marinas
2010-02-08 6:55 ` Pavel Machek
2010-02-08 7:33 ` Andreas Mohr
2010-02-08 10:19 ` Catalin Marinas
2010-02-08 9:51 ` Catalin Marinas [this message]
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
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 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 22:27 ` Andreas Mohr
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
2010-02-03 23:56 George Spelvin
2010-02-04 4:39 ` Paul Mundt
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=1265622676.4020.19.camel@pc1117.cambridge.arm.com \
--to=catalin.marinas@arm.com \
--cc=bigeasy@linutronix.de \
--cc=greg@kroah.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=mdharm-kernel@one-eyed-alien.net \
--cc=pavel@ucw.cz \
--cc=sshtylyov@ru.mvista.com \
--cc=tom.leiming@gmail.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
Powered by JetHome