[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [XEN PATCH] x86/ACPI: Ignore entries with invalid APIC IDs when parsing MADT
Jan Beulich: > On 07.08.2023 14:55, Simon Gaiser wrote: >> Jan Beulich: >>> On 07.08.2023 11:38, Simon Gaiser wrote: >>>> It seems some firmwares put dummy entries in the ACPI MADT table for non >>>> existing processors. On my NUC11TNHi5 those have the invalid APIC ID >>>> 0xff. Linux already has code to handle those cases both in >>>> acpi_parse_lapic [1] as well as in acpi_parse_x2apic [2]. So add the >>>> same check to Xen. >>> >>> I'm afraid it doesn't become clear to me what problem you're trying to >>> solve. >> >> I want Xen to not think there are possible CPUs that actually never can >> be there. > > Did you try using "maxcpus=" on the command line? If that doesn't work > well enough Yes. Then Xen says, as expected "SMP: Allowing 8 CPUs (0 hotplug CPUs)", but disabled_cpus is still 8 and nr_sockets therefore calculated as 2. > (perhaps because of causing undesirable log messages), I don't mind some verbose log messages. > maybe we need some way to say "no CPU hotplug" on the command line. That indeed might make sense, but I'm not sure this is what I want here, see below. >> Without ignoring those dummy entries Xen thinks my NUC has 2 sockets and >> that there are 8 logical CPUs that are currently disabled but could be >> hotplugged. > > Yet it's exactly this which ACPI is telling us here (with some vagueness, > which isn't easy to get around; see below). > >> I'm moderately sure that soldering in another CPU is not supported, even >> less so at runtime ;] > > On your system. What about others, which are hotplug-capable? Would those be listed with an invalid APIC ID in their entries? Then I understand your complaint. PS: based on your reply to Andrew, you think that this might be the case. >>>> --- a/xen/arch/x86/acpi/boot.c >>>> +++ b/xen/arch/x86/acpi/boot.c >>>> @@ -87,14 +87,17 @@ acpi_parse_x2apic(struct acpi_subtable_header *header, >>>> const unsigned long end) >>>> if (BAD_MADT_ENTRY(processor, end)) >>>> return -EINVAL; >>>> >>>> + /* Ignore entries with invalid apicid */ >>>> + if (processor->local_apic_id == 0xffffffff) >>>> + return 0; >>>> + >>>> /* Don't register processors that cannot be onlined. */ >>>> if (madt_revision >= 5 && >>>> !(processor->lapic_flags & ACPI_MADT_ENABLED) && >>>> !(processor->lapic_flags & ACPI_MADT_ONLINE_CAPABLE)) >>>> return 0; >>>> >>>> - if ((processor->lapic_flags & ACPI_MADT_ENABLED) || >>>> - processor->local_apic_id != 0xffffffff || opt_cpu_info) { >>>> + if ((processor->lapic_flags & ACPI_MADT_ENABLED) || opt_cpu_info) { >>>> acpi_table_print_madt_entry(header); >>>> log = true; >>>> } >>> >>> In particular you're now suppressing log messages which may be relevant. >> >> I intentionally mirrored the behavior of the check directly below. >> Unlike the the version in Linux the existing code didn't log ignored >> entries. So I did the same for the entries with an invalid ID. > > I'm afraid I can't bring in line the check you add early in the function > with what is "directly below" [here]. I'm only inferring the "here" from > the placement of your reply. Maybe instead you meant the rev >= 5 one, Yes exactly. "directly below" was meant relative to the if I added. > in which case I'm afraid the two are too different to compare: That > rev >= 5 one tells us that the entry isn't going to be hotpluggable. The > APIC ID check you add makes no such guarantees. As mentioned above, if that's the case I see the problem. > That's why the new flag was actually added in v5. See other branch of this thread: https://lore.kernel.org/xen-devel/80bae614-052e-0f90-cf13-0e5e4ed1a5cd@xxxxxxxxxxxxxxxxxxxxxx/ So we might cover at least my case regardless how invalid APIC IDs should be interpreted. Attachment:
OpenPGP_signature
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |