Re: 4.8.2 not booting in 32-bit VM without I/O-APIC

From: Michael Thayer
Date: Thu Nov 10 2016 - 09:22:24 EST


Hello,

On 03.11.2016 21:02, Michal Necasek wrote:
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?

Sorry for the delay too (holiday-related). I tested 4.9.0rc4 on a 32-bit VirtualBox virtual machine without I/O-APIC and can confirm that it now boots. Since I am at it, the OHCI timer wheel-related problems are also no longer reproducible.

Regards and thanks,

Michael


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();


--
Michael Thayer | VirtualBox engineer
ORACLE Deutschland B.V. & Co. KG | Werkstr. 24 | D-71384 Weinstadt

ORACLE Deutschland B.V. & Co. KG
Hauptverwaltung: RiesstraÃe 25, D-80992 MÃnchen
Registergericht: Amtsgericht MÃnchen, HRA 95603

KomplementÃrin: ORACLE Deutschland Verwaltung B.V.
Hertogswetering 163/167, 3543 AS Utrecht, Niederlande Handelsregister
der Handelskammer Midden-Nederland, Nr. 30143697
GeschÃftsfÃhrer: Alexander van der Ven, Jan Schultheiss, Val Maher