Re: Patch "x86/PAT: Fix Xorg regression on CPUs that don't support PAT" has been added to the 4.11-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi

Please remove this patch from all stable kernels because it causes boot 
failure for some people. I will send another patch.

Mikulas


On Mon, 5 Jun 2017, gregkh@xxxxxxxxxxxxxxxxxxx wrote:

> 
> This is a note to let you know that I've just added the patch titled
> 
>     x86/PAT: Fix Xorg regression on CPUs that don't support PAT
> 
> to the 4.11-stable tree which can be found at:
>     http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
> 
> The filename of the patch is:
>      x86-pat-fix-xorg-regression-on-cpus-that-don-t-support-pat.patch
> and it can be found in the queue-4.11 subdirectory.
> 
> If you, or anyone else, feels it should not be added to the stable tree,
> please let <stable@xxxxxxxxxxxxxxx> know about it.
> 
> 
> >From cbed27cdf0e3f7ea3b2259e86b9e34df02be3fe4 Mon Sep 17 00:00:00 2001
> From: Mikulas Patocka <mpatocka@xxxxxxxxxx>
> Date: Tue, 18 Apr 2017 15:07:11 -0400
> Subject: x86/PAT: Fix Xorg regression on CPUs that don't support PAT
> 
> From: Mikulas Patocka <mpatocka@xxxxxxxxxx>
> 
> commit cbed27cdf0e3f7ea3b2259e86b9e34df02be3fe4 upstream.
> 
> 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@xxxxxxxxxx>
> Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> Cc: Andy Lutomirski <luto@xxxxxxxxxx>
> Cc: Borislav Petkov <bp@xxxxxxxxx>
> Cc: Brian Gerst <brgerst@xxxxxxxxx>
> Cc: Denys Vlasenko <dvlasenk@xxxxxxxxxx>
> Cc: H. Peter Anvin <hpa@xxxxxxxxx>
> Cc: Josh Poimboeuf <jpoimboe@xxxxxxxxxx>
> Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> Cc: Luis R. Rodriguez <mcgrof@xxxxxxxx>
> Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Cc: Toshi Kani <toshi.kani@xxxxxx>
> Link: http://lkml.kernel.org/r/alpine.LRH.2.02.1704181501450.26399@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
> Signed-off-by: Ingo Molnar <mingo@xxxxxxxxxx>
> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
> 
> ---
>  arch/x86/mm/pat.c |    9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
> 
> --- a/arch/x86/mm/pat.c
> +++ b/arch/x86/mm/pat.c
> @@ -64,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);
>  
> @@ -224,13 +226,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.
> @@ -305,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;
>  	}
> 
> 
> Patches currently in stable-queue which might be from mpatocka@xxxxxxxxxx are
> 
> queue-4.11/x86-pat-fix-xorg-regression-on-cpus-that-don-t-support-pat.patch
> 



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]