Lack of an AMD IOMMU driver means we cannot successfully route interrupts to APIC IDs over 255.
See also commits fa5f94140a83 and 4258eb5a0d97.
Differential D41618
x86: disallow APIC IDs over 255 on AMD hardware emaste on Aug 28 2023, 4:00 PM. Authored by Tags None Referenced Files
Details Lack of an AMD IOMMU driver means we cannot successfully route interrupts to APIC IDs over 255. See also commits fa5f94140a83 and 4258eb5a0d97.
Diff Detail
Event Timeline
Comment Actions I tested the version of this patch which I downloaded at 18:19 UTC, and it works in EC2 -- at least, it works with boot_verbose turned off. With boot_verbose="YES" we get a "spin lock ... (ap boot) held ... too long" panic because bringing up lots of CPUs verbosely over a slow serial port takes too long, but that's not anything APIC-related. Comment Actions
This is the issue @jhb was getting at, we should initialize the driver early so that we can default to 255 and increase once DMAR IR / AMD equivalent is functional. But I don't know enough to make those changes. Or, do you mean we should be able to do this with the current initialization ordering? Comment Actions There is already a function in x86/intr_machdep.c that is called when DMAR IR is ready, it is intr_reprogram(). It is needed to ensure that DMAR remap entries are created for already configured interrupts. On the other hand, it does not re-balance interrupts over cores, so if interrupts were allocated for low APICs, they would stay there until re-rebalanced, which is off by default, it seems. Comment Actions I think that sort of change is probably something to do later. Possibly it would work for Ed's case since dmar0 is off of acpi0 and hopefully attached before PCI devices are attached. However, that change also requires further work as you'd have to now go in and add in more CPUs via intr_add_cpu and that conflicts a bit with the earlier hack to disable domain-specific CPUs for interrupts if we have domains without any valid CPUs.
|