mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-18 21:06:44 +07:00
08529078d8
Prerequisite for fixing the current problem of instantaneous reboots when a
5-level paging kernel is booted on 4-level paging hardware.
At the same time this change prepares the decompression code to boot-time
switching between 4- and 5-level paging.
[ tglx: Folded the GCC < 5 fix. ]
Fixes: 77ef56e4f0
("x86: Enable 5-level paging support via CONFIG_X86_5LEVEL=y")
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: stable@vger.kernel.org
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: linux-mm@kvack.org
Cc: Cyrill Gorcunov <gorcunov@openvz.org>
Cc: Borislav Petkov <bp@suse.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Link: https://lkml.kernel.org/r/20171204124059.63515-2-kirill.shutemov@linux.intel.com
29 lines
651 B
C
29 lines
651 B
C
#include <asm/processor.h>
|
|
|
|
/*
|
|
* __force_order is used by special_insns.h asm code to force instruction
|
|
* serialization.
|
|
*
|
|
* It is not referenced from the code, but GCC < 5 with -fPIE would fail
|
|
* due to an undefined symbol. Define it to make these ancient GCCs work.
|
|
*/
|
|
unsigned long __force_order;
|
|
|
|
int l5_paging_required(void)
|
|
{
|
|
/* Check if leaf 7 is supported. */
|
|
|
|
if (native_cpuid_eax(0) < 7)
|
|
return 0;
|
|
|
|
/* Check if la57 is supported. */
|
|
if (!(native_cpuid_ecx(7) & (1 << (X86_FEATURE_LA57 & 31))))
|
|
return 0;
|
|
|
|
/* Check if 5-level paging has already been enabled. */
|
|
if (native_read_cr4() & X86_CR4_LA57)
|
|
return 0;
|
|
|
|
return 1;
|
|
}
|