Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1652194 > unrolled thread
| Started by | Bernhard Held <berny156@gmx.de> |
|---|---|
| First post | 2017-05-28 20:40 +0200 |
| Last post | 2017-06-07 01:30 +0200 |
| Articles | 11 — 5 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
Re: [tip:x86/urgent] x86/PAT: Fix Xorg regression on CPUs that don't support PAT Bernhard Held <berny156@gmx.de> - 2017-05-28 20:40 +0200
Re: [tip:x86/urgent] x86/PAT: Fix Xorg regression on CPUs that don't support PAT Andy Lutomirski <luto@kernel.org> - 2017-05-28 20:50 +0200
Re: [tip:x86/urgent] x86/PAT: Fix Xorg regression on CPUs that don't support PAT Mikulas Patocka <mpatocka@redhat.com> - 2017-05-30 01:00 +0200
Re: [tip:x86/urgent] x86/PAT: Fix Xorg regression on CPUs that don't support PAT Dominik Brodowski <linux@dominikbrodowski.net> - 2017-05-30 19:30 +0200
Re: [tip:x86/urgent] x86/PAT: Fix Xorg regression on CPUs that don't support PAT Mikulas Patocka <mpatocka@redhat.com> - 2017-05-30 20:00 +0200
Re: [tip:x86/urgent] x86/PAT: Fix Xorg regression on CPUs that don't support PAT Dominik Brodowski <linux@dominikbrodowski.net> - 2017-05-30 20:50 +0200
Re: [tip:x86/urgent] x86/PAT: Fix Xorg regression on CPUs that don't support PAT Bernhard Held <berny156@gmx.de> - 2017-05-30 21:40 +0200
Re: [tip:x86/urgent] x86/PAT: Fix Xorg regression on CPUs that don't support PAT Junichi Nomura <j-nomura@ce.jp.nec.com> - 2017-05-31 11:50 +0200
[PATCH v2] X86: don't report PAT on CPUs that don't support it Mikulas Patocka <mpatocka@redhat.com> - 2017-06-07 00:50 +0200
Re: [PATCH v2] X86: don't report PAT on CPUs that don't support it Andy Lutomirski <luto@kernel.org> - 2017-06-07 01:00 +0200
Re: [PATCH v2] X86: don't report PAT on CPUs that don't support it Mikulas Patocka <mpatocka@redhat.com> - 2017-06-07 01:30 +0200
| From | Bernhard Held <berny156@gmx.de> |
|---|---|
| Date | 2017-05-28 20:40 +0200 |
| Subject | Re: [tip:x86/urgent] x86/PAT: Fix Xorg regression on CPUs that don't support PAT |
| Message-ID | <tMbgC-5BS-17@gated-at.bofh.it> |
Hi,
this patch breaks the boot of my kernel. The last message is "Booting
the kernel.".
My setup might be unusual: I'm running a Xenon E5450 (LGA 771) in a
Gigbayte G33-DS3R board (LGA 775). The BIOS is patched with the
microcode of the E5450 and recognizes the CPU.
Please find below the dmesg of a the latest kernel w/o the PAT-patch.
I'm happy to provide more information or to test patches.
Have fun,
Bernhard
[ 0.000000] Linux version 4.12.0-rc2-linus+ (berny@quad) (gcc version 6.3.1 20170202 [gcc-6-branch revision 245119] (SUSE Linux) ) #152 SMP PREEMPT Sun May 28 19:26:20 CEST 2017
[ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-4.12.0-rc2-linus+ root=/dev/mapper/VGMX300-root resume=/dev/sda2 showopts radeon.dpm=1 memmap=1$0xe4fd net.ifnames=0
[ 0.000000] KERNEL supported cpus:
[ 0.000000] Intel GenuineIntel
[ 0.000000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'
[ 0.000000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
[ 0.000000] x86/fpu: Enabled xstate features 0x3, context size is 576 bytes, using 'standard' format.
[ 0.000000] e820: BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009dbff] usable
[ 0.000000] BIOS-e820: [mem 0x000000000009f800-0x000000000009ffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000cfedffff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000cfee0000-0x00000000cfee2fff] ACPI NVS
[ 0.000000] BIOS-e820: [mem 0x00000000cfee3000-0x00000000cfeeffff] ACPI data
[ 0.000000] BIOS-e820: [mem 0x00000000cfef0000-0x00000000cfefffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000d0000000-0x00000000dfffffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000ffffffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000100000000-0x00000001afffffff] usable
[ 0.000000] NX (Execute Disable) protection: active
[ 0.000000] e820: user-defined physical RAM map:
[ 0.000000] user: [mem 0x0000000000000000-0x000000000000e4fc] usable
[ 0.000000] user: [mem 0x000000000000e4fd-0x000000000000e4fd] reserved
[ 0.000000] user: [mem 0x000000000000e4fe-0x000000000009dbff] usable
[ 0.000000] user: [mem 0x000000000009f800-0x000000000009ffff] reserved
[ 0.000000] user: [mem 0x00000000000f0000-0x00000000000fffff] reserved
[ 0.000000] user: [mem 0x0000000000100000-0x00000000cfedffff] usable
[ 0.000000] user: [mem 0x00000000cfee0000-0x00000000cfee2fff] ACPI NVS
[ 0.000000] user: [mem 0x00000000cfee3000-0x00000000cfeeffff] ACPI data
[ 0.000000] user: [mem 0x00000000cfef0000-0x00000000cfefffff] reserved
[ 0.000000] user: [mem 0x00000000d0000000-0x00000000dfffffff] reserved
[ 0.000000] user: [mem 0x00000000fec00000-0x00000000ffffffff] reserved
[ 0.000000] user: [mem 0x0000000100000000-0x00000001afffffff] usable
[ 0.000000] SMBIOS 2.4 present.
[ 0.000000] DMI: Gigabyte Technology Co., Ltd. G33-DS3R/G33-DS3R, BIOS F7L 07/31/2009
[ 0.000000] tsc: Fast TSC calibration using PIT
[ 0.000000] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
[ 0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable
[ 0.000000] e820: last_pfn = 0x1b0000 max_arch_pfn = 0x400000000
[ 0.000000] MTRR default type: uncachable
[ 0.000000] MTRR fixed ranges enabled:
[ 0.000000] 00000-9FFFF write-back
[ 0.000000] A0000-BFFFF uncachable
[ 0.000000] C0000-CDFFF write-protect
[ 0.000000] CE000-EFFFF uncachable
[ 0.000000] F0000-FFFFF write-through
[ 0.000000] MTRR variable ranges enabled:
[ 0.000000] 0 base 0000000000 mask 0F00000000 write-back
[ 0.000000] 1 base 00E0000000 mask 0FE0000000 uncachable
[ 0.000000] 2 base 00D0000000 mask 0FF0000000 uncachable
[ 0.000000] 3 base 0100000000 mask 0F00000000 write-back
[ 0.000000] 4 base 01C0000000 mask 0FC0000000 uncachable
[ 0.000000] 5 base 01B0000000 mask 0FF0000000 uncachable
[ 0.000000] 6 base 00CFF00000 mask 0FFFF00000 uncachable
[ 0.000000] 7 disabled
[ 0.000000] x86/PAT: Configuration [0-7]: WB WC UC- UC WB WC UC- WT
[ 0.000000] mtrr: your BIOS has configured an incorrect mask, fixing it.
[ 0.000000] mtrr: your BIOS has configured an incorrect mask, fixing it.
[ 0.000000] mtrr: your BIOS has configured an incorrect mask, fixing it.
[ 0.000000] mtrr: your BIOS has configured an incorrect mask, fixing it.
[ 0.000000] mtrr: your BIOS has configured an incorrect mask, fixing it.
[ 0.000000] mtrr: your BIOS has configured an incorrect mask, fixing it.
[ 0.000000] mtrr: your BIOS has configured an incorrect mask, fixing it.
[ 0.000000] total RAM covered: 6143M
[ 0.000000] Found optimal setting for mtrr clean up
[ 0.000000] gran_size: 64K chunk_size: 2M num_reg: 7 lose cover RAM: 0G
[ 0.000000] e820: update [mem 0xcff00000-0xffffffff] usable ==> reserved
[ 0.000000] e820: last_pfn = 0xcfee0 max_arch_pfn = 0x400000000
[ 0.000000] Base memory trampoline at [ffff880000097000] 97000 size 24576
[ 0.000000] BRK [0x01e34000, 0x01e34fff] PGTABLE
[ 0.000000] BRK [0x01e35000, 0x01e35fff] PGTABLE
[ 0.000000] BRK [0x01e36000, 0x01e36fff] PGTABLE
[ 0.000000] BRK [0x01e37000, 0x01e37fff] PGTABLE
[ 0.000000] BRK [0x01e38000, 0x01e38fff] PGTABLE
[ 0.000000] BRK [0x01e39000, 0x01e39fff] PGTABLE
[ 0.000000] RAMDISK: [mem 0x36c5f000-0x37626fff]
On 05/24/2017 at 12:21 PM, tip-bot for Mikulas Patocka wrote:
> Commit-ID: cbed27cdf0e3f7ea3b2259e86b9e34df02be3fe4
> Gitweb: http://git.kernel.org/tip/cbed27cdf0e3f7ea3b2259e86b9e34df02be3fe4
> Author: Mikulas Patocka <mpatocka@redhat.com>
> AuthorDate: Tue, 18 Apr 2017 15:07:11 -0400
> Committer: Ingo Molnar <mingo@kernel.org>
> CommitDate: Wed, 24 May 2017 10:17:23 +0200
>
> x86/PAT: Fix Xorg regression on CPUs that don't support PAT
>
> In the file arch/x86/mm/pat.c, there's a '__pat_enabled' variable. The
> variable is set to 1 by default and the function pat_init() sets
> __pat_enabled to 0 if the CPU doesn't support PAT.
>
> However, on AMD K6-3 CPUs, the processor initialization code never calls
> pat_init() and so __pat_enabled stays 1 and the function pat_enabled()
> returns true, even though the K6-3 CPU doesn't support PAT.
>
> The result of this bug is that a kernel warning is produced when attempting to
> start the Xserver and the Xserver doesn't start (fork() returns ENOMEM).
> Another symptom of this bug is that the framebuffer driver doesn't set the
> K6-3 MTRR registers:
>
> x86/PAT: Xorg:3891 map pfn expected mapping type uncached-minus for [mem 0xe4000000-0xe5ffffff], got write-combining
> ------------[ cut here ]------------
> WARNING: CPU: 0 PID: 3891 at arch/x86/mm/pat.c:1020 untrack_pfn+0x5c/0x9f
> ...
> x86/PAT: Xorg:3891 map pfn expected mapping type uncached-minus for [mem 0xe4000000-0xe5ffffff], got write-combining
>
> To fix the bug change pat_enabled() so that it returns true only if PAT
> initialization was actually done.
>
> Also, I changed boot_cpu_has(X86_FEATURE_PAT) to
> this_cpu_has(X86_FEATURE_PAT) in pat_ap_init(), so that we check the PAT
> feature on the processor that is being initialized.
>
> Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Andy Lutomirski <luto@kernel.org>
> Cc: Borislav Petkov <bp@alien8.de>
> Cc: Brian Gerst <brgerst@gmail.com>
> Cc: Denys Vlasenko <dvlasenk@redhat.com>
> Cc: H. Peter Anvin <hpa@zytor.com>
> Cc: Josh Poimboeuf <jpoimboe@redhat.com>
> Cc: Linus Torvalds <torvalds@linux-foundation.org>
> Cc: Luis R. Rodriguez <mcgrof@suse.com>
> Cc: Peter Zijlstra <peterz@infradead.org>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Toshi Kani <toshi.kani@hp.com>
> Cc: stable@vger.kernel.org # v4.2+
> Link: http://lkml.kernel.org/r/alpine.LRH.2.02.1704181501450.26399@file01.intranet.prod.int.rdu2.redhat.com
> Signed-off-by: Ingo Molnar <mingo@kernel.org>
> ---
> arch/x86/mm/pat.c | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c
> index 9b78685..83a59a6 100644
> --- a/arch/x86/mm/pat.c
> +++ b/arch/x86/mm/pat.c
> @@ -65,9 +65,11 @@ static int __init nopat(char *str)
> }
> early_param("nopat", nopat);
>
> +static bool __read_mostly __pat_initialized = false;
> +
> bool pat_enabled(void)
> {
> - return !!__pat_enabled;
> + return __pat_initialized;
> }
> EXPORT_SYMBOL_GPL(pat_enabled);
>
> @@ -225,13 +227,14 @@ static void pat_bsp_init(u64 pat)
> }
>
> wrmsrl(MSR_IA32_CR_PAT, pat);
> + __pat_initialized = true;
>
> __init_cache_modes(pat);
> }
>
> static void pat_ap_init(u64 pat)
> {
> - if (!boot_cpu_has(X86_FEATURE_PAT)) {
> + if (!this_cpu_has(X86_FEATURE_PAT)) {
> /*
> * If this happens we are on a secondary CPU, but switched to
> * PAT on the boot CPU. We have no way to undo PAT.
> @@ -306,7 +309,7 @@ void pat_init(void)
> u64 pat;
> struct cpuinfo_x86 *c = &boot_cpu_data;
>
> - if (!pat_enabled()) {
> + if (!__pat_enabled) {
> init_cache_modes();
> return;
> }
>
[toc] | [next] | [standalone]
| From | Andy Lutomirski <luto@kernel.org> |
|---|---|
| Date | 2017-05-28 20:50 +0200 |
| Message-ID | <tMbqh-5Fh-3@gated-at.bofh.it> |
| In reply to | #1652194 |
On Sun, May 28, 2017 at 11:18 AM, Bernhard Held <berny156@gmx.de> wrote: > Hi, > > this patch breaks the boot of my kernel. The last message is "Booting > the kernel.". > > My setup might be unusual: I'm running a Xenon E5450 (LGA 771) in a > Gigbayte G33-DS3R board (LGA 775). The BIOS is patched with the > microcode of the E5450 and recognizes the CPU. > > Please find below the dmesg of a the latest kernel w/o the PAT-patch. > I'm happy to provide more information or to test patches. I think this patch is bogus. pat_enabled() sure looks like it's supposed to return true if PAT is *enabled*, and these days PAT is "enabled" even if there's no HW PAT support. Even if the patch were somehow correct, it should have been split up into two patches, one to change pat_enabled() and one to use this_cpu_has(). Ingo, I'd suggest reverting the patch, cc-ing stable on the revert so -stable knows not to backport it, and starting over with the fix. From very brief inspection, the right fix is to make sure that pat_init(), or at least init_cache_modes(), gets called on the affected CPUs. As a future cleanup, I think that pat_enabled() could be deleted outright and, if needed, replaced by functions like have_memtype_wc() or similar. (Do we already have helpers like that?) Toshi, am I right? --Andy
[toc] | [prev] | [next] | [standalone]
| From | Mikulas Patocka <mpatocka@redhat.com> |
|---|---|
| Date | 2017-05-30 01:00 +0200 |
| Message-ID | <tMBNL-6Il-5@gated-at.bofh.it> |
| In reply to | #1652195 |
On Sun, 28 May 2017, Andy Lutomirski wrote:
> On Sun, May 28, 2017 at 11:18 AM, Bernhard Held <berny156@gmx.de> wrote:
> > Hi,
> >
> > this patch breaks the boot of my kernel. The last message is "Booting
> > the kernel.".
> >
> > My setup might be unusual: I'm running a Xenon E5450 (LGA 771) in a
> > Gigbayte G33-DS3R board (LGA 775). The BIOS is patched with the
> > microcode of the E5450 and recognizes the CPU.
> >
> > Please find below the dmesg of a the latest kernel w/o the PAT-patch.
> > I'm happy to provide more information or to test patches.
Hi
Please do the following three tests and test if the kernel boots.
1. use the PAT patch and revert the change to the function pat_enabled()
- i.e. change it to the original:
bool pat_enabled(void)
{
return !!__pat_enabled;
}
2. use the PAT patch and revert the change to the function pat_ap_init
- i.e. change it to the original:
static void pat_ap_init(u64 pat)
{
if (!boot_cpu_has(X86_FEATURE_PAT)) {
3. use the full PAT patch and apply the below patch on the top of it.
> I think this patch is bogus. pat_enabled() sure looks like it's
> supposed to return true if PAT is *enabled*, and these days PAT is
> "enabled" even if there's no HW PAT support. Even if the patch were
> somehow correct, it should have been split up into two patches, one to
> change pat_enabled() and one to use this_cpu_has().
>
> Ingo, I'd suggest reverting the patch, cc-ing stable on the revert so
> -stable knows not to backport it, and starting over with the fix.
> >From very brief inspection, the right fix is to make sure that
> pat_init(), or at least init_cache_modes(), gets called on the
pat_init() needs to be called with cache disabled - and the cache disable
code (functions prepare_set() and post_set()) exists in
arch/x86/kernel/cpu/mtrr/generic.c - it may not be compiled if CONFIG_MTRR
is not set.
Though, it is possible to call init_cache_modes() - see the patch below.
init_cache_modes() does nothing if it is called multiple times.
> affected CPUs.
>
> As a future cleanup, I think that pat_enabled() could be deleted
> outright and, if needed, replaced by functions like have_memtype_wc()
> or similar. (Do we already have helpers like that?) Toshi, am I
> right?
>
> --Andy
---
arch/x86/include/asm/pat.h | 1 +
arch/x86/kernel/setup.c | 1 +
arch/x86/mm/pat.c | 3 +--
3 files changed, 3 insertions(+), 2 deletions(-)
Index: linux-stable/arch/x86/include/asm/pat.h
===================================================================
--- linux-stable.orig/arch/x86/include/asm/pat.h
+++ linux-stable/arch/x86/include/asm/pat.h
@@ -8,6 +8,7 @@
void pat_disable(const char *reason);
extern void pat_init(void);
+extern void init_cache_modes(void);
extern int reserve_memtype(u64 start, u64 end,
enum page_cache_mode req_pcm, enum page_cache_mode *ret_pcm);
Index: linux-stable/arch/x86/kernel/setup.c
===================================================================
--- linux-stable.orig/arch/x86/kernel/setup.c
+++ linux-stable/arch/x86/kernel/setup.c
@@ -1074,6 +1074,7 @@ void __init setup_arch(char **cmdline_p)
/* update e820 for memory not covered by WB MTRRs */
mtrr_bp_init();
+ init_cache_modes();
if (mtrr_trim_uncached_memory(max_pfn))
max_pfn = e820_end_of_ram_pfn();
Index: linux-stable/arch/x86/mm/pat.c
===================================================================
--- linux-stable.orig/arch/x86/mm/pat.c
+++ linux-stable/arch/x86/mm/pat.c
@@ -39,7 +39,6 @@
static bool boot_cpu_done;
static int __read_mostly __pat_enabled = IS_ENABLED(CONFIG_X86_PAT);
-static void init_cache_modes(void);
void pat_disable(const char *reason)
{
@@ -237,7 +236,7 @@ static void pat_ap_init(u64 pat)
wrmsrl(MSR_IA32_CR_PAT, pat);
}
-static void init_cache_modes(void)
+void init_cache_modes(void)
{
u64 pat = 0;
static int init_cm_done;
[toc] | [prev] | [next] | [standalone]
| From | Dominik Brodowski <linux@dominikbrodowski.net> |
|---|---|
| Date | 2017-05-30 19:30 +0200 |
| Message-ID | <tMT7X-1Nk-1@gated-at.bofh.it> |
| In reply to | #1652736 |
[Multipart message — attachments visible in raw view] — view raw
Same boot problem here (Intel(R) Core(TM) i5-5200U CPU on a Dell XPS 13),
git-bisected to the same patch...
On Mon, May 29, 2017 at 06:50:57PM -0400, Mikulas Patocka wrote:
> Please do the following three tests and test if the kernel boots.
>
> 1. use the PAT patch and revert the change to the function pat_enabled()
> - i.e. change it to the original:
> bool pat_enabled(void)
> {
> return !!__pat_enabled;
> }
No joy.
> 2. use the PAT patch and revert the change to the function pat_ap_init
> - i.e. change it to the original:
> static void pat_ap_init(u64 pat)
> {
> if (!boot_cpu_has(X86_FEATURE_PAT)) {
Joy.
> 3. use the full PAT patch and apply the below patch on the top of it.
No joy.
Best,
Dominik
[toc] | [prev] | [next] | [standalone]
| From | Mikulas Patocka <mpatocka@redhat.com> |
|---|---|
| Date | 2017-05-30 20:00 +0200 |
| Message-ID | <tMTB0-1Xw-19@gated-at.bofh.it> |
| In reply to | #1653419 |
On Tue, 30 May 2017, Dominik Brodowski wrote:
> Same boot problem here (Intel(R) Core(TM) i5-5200U CPU on a Dell XPS 13),
> git-bisected to the same patch...
>
> On Mon, May 29, 2017 at 06:50:57PM -0400, Mikulas Patocka wrote:
> > Please do the following three tests and test if the kernel boots.
> >
> > 1. use the PAT patch and revert the change to the function pat_enabled()
> > - i.e. change it to the original:
> > bool pat_enabled(void)
> > {
> > return !!__pat_enabled;
> > }
>
> No joy.
>
> > 2. use the PAT patch and revert the change to the function pat_ap_init
> > - i.e. change it to the original:
> > static void pat_ap_init(u64 pat)
> > {
> > if (!boot_cpu_has(X86_FEATURE_PAT)) {
>
> Joy.
It is interesting - does it mean that the boot cpu does have PAT and the
secondary CPUs don't? Please send /proc/cpuinfo with all the cores active.
This part of the patch is not required anyway, so I will resubmit the
patch with this part disabled (and with an added call to
init_cache_modes() as Andy suggested).
Mikulas
> > 3. use the full PAT patch and apply the below patch on the top of it.
>
> No joy.
>
>
> Best,
> Dominik
>
[toc] | [prev] | [next] | [standalone]
| From | Dominik Brodowski <linux@dominikbrodowski.net> |
|---|---|
| Date | 2017-05-30 20:50 +0200 |
| Message-ID | <tMUno-2tM-5@gated-at.bofh.it> |
| In reply to | #1653443 |
[Multipart message — attachments visible in raw view] — view raw
On Tue, May 30, 2017 at 01:59:41PM -0400, Mikulas Patocka wrote:
> On Tue, 30 May 2017, Dominik Brodowski wrote:
>
> > Same boot problem here (Intel(R) Core(TM) i5-5200U CPU on a Dell XPS 13),
> > git-bisected to the same patch...
> >
> > On Mon, May 29, 2017 at 06:50:57PM -0400, Mikulas Patocka wrote:
> > > Please do the following three tests and test if the kernel boots.
> > >
> > > 1. use the PAT patch and revert the change to the function pat_enabled()
> > > - i.e. change it to the original:
> > > bool pat_enabled(void)
> > > {
> > > return !!__pat_enabled;
> > > }
> >
> > No joy.
> >
> > > 2. use the PAT patch and revert the change to the function pat_ap_init
> > > - i.e. change it to the original:
> > > static void pat_ap_init(u64 pat)
> > > {
> > > if (!boot_cpu_has(X86_FEATURE_PAT)) {
> >
> > Joy.
>
> It is interesting - does it mean that the boot cpu does have PAT and the
> secondary CPUs don't? Please send /proc/cpuinfo with all the cores active.
This physical CPU has PAT on all cores / siblings:
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 61
model name : Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz
stepping : 4
microcode : 0x24
cpu MHz : 800.158
cache size : 3072 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 20
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap xsaveopt dtherm ida arat pln pts
bugs :
bogomips : 4389.80
clflush size : 64
cache_alignment : 64
address sizes : 39 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 61
model name : Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz
stepping : 4
microcode : 0x24
cpu MHz : 800.158
cache size : 3072 KB
physical id : 0
siblings : 4
core id : 1
cpu cores : 2
apicid : 2
initial apicid : 2
fpu : yes
fpu_exception : yes
cpuid level : 20
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap xsaveopt dtherm ida arat pln pts
bugs :
bogomips : 4436.14
clflush size : 64
cache_alignment : 64
address sizes : 39 bits physical, 48 bits virtual
power management:
processor : 2
vendor_id : GenuineIntel
cpu family : 6
model : 61
model name : Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz
stepping : 4
microcode : 0x24
cpu MHz : 800.024
cache size : 3072 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 2
apicid : 1
initial apicid : 1
fpu : yes
fpu_exception : yes
cpuid level : 20
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap xsaveopt dtherm ida arat pln pts
bugs :
bogomips : 4397.30
clflush size : 64
cache_alignment : 64
address sizes : 39 bits physical, 48 bits virtual
power management:
processor : 3
vendor_id : GenuineIntel
cpu family : 6
model : 61
model name : Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz
stepping : 4
microcode : 0x24
cpu MHz : 799.890
cache size : 3072 KB
physical id : 0
siblings : 4
core id : 1
cpu cores : 2
apicid : 3
initial apicid : 3
fpu : yes
fpu_exception : yes
cpuid level : 20
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap xsaveopt dtherm ida arat pln pts
bugs :
bogomips : 4396.84
clflush size : 64
cache_alignment : 64
address sizes : 39 bits physical, 48 bits virtual
power management:
Best,
Dominik
[toc] | [prev] | [next] | [standalone]
| From | Bernhard Held <berny156@gmx.de> |
|---|---|
| Date | 2017-05-30 21:40 +0200 |
| Message-ID | <tMV9M-30M-11@gated-at.bofh.it> |
| In reply to | #1653443 |
On 05/30/2017 at 07:59 PM, Mikulas Patocka wrote:
>
>
> On Tue, 30 May 2017, Dominik Brodowski wrote:
>
>> Same boot problem here (Intel(R) Core(TM) i5-5200U CPU on a Dell XPS 13),
>> git-bisected to the same patch...
>>
>> On Mon, May 29, 2017 at 06:50:57PM -0400, Mikulas Patocka wrote:
>>> Please do the following three tests and test if the kernel boots.
>>>
>>> 1. use the PAT patch and revert the change to the function pat_enabled()
>>> - i.e. change it to the original:
>>> bool pat_enabled(void)
>>> {
>>> return !!__pat_enabled;
>>> }
>>
>> No joy.
>>
>>> 2. use the PAT patch and revert the change to the function pat_ap_init
>>> - i.e. change it to the original:
>>> static void pat_ap_init(u64 pat)
>>> {
>>> if (!boot_cpu_has(X86_FEATURE_PAT)) {
>>
>> Joy.
>
> It is interesting - does it mean that the boot cpu does have PAT and the
> secondary CPUs don't? Please send /proc/cpuinfo with all the cores active.
>
> This part of the patch is not required anyway, so I will resubmit the
> patch with this part disabled (and with an added call to
> init_cache_modes() as Andy suggested).
>
> Mikulas
>
>>> 3. use the full PAT patch and apply the below patch on the top of it.
>>
>> No joy.
Same result here., only #2 boots.
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 23
model name : Intel(R) Xeon(R) CPU E5450 @ 3.00GHz
stepping : 10
microcode : 0xa0b
cpu MHz : 2000.000
cache size : 6144 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 4
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl cpuid aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 xsave lahf_lm tpr_shadow vnmi flexpriority dtherm
bugs :
bogomips : 5999.70
clflush size : 64
cache_alignment : 64
address sizes : 38 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 23
model name : Intel(R) Xeon(R) CPU E5450 @ 3.00GHz
stepping : 10
microcode : 0xa0b
cpu MHz : 2000.000
cache size : 6144 KB
physical id : 0
siblings : 4
core id : 3
cpu cores : 4
apicid : 3
initial apicid : 3
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl cpuid aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 xsave lahf_lm tpr_shadow vnmi flexpriority dtherm
bugs :
bogomips : 5999.98
clflush size : 64
cache_alignment : 64
address sizes : 38 bits physical, 48 bits virtual
power management:
processor : 2
vendor_id : GenuineIntel
cpu family : 6
model : 23
model name : Intel(R) Xeon(R) CPU E5450 @ 3.00GHz
stepping : 10
microcode : 0xa0b
cpu MHz : 2000.000
cache size : 6144 KB
physical id : 0
siblings : 4
core id : 2
cpu cores : 4
apicid : 2
initial apicid : 2
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl cpuid aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 xsave lahf_lm tpr_shadow vnmi flexpriority dtherm
bugs :
bogomips : 5900.00
clflush size : 64
cache_alignment : 64
address sizes : 38 bits physical, 48 bits virtual
power management:
processor : 3
vendor_id : GenuineIntel
cpu family : 6
model : 23
model name : Intel(R) Xeon(R) CPU E5450 @ 3.00GHz
stepping : 10
microcode : 0xa0b
cpu MHz : 2000.000
cache size : 6144 KB
physical id : 0
siblings : 4
core id : 1
cpu cores : 4
apicid : 1
initial apicid : 1
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl cpuid aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 xsave lahf_lm tpr_shadow vnmi flexpriority dtherm
bugs :
bogomips : 5999.98
clflush size : 64
cache_alignment : 64
address sizes : 38 bits physical, 48 bits virtual
power management:
Cheers,
Bernhard
[toc] | [prev] | [next] | [standalone]
| From | Junichi Nomura <j-nomura@ce.jp.nec.com> |
|---|---|
| Date | 2017-05-31 11:50 +0200 |
| Subject | Re: [tip:x86/urgent] x86/PAT: Fix Xorg regression on CPUs that don't support PAT |
| Message-ID | <tN8qn-31c-43@gated-at.bofh.it> |
| In reply to | #1653443 |
On 05/31/17 02:59, Mikulas Patocka wrote:
>>> 2. use the PAT patch and revert the change to the function pat_ap_init
>>> - i.e. change it to the original:
>>> static void pat_ap_init(u64 pat)
>>> {
>>> if (!boot_cpu_has(X86_FEATURE_PAT)) {
>>
>> Joy.
>
> It is interesting - does it mean that the boot cpu does have PAT and the
> secondary CPUs don't?
It seems pat_init() is called twice for boot cpu, from mtrr_bp_pat_init()
and generic_set_all(). The 2nd call ends up calling pat_ap_init() and it's
before boot_cpu_data is copied to cpu_data[0].
--
Jun'ichi Nomura, NEC Corporation / NEC Solution Innovators, Ltd.
[toc] | [prev] | [next] | [standalone]
| From | Mikulas Patocka <mpatocka@redhat.com> |
|---|---|
| Date | 2017-06-07 00:50 +0200 |
| Subject | [PATCH v2] X86: don't report PAT on CPUs that don't support it |
| Message-ID | <tPvsu-6yk-15@gated-at.bofh.it> |
| In reply to | #1652195 |
On Sun, 28 May 2017, Andy Lutomirski wrote:
> On Sun, May 28, 2017 at 11:18 AM, Bernhard Held <berny156@gmx.de> wrote:
> > Hi,
> >
> > this patch breaks the boot of my kernel. The last message is "Booting
> > the kernel.".
> >
> > My setup might be unusual: I'm running a Xenon E5450 (LGA 771) in a
> > Gigbayte G33-DS3R board (LGA 775). The BIOS is patched with the
> > microcode of the E5450 and recognizes the CPU.
> >
> > Please find below the dmesg of a the latest kernel w/o the PAT-patch.
> > I'm happy to provide more information or to test patches.
>
> I think this patch is bogus. pat_enabled() sure looks like it's
> supposed to return true if PAT is *enabled*, and these days PAT is
> "enabled" even if there's no HW PAT support. Even if the patch were
> somehow correct, it should have been split up into two patches, one to
> change pat_enabled() and one to use this_cpu_has().
>
> Ingo, I'd suggest reverting the patch, cc-ing stable on the revert so
> -stable knows not to backport it, and starting over with the fix.
> >From very brief inspection, the right fix is to make sure that
> pat_init(), or at least init_cache_modes(), gets called on the
> affected CPUs.
>
> --Andy
Hi
Here I send the second version of the patch. It drops the change from
boot_cpu_has(X86_FEATURE_PAT) to this_cpu_has(X86_FEATURE_PAT) (that
caused kernel to be unbootable for some people).
Another change is that setup_arch() calls init_cache_modes() if PAT is
disabled, so that init_cache_modes() is always called.
Mikulas
From: Mikulas Patocka <mpatocka@redhat.com>
In the file arch/x86/mm/pat.c, there's a variable __pat_enabled. The
variable is set to 1 by default and the function pat_init() sets
__pat_enabled to 0 if the CPU doesn't support PAT.
However, on AMD K6-3 CPU, the processor initialization code never calls
pat_init() and so __pat_enabled stays 1 and the function pat_enabled()
returns true, even though the K6-3 CPU doesn't support PAT.
The result of this bug is that this warning is produced when attemting to
start the Xserver and the Xserver doesn't start (fork() returns ENOMEM).
Another symptom of this bug is that the framebuffer driver doesn't set the
K6-3 MTRR registers.
This patch changes pat_enabled() so that it returns true only if pat
initialization was actually done.
As Andy Lutomirski suggested, we also need to call init_cache_modes() if
pat was not initialized, so we call it after mtrr_bp_init()
(mtrr_bp_init() would or wouldn't call pat_init()). Note that
init_cache_modes() detects if it was called more than once and does
nothing in that case.
x86/PAT: Xorg:3891 map pfn expected mapping type uncached-minus for [mem 0xe4000000-0xe5ffffff], got write-combining
------------[ cut here ]------------
WARNING: CPU: 0 PID: 3891 at arch/x86/mm/pat.c:1020 untrack_pfn+0x5c/0x9f
Modules linked in: blowfish_generic blowfish_common cbc dm_crypt dm_loop msr configfs cpufreq_userspace cpufreq_powersave cpufreq_ondemand cpufreq_conservative ext4 crc16 jbd2 mbcache hpfs nls_cp852 msdos fat matroxfb_base matroxfb_g450 matroxfb_accel cfbfillrect cfbimgblt cfbcopyarea matroxfb_DAC1064 g450_pll matroxfb_misc floppy snd_usb_audio snd_hwdep snd_usbmidi_lib snd_seq_midi snd_seq_midi_event snd_rawmidi snd_pcm snd_seq snd_seq_device snd_timer hid_generic snd usbhid hid soundcore powernow_k6 pcspkr evdev e1000 ehci_pci uhci_hcd ehci_hcd usbcore usb_common dm_mod pata_it821x unix
CPU: 0 PID: 3891 Comm: Xorg Not tainted 4.11.0-rc6-test+ #35
Hardware name: System Manufacturer Product Name/VA-503A, BIOS 4.51 PG 08/02/00
Call Trace:
? __warn+0xab/0xc0
? untrack_pfn+0x5c/0x9f
? warn_slowpath_null+0xf/0x13
? untrack_pfn+0x5c/0x9f
? unmap_single_vma+0x43/0x66
? unmap_vmas+0x24/0x30
? exit_mmap+0x3c/0xa5
? __mmput+0xf/0x76
? copy_process.part.76+0xb43/0x1129
? _do_fork+0x96/0x177
? do_int80_syscall_32+0x3e/0x4c
? entry_INT80_32+0x2a/0x2a
---[ end trace 8726f9d9fa90d702 ]---
x86/PAT: Xorg:3891 map pfn expected mapping type uncached-minus for [mem 0xe4000000-0xe5ffffff], got write-combining
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Cc: stable@vger.kernel.org # v4.2+
---
arch/x86/include/asm/pat.h | 1 +
arch/x86/kernel/setup.c | 2 ++
arch/x86/mm/pat.c | 10 ++++++----
3 files changed, 9 insertions(+), 4 deletions(-)
Index: linux-stable/arch/x86/mm/pat.c
===================================================================
--- linux-stable.orig/arch/x86/mm/pat.c
+++ linux-stable/arch/x86/mm/pat.c
@@ -40,7 +40,6 @@
static bool boot_cpu_done;
static int __read_mostly __pat_enabled = IS_ENABLED(CONFIG_X86_PAT);
-static void init_cache_modes(void);
void pat_disable(const char *reason)
{
@@ -65,9 +64,11 @@ static int __init nopat(char *str)
}
early_param("nopat", nopat);
+static bool __read_mostly __pat_initialized = false;
+
bool pat_enabled(void)
{
- return !!__pat_enabled;
+ return __pat_initialized;
}
EXPORT_SYMBOL_GPL(pat_enabled);
@@ -225,6 +226,7 @@ static void pat_bsp_init(u64 pat)
}
wrmsrl(MSR_IA32_CR_PAT, pat);
+ __pat_initialized = true;
__init_cache_modes(pat);
}
@@ -242,7 +244,7 @@ static void pat_ap_init(u64 pat)
wrmsrl(MSR_IA32_CR_PAT, pat);
}
-static void init_cache_modes(void)
+void init_cache_modes(void)
{
u64 pat = 0;
static int init_cm_done;
@@ -306,7 +308,7 @@ void pat_init(void)
u64 pat;
struct cpuinfo_x86 *c = &boot_cpu_data;
- if (!pat_enabled()) {
+ if (!__pat_enabled) {
init_cache_modes();
return;
}
Index: linux-stable/arch/x86/include/asm/pat.h
===================================================================
--- linux-stable.orig/arch/x86/include/asm/pat.h
+++ linux-stable/arch/x86/include/asm/pat.h
@@ -7,6 +7,7 @@
bool pat_enabled(void);
void pat_disable(const char *reason);
extern void pat_init(void);
+extern void init_cache_modes(void);
extern int reserve_memtype(u64 start, u64 end,
enum page_cache_mode req_pcm, enum page_cache_mode *ret_pcm);
Index: linux-stable/arch/x86/kernel/setup.c
===================================================================
--- linux-stable.orig/arch/x86/kernel/setup.c
+++ linux-stable/arch/x86/kernel/setup.c
@@ -1070,6 +1070,8 @@ void __init setup_arch(char **cmdline_p)
/* update e820 for memory not covered by WB MTRRs */
mtrr_bp_init();
+ if (!pat_enabled())
+ init_cache_modes();
if (mtrr_trim_uncached_memory(max_pfn))
max_pfn = e820__end_of_ram_pfn();
[toc] | [prev] | [next] | [standalone]
| From | Andy Lutomirski <luto@kernel.org> |
|---|---|
| Date | 2017-06-07 01:00 +0200 |
| Subject | Re: [PATCH v2] X86: don't report PAT on CPUs that don't support it |
| Message-ID | <tPvC9-6BR-3@gated-at.bofh.it> |
| In reply to | #1659267 |
On Tue, Jun 6, 2017 at 3:49 PM, Mikulas Patocka <mpatocka@redhat.com> wrote: > > > On Sun, 28 May 2017, Andy Lutomirski wrote: > >> On Sun, May 28, 2017 at 11:18 AM, Bernhard Held <berny156@gmx.de> wrote: >> > Hi, >> > >> > this patch breaks the boot of my kernel. The last message is "Booting >> > the kernel.". >> > >> > My setup might be unusual: I'm running a Xenon E5450 (LGA 771) in a >> > Gigbayte G33-DS3R board (LGA 775). The BIOS is patched with the >> > microcode of the E5450 and recognizes the CPU. >> > >> > Please find below the dmesg of a the latest kernel w/o the PAT-patch. >> > I'm happy to provide more information or to test patches. >> >> I think this patch is bogus. pat_enabled() sure looks like it's >> supposed to return true if PAT is *enabled*, and these days PAT is >> "enabled" even if there's no HW PAT support. Even if the patch were >> somehow correct, it should have been split up into two patches, one to >> change pat_enabled() and one to use this_cpu_has(). >> >> Ingo, I'd suggest reverting the patch, cc-ing stable on the revert so >> -stable knows not to backport it, and starting over with the fix. >> >From very brief inspection, the right fix is to make sure that >> pat_init(), or at least init_cache_modes(), gets called on the >> affected CPUs. >> >> --Andy > > Hi > > Here I send the second version of the patch. It drops the change from > boot_cpu_has(X86_FEATURE_PAT) to this_cpu_has(X86_FEATURE_PAT) (that > caused kernel to be unbootable for some people). > > Another change is that setup_arch() calls init_cache_modes() if PAT is > disabled, so that init_cache_modes() is always called. > > Mikulas > > > > From: Mikulas Patocka <mpatocka@redhat.com> > > In the file arch/x86/mm/pat.c, there's a variable __pat_enabled. The > variable is set to 1 by default and the function pat_init() sets > __pat_enabled to 0 if the CPU doesn't support PAT. > > However, on AMD K6-3 CPU, the processor initialization code never calls > pat_init() and so __pat_enabled stays 1 and the function pat_enabled() > returns true, even though the K6-3 CPU doesn't support PAT. > > The result of this bug is that this warning is produced when attemting to > start the Xserver and the Xserver doesn't start (fork() returns ENOMEM). > Another symptom of this bug is that the framebuffer driver doesn't set the > K6-3 MTRR registers. > > This patch changes pat_enabled() so that it returns true only if pat > initialization was actually done. Why? Shouldn't calling init_cache_modes() be sufficient? --Andy
[toc] | [prev] | [next] | [standalone]
| From | Mikulas Patocka <mpatocka@redhat.com> |
|---|---|
| Date | 2017-06-07 01:30 +0200 |
| Subject | Re: [PATCH v2] X86: don't report PAT on CPUs that don't support it |
| Message-ID | <tPw5b-71w-9@gated-at.bofh.it> |
| In reply to | #1659268 |
On Tue, 6 Jun 2017, Andy Lutomirski wrote: > On Tue, Jun 6, 2017 at 3:49 PM, Mikulas Patocka <mpatocka@redhat.com> wrote: > > > > > > On Sun, 28 May 2017, Andy Lutomirski wrote: > > > >> On Sun, May 28, 2017 at 11:18 AM, Bernhard Held <berny156@gmx.de> wrote: > >> > Hi, > >> > > >> > this patch breaks the boot of my kernel. The last message is "Booting > >> > the kernel.". > >> > > >> > My setup might be unusual: I'm running a Xenon E5450 (LGA 771) in a > >> > Gigbayte G33-DS3R board (LGA 775). The BIOS is patched with the > >> > microcode of the E5450 and recognizes the CPU. > >> > > >> > Please find below the dmesg of a the latest kernel w/o the PAT-patch. > >> > I'm happy to provide more information or to test patches. > >> > >> I think this patch is bogus. pat_enabled() sure looks like it's > >> supposed to return true if PAT is *enabled*, and these days PAT is > >> "enabled" even if there's no HW PAT support. Even if the patch were > >> somehow correct, it should have been split up into two patches, one to > >> change pat_enabled() and one to use this_cpu_has(). > >> > >> Ingo, I'd suggest reverting the patch, cc-ing stable on the revert so > >> -stable knows not to backport it, and starting over with the fix. > >> >From very brief inspection, the right fix is to make sure that > >> pat_init(), or at least init_cache_modes(), gets called on the > >> affected CPUs. > >> > >> --Andy > > > > Hi > > > > Here I send the second version of the patch. It drops the change from > > boot_cpu_has(X86_FEATURE_PAT) to this_cpu_has(X86_FEATURE_PAT) (that > > caused kernel to be unbootable for some people). > > > > Another change is that setup_arch() calls init_cache_modes() if PAT is > > disabled, so that init_cache_modes() is always called. > > > > Mikulas > > > > > > > > From: Mikulas Patocka <mpatocka@redhat.com> > > > > In the file arch/x86/mm/pat.c, there's a variable __pat_enabled. The > > variable is set to 1 by default and the function pat_init() sets > > __pat_enabled to 0 if the CPU doesn't support PAT. > > > > However, on AMD K6-3 CPU, the processor initialization code never calls > > pat_init() and so __pat_enabled stays 1 and the function pat_enabled() > > returns true, even though the K6-3 CPU doesn't support PAT. > > > > The result of this bug is that this warning is produced when attemting to > > start the Xserver and the Xserver doesn't start (fork() returns ENOMEM). > > Another symptom of this bug is that the framebuffer driver doesn't set the > > K6-3 MTRR registers. > > > > This patch changes pat_enabled() so that it returns true only if pat > > initialization was actually done. > > Why? Shouldn't calling init_cache_modes() be sufficient? > > --Andy See the function arch_phys_wc_add(): if (pat_enabled() || !mtrr_enabled()) return 0; /* Success! (We don't need to do anything.) */ ret = mtrr_add(base, size, MTRR_TYPE_WRCOMB, true); - if pat_enabled() returns true, that function doesn't set MTRRs. pat_enabled() must return false on systems without PAT, so that MTRRs are set. Mikulas
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web