From: Ingo Molnar <mingo@elte.hu>
To: Andi Kleen <andi@firstfloor.org>
Cc: Jeremy Fitzhardinge <jeremy@goop.org>,
tglx@linutronix.de, linux-kernel@vger.kernel.org,
venkatesh.pallipadi@intel.com
Subject: Re: [PATCH] Fix early_ioremap on x86-64
Date: Sun, 20 Jan 2008 18:59:55 +0100 [thread overview]
Message-ID: <20080120175955.GA4993@elte.hu> (raw)
In-Reply-To: <20080120172840.GA24608@basil.nowhere.org>
* Andi Kleen <andi@firstfloor.org> wrote:
> Fix early_ioremap on x86-64
>
> [Venki, sorry for blaming PAT for this earlier. It was innocent.]
> [Note the patch is on top of git-x86 + gbpages applied. I think there
> will be an trivial reject without gbpages-direct applied first]
>
> I had ACPI failures on several machines since a few days. Symptom was
> NUMA nodes not getting detected or worse cores not getting detected.
> They all came from ACPI not being able to read various of its tables.
> I finally bisected it down to Jeremy's "put _PAGE_GLOBAL into
> PAGE_KERNEL" change. With that the fix was fairly obvious. The problem
> was that early_ioremap() didn't use a "_all" flush that would affect
> the global PTEs too. So with global bits getting used everywhere now
> an early_ioremap would not actually flush a mapping if something else
> was mapped previously on that slot (which can happen with
> early_iounmap inbetween)
>
> This patch changes all flushes in init_64.c to be __flush_tlb_all()
> and fixes the problem here.
ah, very nice! This is the bad commit:
------------------------->
Subject: x86: fold _PAGE_GLOBAL into __PAGE_KERNEL
From: Jeremy Fitzhardinge <jeremy@goop.org>
With the iounmap problem resolved, it should be OK to always set
_PAGE_GLOBAL in __PAGE_KERNEL*.
[ Did this patch cause problems before? ]
<------------------------
Jeremy did suspect something about this change, as indicated in the
changelog. But because the change was so finegrained, the bisection
almost directly led to the fix. _That_ i think clearly demonstrates the
power of bisection and finegrained changes.
but note what the fundamental problem is - we've turned a previously
safe flushing API into an unsafe one - __flush_tlb() will only be safe
in the rarest of circumstances. There are some other matches:
./mm/init_64.c: __flush_tlb();
./kernel/head64.c: __flush_tlb();
The boot identity mappings zapped do not have PGE set at the moment, but
they could in the future (once we do native pagetable setup straight
from flat mode) - and this is not a performance critical path anyway.
./kernel/cpu/mtrr/generic.c: __flush_tlb();
./kernel/cpu/mtrr/generic.c: __flush_tlb();
these include an open-coded version of __flush_tlb_all() so they are
safe.
and we might as well make the non-PGE flush the 'special API'. I.e.
rename __flush_tlb() to __flush_tlb_partial() and rename
__flush_tlb_all() to __flush_tlb(). This makes it very apparent which
should be used by default and which does what.
Ingo
next prev parent reply other threads:[~2008-01-20 18:00 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-20 17:28 [PATCH] Fix early_ioremap on x86-64 Andi Kleen
2008-01-20 17:59 ` Ingo Molnar [this message]
2008-01-20 19:12 ` Andi Kleen
2008-01-21 0:20 ` Ingo Molnar
2008-01-20 18:04 ` [PATCH] Fix early_ioremap on x86-64 II Andi Kleen
2008-01-21 19:00 ` Jeremy Fitzhardinge
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=20080120175955.GA4993@elte.hu \
--to=mingo@elte.hu \
--cc=andi@firstfloor.org \
--cc=jeremy@goop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=tglx@linutronix.de \
--cc=venkatesh.pallipadi@intel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.