From: David Sanders <linux@sandersweb.net>
To: linux-kernel@vger.kernel.org
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
Jan Beulich <jbeulich@novell.com>, Ingo Molnar <mingo@elte.hu>,
Thomas Gleixner <tglx@linutronix.de>,
Andi Kleen <andi-suse@firstfloor.org>
Subject: Re: [BUG] x86 kenel won't boot under Virtual PC
Date: Mon, 1 Sep 2008 16:23:11 -0400 [thread overview]
Message-ID: <200809011623.12518.linux@sandersweb.net> (raw)
In-Reply-To: <200808311603.49056.linux@sandersweb.net>
On Sunday 31 August 2008 16:03, David Sanders wrote:
> On Sunday 31 August 2008 14:47, Linus Torvalds wrote:
> > On Sun, 31 Aug 2008, David Sanders wrote:
> > > I recently discovered that x86 kernels won't boot under Virtual PC.
> >
> > What CPU does Virtual PC emulate? As far as Wikipedia is concerned (not
> > that I'd take it on complete faith) it emulates a 32-bit Intel Pentium
> > II.
> >
> > And that commit makes the kernel use the "P6 nops" for such hardware.
> > Maybe Virtual PC doesn't support the newer intel nop things?
> >
> > Intel docs say that it should be available on any intel CPU that has
> > CPUID.01H.EAX[11:8] = 0110B or 1111B. That's the "family ID", and Pentium
> > II should have a family ID of 6 (ie that 0110B case).
> >
> > So it sounds like a Virtual PC bug, but I dunno. And maybe we should just
> > use the legcay nops for anything that isn't modern (ie P4+ or Core)?
> >
> > Linus
>
> Virtual PC does not emulate a processor like it does with the motherboard,
> video, NIC ,etc. What you see in the virtual machine is the actual
> processor, except that Virtual PC looks at all of your instructions and
> modifies ring 0 code and the like. It may be that Virtual PC was not
> designed with an awareness of these nops that the commit added.
>
> I would suggest an configuration option to select legacy-nops or newer-nops
> and a kernel boot-time parameter so it can be disabled to allow
> installation of a distribution for example.
>
> I would be happy to submit such a patch if you agree (or I'll try to
> anyway).
OK, below is my patch. The problem is I just built with it and the boot
problem still exists. Either the patch is flawed or git-bisect gave me the
wrong commit. Any help would be appreciated.
David
Signed-off-by: David Sanders <linux@sandersweb.net>
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index ed92864..a38f362 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -445,6 +445,13 @@ config PARAVIRT_DEBUG
Enable to debug paravirt_ops internals. Specifically, BUG if
a paravirt_op is missing when it is called.
+config INTEL_NOPS
+ bool "Use legacy x86 NOPS"
+ depends on X86_32
+ help
+ This option tells kernel to use legacy x86 nops
+
+
config MEMTEST
bool "Memtest"
help
diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c
index 2763cb3..10713e4 100644
--- a/arch/x86/kernel/alternative.c
+++ b/arch/x86/kernel/alternative.c
@@ -58,6 +58,16 @@ static int __init setup_noreplace_paravirt(char *str)
__setup("noreplace-paravirt", setup_noreplace_paravirt);
#endif
+static int intel_legacy_nops = 0;
+
+static int __init setup_intel_legacy_nops(char *str)
+{
+ intel_legacy_nops = 1;
+ return 1;
+}
+
+__setup("intel-legacy-nops", setup_intel_legacy_nops);
+
#define DPRINTK(fmt, args...) if (debug_alternative) \
printk(KERN_DEBUG fmt, args)
@@ -167,12 +177,17 @@ const unsigned char *const *find_nop_table(void)
const unsigned char *const *noptable = intel_nops;
int i;
- for (i = 0; noptypes[i].cpuid >= 0; i++) {
- if (boot_cpu_has(noptypes[i].cpuid)) {
- noptable = noptypes[i].noptable;
- break;
+ if (!intel_legacy_nops) {
+#ifndef CONFIG_INTEL_NOPS
+ for (i = 0; noptypes[i].cpuid >= 0; i++) {
+ if (boot_cpu_has(noptypes[i].cpuid)) {
+ noptable = noptypes[i].noptable;
+ break;
+ }
}
+#endif /* CONFIG_INTEL_NOPS */
}
+
return noptable;
}
next prev parent reply other threads:[~2008-09-01 20:23 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-31 18:22 [BUG] x86 kenel won't boot under Virtual PC David Sanders
2008-08-31 18:47 ` Linus Torvalds
2008-08-31 19:27 ` Arjan van de Ven
2008-08-31 19:39 ` Linus Torvalds
2008-09-05 15:38 ` David Sanders
2008-09-05 16:15 ` Jan Beulich
2008-09-05 16:39 ` Linus Torvalds
2008-09-05 18:43 ` Ingo Molnar
2008-09-05 20:06 ` H. Peter Anvin
2008-09-05 19:08 ` Jeremy Fitzhardinge
2008-09-05 20:12 ` H. Peter Anvin
2008-09-05 16:30 ` Linus Torvalds
2008-09-05 17:55 ` Andi Kleen
2008-08-31 20:03 ` David Sanders
2008-09-01 20:23 ` David Sanders [this message]
2008-09-01 22:22 ` Linus Torvalds
2008-09-02 12:08 ` David Sanders
2008-09-02 18:12 ` Linus Torvalds
2008-09-02 18:44 ` David Sanders
2008-09-03 11:09 ` Peter Zijlstra
2008-09-03 11:20 ` David Sanders
[not found] ` <48C1C156.9080003@zytor.com>
2008-09-07 20:07 ` David Sanders
2008-09-07 23:22 ` David Sanders
2008-09-08 1:48 ` H. Peter Anvin
2008-09-08 2:49 ` David Sanders
2008-09-08 4:04 ` H. Peter Anvin
2008-09-08 9:42 ` Andi Kleen
2008-09-08 13:25 ` David Sanders
2008-09-08 15:09 ` Linus Torvalds
2008-09-08 15:23 ` Ingo Molnar
2008-09-08 15:36 ` H. Peter Anvin
2008-09-08 15:38 ` David Sanders
2008-09-08 15:38 ` H. Peter Anvin
2008-09-08 15:45 ` Andi Kleen
2008-09-08 15:43 ` H. Peter Anvin
2008-09-08 15:50 ` H. Peter Anvin
2008-09-08 15:50 ` Andi Kleen
2008-09-08 15:50 ` H. Peter Anvin
2008-09-08 15:57 ` Andi Kleen
2008-09-08 15:54 ` H. Peter Anvin
2008-09-08 16:07 ` Linus Torvalds
2008-09-08 16:13 ` H. Peter Anvin
2008-09-08 16:15 ` H. Peter Anvin
2008-09-08 16:26 ` David Sanders
2008-09-08 16:20 ` Linus Torvalds
2008-09-08 16:32 ` H. Peter Anvin
2008-09-08 17:02 ` Ingo Molnar
2008-09-08 16:34 ` david
2008-09-08 16:42 ` H. Peter Anvin
2008-09-08 18:51 ` david
2008-09-08 16:59 ` Linus Torvalds
2008-09-08 17:00 ` Andi Kleen
2008-09-08 17:04 ` Linus Torvalds
2008-09-08 17:08 ` H. Peter Anvin
2008-09-08 17:12 ` H. Peter Anvin
2008-09-08 17:41 ` Linus Torvalds
2008-09-08 17:38 ` Linus Torvalds
2008-09-08 17:59 ` H. Peter Anvin
2008-09-08 19:09 ` H. Peter Anvin
2008-09-08 22:42 ` Linus Torvalds
2008-09-08 17:18 ` Andi Kleen
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=200809011623.12518.linux@sandersweb.net \
--to=linux@sandersweb.net \
--cc=andi-suse@firstfloor.org \
--cc=jbeulich@novell.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.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 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.