Re: [X86] Add a boot parameter to force-enable PAT

From: Dave Jones
Date: Tue May 20 2008 - 20:58:14 EST


On Tue, May 20, 2008 at 03:42:49PM -0700, H. Peter Anvin wrote:

> > Yes, that would be nicer. As to the alias; "nopat" hasn't been in a
> > released kernel yet so should be okay to do away with? It's not like
> > it's in Documentation/kernel-parameters.txt or anything... ;-/
> >
>
> OK, just double-checked... since it's not in Linus we can still change
> it, and as so I'd suggest the pat= option.

Not boot-tested, but it compiles for me..
I also folded in the 'debugpat' option.

Signed-off-by: Dave Jones <davej@xxxxxxxxxx>

diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index e37f456..9f9c2c2 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -1478,6 +1478,12 @@ and is between 256 and 4096 characters. It is defined in the file
the specified number of seconds. This is to be used if
your oopses keep scrolling off the screen.

+ pat= [X86] Page attribute table support.
+ off don't use page attribute tables.
+ force enable use of page attribute tables, even if the
+ CPU isn't in the kernel's whitelist.
+ debug output additional debugging information during setup.
+
pcbit= [HW,ISDN]

pcd. [PARIDE]
diff --git a/arch/x86/kernel/cpu/addon_cpuid_features.c b/arch/x86/kernel/cpu/addon_cpuid_features.c
index c2e1ce3..8b65f14 100644
--- a/arch/x86/kernel/cpu/addon_cpuid_features.c
+++ b/arch/x86/kernel/cpu/addon_cpuid_features.c
@@ -51,8 +51,15 @@ void __cpuinit init_scattered_cpuid_features(struct cpuinfo_x86 *c)
}

#ifdef CONFIG_X86_PAT
+int forcepat;
+
void __cpuinit validate_pat_support(struct cpuinfo_x86 *c)
{
+ if (forcepat == 1) {
+ printk(KERN_INFO "Force enabling PAT\n");
+ return;
+ }
+
switch (c->x86_vendor) {
case X86_VENDOR_AMD:
if (c->x86 >= 0xf && c->x86 <= 0x11)
diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c
index e83b770..7429bee 100644
--- a/arch/x86/mm/pat.c
+++ b/arch/x86/mm/pat.c
@@ -25,8 +25,11 @@
#include <asm/mtrr.h>
#include <asm/io.h>

+static int debug_enable;
+
#ifdef CONFIG_X86_PAT
int __read_mostly pat_wc_enabled = 1;
+extern int forcepat;

void __cpuinit pat_disable(char *reason)
{
@@ -34,23 +37,22 @@ void __cpuinit pat_disable(char *reason)
printk(KERN_INFO "%s\n", reason);
}

-static int nopat(char *str)
+static int __init patsetup(char *str)
{
- pat_disable("PAT support disabled.");
+ if (strcmp("force", str) == 0) {
+ forcepat = 1;
+ printk(KERN_INFO "Force enabling PAT\n");
+ }
+ if (strcmp("off", str) == 0)
+ pat_disable("PAT support disabled.");
+ if (strcmp("debug", str) == 0)
+ debug_enable = 1;
return 0;
}
-early_param("nopat", nopat);
+early_param("pat=", patsetup);
#endif


-static int debug_enable;
-static int __init pat_debug_setup(char *str)
-{
- debug_enable = 1;
- return 0;
-}
-__setup("debugpat", pat_debug_setup);
-
#define dprintk(fmt, arg...) \
do { if (debug_enable) printk(KERN_INFO fmt, ##arg); } while (0)


--
http://www.codemonkey.org.uk
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/