From: Mike Stroyan <mike@stroyan.net>
To: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: "linux-ia64@vger.kernel.org" <linux-ia64@vger.kernel.org>,
LKML <linux-kernel@vger.kernel.org>,
"tony.luck@intel.com" <tony.luck@intel.com>,
"linux-mm@kvack.org" <linux-mm@kvack.org>,
Christoph Lameter <clameter@sgi.com>,
GOTO <y-goto@jp.fujitsu.com>,
dmosberger@gmail.com, hugh@veritas.com, nickpiggin@yahoo.com.au
Subject: Re: [BUGFIX][PATCH] DO flush icache before set_pte() on ia64.
Date: Thu, 5 Jul 2007 12:13:09 -0600 [thread overview]
Message-ID: <20070705181308.GB8320@stroyan.net> (raw)
In-Reply-To: <20070704150504.423f6c54.kamezawa.hiroyu@jp.fujitsu.com>
On Wed, Jul 04, 2007 at 03:05:04PM +0900, KAMEZAWA Hiroyuki wrote:
> This is a experimental patch for fixing icache flush race of ia64(Montecito).
>
> Problem Description:
> Montecito, new ia64 processor, has separated L2 i-cache and d-cache,
> and i-cache and d-cache is not consistent in automatic way.
>
> L1 cache is also separated but L1 D-cache is write-through. Then, before
> Montecito, any changes in L1-dcache is visible in L2-mixed-cache consistently.
>
> Montecito has separated L2 cache and Mixed L3 cache. But...L2 D-cache is
> *write back*. (See http://download.intel.com/design/Itanium2/manuals/
> 30806501.pdf section 2.3.3)
>
> Assume : valid data is in L2 d-cache and old data in L3 mixed cache.
> If write-back L2->L3 is delayed, at L2 i-cache miss cpu will fetch old data
> in L3 mixed cache.
> By this, L2-icache-miss will read wrong instruction from L3-mixed cache.
> (Just I think so, is this correct ?)
The L3 cache is involved in the HP-UX defect description because the
earlier HP-UX patch PHKL_33781 added flushing of the instruction cache
when an executable mapping was removed. Linux never added that
unsuccessfull attempt at montecito cache coherency. In the current
linux situation it can execute old cache lines straight from L2 icache.
> Now, I think icache should be flushed before set_pte().
> This is a patch to try that.
>
> 1. remove all lazy_mmu_prot_update()...which is used by only ia64.
> 2. implements flush_cache_page()/flush_icache_page() for ia64.
>
> Something unsure....
> 3. mprotect() flushes cache before removing pte. Is this sane ?
> I added flush_icache_range() before set_pte() here.
>
> Any comments and advices ?
I am concerned about performance consequences. With the change
from lazy_mmu_prot_update to __flush_icache_page_ia64 you dropped
the code that avoids icache flushes for non-executable pages.
Section 4.6.2 of David Mosberger and Stephane Eranian's
"ia-64 linux kernel design and implementation" goes into some
detail about the performance penalties avoided by limiting icache
flushes to executable pages and defering flushes until the first
fault for execution.
Have you done any benchmarking to measure the performance
effect of these additional cache flushes? It would be particularly
interesting to measure on large systems with many CPUs. The fc.i
instruction needs to be broadcast to all CPUs in the system.
The only defect that I see in the current implementation of
lazy_mmu_prot_update() is that it is called too late in some
functions that are already calling it. Are your large changes
attempting to correct other defects? Or are you simplifying
away potentially valuable code because you don't understand it?
>
> Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
>
> ---
> arch/ia64/mm/init.c | 7 +------
> include/asm-generic/pgtable.h | 4 ----
> include/asm-ia64/cacheflush.h | 24 ++++++++++++++++++++++--
> include/asm-ia64/pgtable.h | 9 ---------
> mm/fremap.c | 1 -
> mm/memory.c | 13 ++++++-------
> mm/migrate.c | 6 +++++-
> mm/mprotect.c | 10 +++++++++-
> mm/rmap.c | 1 -
> 9 files changed, 43 insertions(+), 32 deletions(-)
You don't seem to have removed the lazy_mmu_prot_update() calls from
mm/hugetlb.c. Will that build with HUGETLBFS configured?
--
Mike Stroyan <mike@stroyan.net>
P.S. I am retired from hp. So the mike_stroyan@hp.com address that
this was previously cc'd to no longer reaches me.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2007-07-05 18:13 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-07-04 6:05 KAMEZAWA Hiroyuki
2007-07-04 6:31 ` Nick Piggin
2007-07-04 7:38 ` KAMEZAWA Hiroyuki
2007-07-05 2:04 ` Nick Piggin
2007-07-05 2:47 ` KAMEZAWA Hiroyuki
2007-07-05 3:19 ` Nick Piggin
2007-07-05 3:54 ` KAMEZAWA Hiroyuki
2007-07-05 4:29 ` Nick Piggin
2007-07-06 17:32 ` Christoph Lameter
2007-07-06 21:57 ` KAMEZAWA Hiroyuki
2007-07-05 18:13 ` Mike Stroyan [this message]
2007-07-05 22:18 ` KAMEZAWA Hiroyuki
2007-07-06 0:20 ` KAMEZAWA Hiroyuki
2007-07-05 22:27 ` KAMEZAWA Hiroyuki
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=20070705181308.GB8320@stroyan.net \
--to=mike@stroyan.net \
--cc=clameter@sgi.com \
--cc=dmosberger@gmail.com \
--cc=hugh@veritas.com \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=linux-ia64@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=nickpiggin@yahoo.com.au \
--cc=tony.luck@intel.com \
--cc=y-goto@jp.fujitsu.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