Re: [PATCH 1/1] x86/cpu/topology: Don't limit CPUs to 1 for Xen PV guests due to disabled APIC

From: Petr Vaněk
Date: Mon Apr 07 2025 - 09:29:38 EST


On Sun, Apr 06, 2025 at 12:08:29PM +0200, Thomas Gleixner wrote:
> On Sat, Apr 05 2025 at 20:16, Petr Vaněk wrote:
>
> > Xen PV guests in DomU have APIC disabled by design, which causes
> > topology_apply_cmdline_limits_early() to limit the number of possible
> > CPUs to 1, regardless of the configured number of vCPUs.
>
> PV guests have a APIC emulation and there is no code which actually
> disables the APIC by design unconditionally. There is one way though,
> which disables the APIC indirectly.

It seems I have got a bit lost in APIC/ACPI abbreviations. Sorry.

> xen_arch_setup() disables ACPI, which in turn causes acpi_mps_check() to
> return 1, which disables the APIC. This only happens when the kernel
> configuration has:
>
> CONFIG_X86_MPPARSE=n
> CONFIG_ACPI=y
>
> If you enable MPPARSE the problem goes away, no?

Yes, it goes away.

> > + /* 'maxcpus=0' 'nosmp' 'nolapic'
> > + *
> > + * The apic_is_disabled check is ignored for Xen PV domains because Xen
> > + * disables ACPI in unprivileged PV DomU guests, which would otherwise limit
> > + * CPUs to 1, even if multiple vCPUs were configured.
>
> This is the wrong place as it invalidates the effect of 'nolapic' on the
> kernel command line for XEN PV.
>
> You actually explain in the comment that XEN disables ACPI, so why are
> you slapping this xen check into this code instead of doing the obvious
> and prevent acpi_mps_check() to cause havoc?

Thank you for your explanation and suggestion. I will correct acpi_mps_check()
in following patch.

Thanks,
Petr