diff options
author | Juergen Gross <jgross@suse.com> | 2022-11-23 12:45:23 +0100 |
---|---|---|
committer | Borislav Petkov <bp@suse.de> | 2022-11-25 12:05:22 +0100 |
commit | f1e525009493cbd569e7c8dd7d58157855f8658d (patch) | |
tree | 03fff613a4aec21d8df989e8ba1a8b7b0826162c /arch/x86/kernel/x86_init.c | |
parent | cc3fdda2876e58a7e83e558ab51853cf106afb6a (diff) | |
download | linux-stable-f1e525009493cbd569e7c8dd7d58157855f8658d.tar.gz linux-stable-f1e525009493cbd569e7c8dd7d58157855f8658d.tar.bz2 linux-stable-f1e525009493cbd569e7c8dd7d58157855f8658d.zip |
x86/boot: Skip realmode init code when running as Xen PV guest
When running as a Xen PV guest there is no need for setting up the
realmode trampoline, as realmode isn't supported in this environment.
Trying to setup the trampoline has been proven to be problematic in
some cases, especially when trying to debug early boot problems with
Xen requiring to keep the EFI boot-services memory mapped (some
firmware variants seem to claim basically all memory below 1Mb for boot
services).
Introduce new x86_platform_ops operations for that purpose, which can
be set to a NOP by the Xen PV specific kernel boot code.
[ bp: s/call_init_real_mode/do_init_real_mode/ ]
Fixes: 084ee1c641a0 ("x86, realmode: Relocator for realmode code")
Suggested-by: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Juergen Gross <jgross@suse.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Link: https://lore.kernel.org/r/20221123114523.3467-1-jgross@suse.com
Diffstat (limited to 'arch/x86/kernel/x86_init.c')
-rw-r--r-- | arch/x86/kernel/x86_init.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/arch/x86/kernel/x86_init.c b/arch/x86/kernel/x86_init.c index 57353519bc11..ef80d361b463 100644 --- a/arch/x86/kernel/x86_init.c +++ b/arch/x86/kernel/x86_init.c @@ -25,6 +25,7 @@ #include <asm/iommu.h> #include <asm/mach_traps.h> #include <asm/irqdomain.h> +#include <asm/realmode.h> void x86_init_noop(void) { } void __init x86_init_uint_noop(unsigned int unused) { } @@ -145,6 +146,8 @@ struct x86_platform_ops x86_platform __ro_after_init = { .get_nmi_reason = default_get_nmi_reason, .save_sched_clock_state = tsc_save_sched_clock_state, .restore_sched_clock_state = tsc_restore_sched_clock_state, + .realmode_reserve = reserve_real_mode, + .realmode_init = init_real_mode, .hyper.pin_vcpu = x86_op_int_noop, .guest = { |