mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-28 15:20:41 +00:00
9cf3060640
TDX guest requires CR0.NE to be set. Clearing the bit triggers #GP(0). If CR0.NE is 0, the MS-DOS compatibility mode for handling floating-point exceptions is selected. In this mode, the software exception handler for floating-point exceptions is invoked externally using the processor’s FERR#, INTR, and IGNNE# pins. Using FERR# and IGNNE# to handle floating-point exception is deprecated. CR0.NE=0 also limits newer processors to operate with one logical processor active. Kernel uses CR0_STATE constant to initialize CR0. It has NE bit set. But during early boot kernel has more ad-hoc approach to setting bit in the register. During some of this ad-hoc manipulation, CR0.NE is cleared. This causes a #GP in TDX guests and makes it die in early boot. Make CR0 initialization consistent, deriving the initial value of CR0 from CR0_STATE. Since CR0_STATE always has CR0.NE=1, this ensures that CR0.NE is never 0 and avoids the #GP. Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com> Reviewed-by: Dave Hansen <dave.hansen@linux.intel.com> Reviewed-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lkml.kernel.org/r/20220405232939.73860-23-kirill.shutemov@linux.intel.com |
||
---|---|---|
.. | ||
compressed | ||
tools | ||
.gitignore | ||
a20.c | ||
apm.c | ||
bioscall.S | ||
bitops.h | ||
boot.h | ||
cmdline.c | ||
copy.S | ||
cpu.c | ||
cpucheck.c | ||
cpuflags.c | ||
cpuflags.h | ||
ctype.h | ||
early_serial_console.c | ||
edd.c | ||
genimage.sh | ||
header.S | ||
install.sh | ||
io.h | ||
main.c | ||
Makefile | ||
memory.c | ||
mkcpustr.c | ||
mtools.conf.in | ||
pm.c | ||
pmjump.S | ||
printf.c | ||
regs.c | ||
setup.ld | ||
string.c | ||
string.h | ||
tty.c | ||
version.c | ||
vesa.h | ||
video-bios.c | ||
video-mode.c | ||
video-vesa.c | ||
video-vga.c | ||
video.c | ||
video.h |