Sorry for the delay. I can confirm that the problem is fixed in
4.9.0-rc3 and prefill_possible_map no longer crashes (as it did in
4.9.0-rc2). Thank you!
Just a side question, is the previous fix in commit ff8560512b
(x86/boot/smp: Don't try to poke disabled/non-existent APIC) actually
still required or would the no-op APIC driver take care of it?
Regards, Michal
----- Original Message ----- From: tglx@xxxxxxxxxxxxx To:
michal.necasek@xxxxxxxxxx Cc: prarit@xxxxxxxxxx,
ville.syrjala@xxxxxxxxxxxxxxx, michael.thayer@xxxxxxxxxx,
knut.osmundsen@xxxxxxxxxx, frank.mehnert@xxxxxxxxxx,
linux-kernel@xxxxxxxxxxxxxxx Sent: Friday, October 28, 2016 9:37:31
PM GMT +01:00 Amsterdam / Berlin / Bern / Rome / Stockholm / Vienna
Subject: Re: 4.8.2 not booting in 32-bit VM without I/O-APIC
On Fri, 28 Oct 2016, Thomas Gleixner wrote:
On Fri, 28 Oct 2016, Michal Necasek wrote:
Sorry if I wasn't clear. No, it doesn't work for us. The
ff8560512b8d commit fixes the APIC poking on machines where there
is no local APIC available (and thus fixes the committer's
machine), but it doesn't work in our case, where there is a local
APIC but no I/O APIC, no ACPI MADT, and no MP tables.
In other words, for us boot_cpu_has(X86_FEATURE_APIC) is true but
the APIC has not been set up yet because init_apic_mappings()
hasn't been run.
Right. That mapping setup is an utter trainwreck as we do it from
multiple places, but there is no reason why we can't move it before
the call to prefill_possible_map().
Thanks,
tglx
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index
bbfbca5fea0c..b59fdba3cbdf 100644 --- a/arch/x86/kernel/setup.c +++
b/arch/x86/kernel/setup.c @@ -1221,11 +1221,13 @@ void __init
setup_arch(char **cmdline_p) */ get_smp_config();
+ /* Make sure apic is mapped before prefill_possible_map() */ +
init_apic_mappings(); + prefill_possible_map();
init_cpu_to_node();
- init_apic_mappings(); io_apic_init_mappings();
kvm_guest_init();