From: Rene Herman <rene.herman@keyaccess.nl>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: "H. Peter Anvin" <hpa@zytor.com>,
Thomas Gleixner <tglx@linutronix.de>,
Adrian Bunk <bunk@kernel.org>, Yinghai Lu <yhlu.kernel@gmail.com>,
Ingo Molnar <mingo@elte.hu>,
Linux Kernel <linux-kernel@vger.kernel.org>,
akpm@linux-foundation.org, Pavel Machek <pavel@suse.cz>
Subject: [PATCH] x86: introduce a new Linux defined feature flag for PAT support
Date: Thu, 08 May 2008 03:57:00 +0200 [thread overview]
Message-ID: <48225DEC.2030502@keyaccess.nl> (raw)
In-Reply-To: <48224930.9030901@keyaccess.nl>
On 08-05-08 02:28, Rene Herman wrote:
> I completely and fully agree with your new flag suggestion. Was just
> in a git bisect and am actually on the lowly thing in question so I'm
> not fast but was looking already. X86_FEATURE_PAT_GOOD. Is it safe to
> reuse bit 14 now?
Okay, so how's this? Seem to work well for me and makes me happy. Only
tested on UP.
(hope the inline thing works)
arch/x86/kernel/cpu/common.c | 12 ++++--------
arch/x86/kernel/cpu/feature_names.c | 2 +-
arch/x86/kernel/setup_64.c | 7 ++-----
arch/x86/mm/pat.c | 2 +-
include/asm-x86/cpufeature.h | 3 ++-
5 files changed, 10 insertions(+), 16 deletions(-)
x86: introduce a new Linux defined feature flag for PAT support
Use a new Linux defined X86_FEATURE_PAT_GOOD feature flag to
indicate we're on a CPU we want to support PAT on, so as to
keep the CPU defined X86_FEATURE_PAT readily available for
indicating if the CPU even has the PAT feature.
Signed-off-by: Rene Herman <rene.herman@gmail.com>
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
index 35b4f6a..7bec5e0 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -308,16 +308,14 @@ static void __cpuinit early_get_cap(struct cpuinfo_x86 *c)
}
- clear_cpu_cap(c, X86_FEATURE_PAT);
-
switch (c->x86_vendor) {
case X86_VENDOR_AMD:
if (c->x86 >= 0xf && c->x86 <= 0x11)
- set_cpu_cap(c, X86_FEATURE_PAT);
+ set_cpu_cap(c, X86_FEATURE_PAT_GOOD);
break;
case X86_VENDOR_INTEL:
if (c->x86 == 0xF || (c->x86 == 6 && c->x86_model >= 15))
- set_cpu_cap(c, X86_FEATURE_PAT);
+ set_cpu_cap(c, X86_FEATURE_PAT_GOOD);
break;
}
@@ -409,16 +407,14 @@ static void __cpuinit generic_identify(struct cpuinfo_x86 *c)
init_scattered_cpuid_features(c);
}
- clear_cpu_cap(c, X86_FEATURE_PAT);
-
switch (c->x86_vendor) {
case X86_VENDOR_AMD:
if (c->x86 >= 0xf && c->x86 <= 0x11)
- set_cpu_cap(c, X86_FEATURE_PAT);
+ set_cpu_cap(c, X86_FEATURE_PAT_GOOD);
break;
case X86_VENDOR_INTEL:
if (c->x86 == 0xF || (c->x86 == 6 && c->x86_model >= 15))
- set_cpu_cap(c, X86_FEATURE_PAT);
+ set_cpu_cap(c, X86_FEATURE_PAT_GOOD);
break;
}
}
diff --git a/arch/x86/kernel/cpu/feature_names.c b/arch/x86/kernel/cpu/feature_names.c
index e43ad4a..04f996d 100644
--- a/arch/x86/kernel/cpu/feature_names.c
+++ b/arch/x86/kernel/cpu/feature_names.c
@@ -38,7 +38,7 @@ const char * const x86_cap_flags[NCAPINTS*32] = {
"cxmmx", "k6_mtrr", "cyrix_arr", "centaur_mcr",
NULL, NULL, NULL, NULL,
"constant_tsc", "up", NULL, "arch_perfmon",
- "pebs", "bts", NULL, NULL,
+ "pebs", "bts", "pat_good", NULL,
"rep_good", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
diff --git a/arch/x86/kernel/setup_64.c b/arch/x86/kernel/setup_64.c
index 22c14e2..460134e 100644
--- a/arch/x86/kernel/setup_64.c
+++ b/arch/x86/kernel/setup_64.c
@@ -1063,19 +1063,16 @@ static void __cpuinit early_identify_cpu(struct cpuinfo_x86 *c)
if (c->extended_cpuid_level >= 0x80000007)
c->x86_power = cpuid_edx(0x80000007);
-
- clear_cpu_cap(c, X86_FEATURE_PAT);
-
switch (c->x86_vendor) {
case X86_VENDOR_AMD:
early_init_amd(c);
if (c->x86 >= 0xf && c->x86 <= 0x11)
- set_cpu_cap(c, X86_FEATURE_PAT);
+ set_cpu_cap(c, X86_FEATURE_PAT_GOOD);
break;
case X86_VENDOR_INTEL:
early_init_intel(c);
if (c->x86 == 0xF || (c->x86 == 6 && c->x86_model >= 15))
- set_cpu_cap(c, X86_FEATURE_PAT);
+ set_cpu_cap(c, X86_FEATURE_PAT_GOOD);
break;
case X86_VENDOR_CENTAUR:
early_init_centaur(c);
diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c
index 277446c..6ee3efb 100644
--- a/arch/x86/mm/pat.c
+++ b/arch/x86/mm/pat.c
@@ -43,7 +43,7 @@ static int pat_known_cpu(void)
if (!pat_wc_enabled)
return 0;
- if (cpu_has_pat)
+ if (cpu_has_pat && cpu_has_pat_good)
return 1;
pat_wc_enabled = 0;
diff --git a/include/asm-x86/cpufeature.h b/include/asm-x86/cpufeature.h
index 0d609c8..63c14e4 100644
--- a/include/asm-x86/cpufeature.h
+++ b/include/asm-x86/cpufeature.h
@@ -74,7 +74,7 @@
#define X86_FEATURE_ARCH_PERFMON (3*32+11) /* Intel Architectural PerfMon */
#define X86_FEATURE_PEBS (3*32+12) /* Precise-Event Based Sampling */
#define X86_FEATURE_BTS (3*32+13) /* Branch Trace Store */
-/* 14 free */
+#define X86_FEATURE_PAT_GOOD (3*32+14) /* PAT works correctly */
/* 15 free */
#define X86_FEATURE_REP_GOOD (3*32+16) /* rep microcode works well on this CPU */
#define X86_FEATURE_MFENCE_RDTSC (3*32+17) /* Mfence synchronizes RDTSC */
@@ -187,6 +187,7 @@ extern const char * const x86_power_flags[32];
#define cpu_has_gbpages boot_cpu_has(X86_FEATURE_GBPAGES)
#define cpu_has_arch_perfmon boot_cpu_has(X86_FEATURE_ARCH_PERFMON)
#define cpu_has_pat boot_cpu_has(X86_FEATURE_PAT)
+#define cpu_has_pat_good boot_cpu_has(X86_FEATURE_PAT_GOOD)
#if defined(CONFIG_X86_INVLPG) || defined(CONFIG_X86_64)
# define cpu_has_invlpg 1
next prev parent reply other threads:[~2008-05-08 1:56 UTC|newest]
Thread overview: 79+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-07 1:48 2.6.26, PAT and AMD family 6 Rene Herman
2008-05-07 2:39 ` Yinghai Lu
2008-05-07 12:46 ` Undocumented and duplicated code Adrian Bunk
2008-05-07 13:14 ` Rene Herman
2008-05-07 20:52 ` 2.6.26, PAT and AMD family 6 Thomas Gleixner
2008-05-07 20:59 ` Pavel Machek
2008-05-07 21:10 ` Rene Herman
2008-05-07 21:41 ` Thomas Gleixner
2008-05-07 21:46 ` Adrian Bunk
2008-05-07 22:08 ` Thomas Gleixner
2008-05-07 22:29 ` Pavel Machek
2008-05-07 22:04 ` Rene Herman
2008-05-07 22:23 ` Rene Herman
2008-05-07 22:31 ` Yinghai Lu
2008-05-07 22:57 ` H. Peter Anvin
2008-05-08 0:02 ` Rene Herman
2008-05-08 0:03 ` H. Peter Anvin
2008-05-08 0:10 ` Rene Herman
2008-05-08 0:19 ` Linus Torvalds
2008-05-08 0:28 ` Rene Herman
2008-05-08 1:57 ` Rene Herman [this message]
2008-05-08 1:58 ` [PATCH] x86: introduce a new Linux defined feature flag for PAT support Linus Torvalds
2008-05-08 2:11 ` H. Peter Anvin
2008-05-08 2:17 ` Rene Herman
2008-05-08 2:24 ` Linus Torvalds
2008-05-08 2:28 ` H. Peter Anvin
2008-05-08 12:49 ` Thomas Gleixner
2008-05-08 13:08 ` Ingo Molnar
2008-05-08 16:44 ` H. Peter Anvin
2008-05-08 13:11 ` Adrian Bunk
2008-05-08 13:33 ` Thomas Gleixner
2008-05-08 14:44 ` Rene Herman
2008-05-08 14:53 ` Thomas Gleixner
2008-05-08 16:48 ` H. Peter Anvin
2008-05-08 16:53 ` Rene Herman
2008-05-08 2:04 ` [PATCH] x86: enable PAT support on AMD Duron model 7 Rene Herman
2008-05-08 2:08 ` Arjan van de Ven
2008-05-08 2:12 ` Rene Herman
2008-05-08 10:19 ` [PATCH] x86: introduce a new Linux defined feature flag for PAT support Andi Kleen
2008-05-08 12:40 ` Rene Herman
2008-05-08 13:39 ` Andi Kleen
2008-05-08 15:32 ` Alan Cox
2008-05-08 16:51 ` H. Peter Anvin
2008-05-08 0:21 ` 2.6.26, PAT and AMD family 6 Thomas Gleixner
2008-05-08 0:30 ` Rene Herman
2008-05-08 0:15 ` Linus Torvalds
2008-05-08 0:31 ` H. Peter Anvin
2008-05-08 10:14 ` Andi Kleen
2008-05-08 16:43 ` H. Peter Anvin
2008-05-07 21:23 ` Adrian Bunk
2008-05-07 21:54 ` Thomas Gleixner
2008-05-07 22:09 ` Adrian Bunk
2008-05-07 22:14 ` Pavel Machek
2008-05-07 22:22 ` Yinghai Lu
2008-05-07 22:37 ` Pavel Machek
2008-05-07 22:40 ` Yinghai Lu
2008-05-07 23:02 ` Pavel Machek
2008-05-07 23:02 ` Thomas Gleixner
2008-05-07 23:10 ` Pavel Machek
2008-05-07 23:46 ` Thomas Gleixner
2008-05-07 22:23 ` Yinghai Lu
2008-05-07 22:39 ` Pavel Machek
2008-05-07 22:45 ` Yinghai Lu
2008-05-07 23:06 ` Pavel Machek
2008-05-07 23:01 ` H. Peter Anvin
2008-05-07 22:26 ` Yinghai Lu
2008-05-07 22:30 ` Rene Herman
2008-05-07 22:58 ` Thomas Gleixner
2008-05-07 13:00 ` Rene Herman
2008-05-07 13:42 ` Arjan van de Ven
2008-05-07 14:09 ` Rene Herman
2008-05-07 14:24 ` Arjan van de Ven
2008-05-07 19:08 ` Rene Herman
2008-05-07 22:17 ` Arjan van de Ven
2008-05-07 19:39 ` Daniel Hazelton
2008-05-07 20:06 ` Rene Herman
2008-05-07 20:16 ` Yinghai Lu
2008-05-07 20:18 ` Yinghai Lu
2008-05-08 4:06 ` H. Peter Anvin
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=48225DEC.2030502@keyaccess.nl \
--to=rene.herman@keyaccess.nl \
--cc=akpm@linux-foundation.org \
--cc=bunk@kernel.org \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=pavel@suse.cz \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=yhlu.kernel@gmail.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.