From: Jamie Lokier <jamie@shareable.org>
To: Ingo Molnar <mingo@elte.hu>
Cc: linux-kernel@vger.kernel.org, Andi Kleen <ak@suse.de>
Subject: Re: Do x86 NX and AMD prefetch check cause page fault infinite loop?
Date: Thu, 1 Jul 2004 02:48:18 +0100 [thread overview]
Message-ID: <20040701014818.GE32560@mail.shareable.org> (raw)
In-Reply-To: <20040630143850.GF29285@mail.shareable.org>
Ingo, I think I now know what must be added to your 32-bit NX patch to
prevent the "infinite loop without a signal" problem.
It appears the correct way to prevent that one possibility I thought
of, with no side effects, is to add this test in
i386/mm/fault.c:is_prefetch():
/* Catch an obscure case of prefetch inside an NX page. */
if (error_code & 16)
return 0;
That means that it doesn't count as a prefetch fault if it's an
_instruction_ fault. I.e. an instruction fault will always raise a
signal. Bit 4 of error_code was kindly added alongside the NX feature
by AMD.
(Tweak: Because early Intel 64-bit chips don't have NX, perhaps it
should say "if ((error_code & 16) && boot_cpu_has(X86_FEATURE_NX))"
instead -- if we find the bit isn't architecturally set to 0 for those
chips).
This test isn't needed in the plain, non-NX i386 kernel, because the
condition can never occur. (Actually it can once, a really obscure
condition due to separate ITLB and DTLB loading and page table races
with other CPUs, but it's transient so won't loop infinitely).
Enjoy,
-- Jamie
next prev parent reply other threads:[~2004-07-01 1:48 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-06-30 1:38 Do x86 NX and AMD prefetch check cause page fault infinite loop? Jamie Lokier
2004-06-30 5:50 ` Ingo Molnar
2004-06-30 14:21 ` Jamie Lokier
2004-06-30 14:38 ` Jamie Lokier
2004-07-01 1:48 ` Jamie Lokier [this message]
2004-07-01 6:32 ` Ingo Molnar
2004-07-01 15:04 ` Jamie Lokier
2004-07-02 7:15 ` Ingo Molnar
2004-07-02 8:50 ` [patch] i386 nx prefetch fix & cleanups, 2.6.7-mm5 Ingo Molnar
2004-06-30 6:10 ` Do x86 NX and AMD prefetch check cause page fault infinite loop? Denis Vlasenko
2004-06-30 14:23 ` Jamie Lokier
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=20040701014818.GE32560@mail.shareable.org \
--to=jamie@shareable.org \
--cc=ak@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
/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.