While commit XXXXXXXXXXXX ("x86/IOMMU: mark IOMMU / intremap not in use when ACPI tables are missing") deals with apic_x2apic_probe() as called from x2apic_bsp_setup(), the check_x2apic_preenabled() path is similarly affected: The call needs to occur after acpi_boot_init() (which is what calls acpi_iommu_init()), such that iommu_intremap getting disabled there can be properly taken into account by apic_x2apic_probe().
Signed-off-by: Jan Beulich <jbeul...@suse.com> --- Based on code inspection only - I have no affected system and hence no way to actually test the case. --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -1694,8 +1694,6 @@ void __init noreturn __start_xen(unsigne dmi_scan_machine(); - generic_apic_probe(); - mmio_ro_ranges = rangeset_new(NULL, "r/o mmio ranges", RANGESETF_prettyprint_hex); @@ -1705,6 +1703,13 @@ void __init noreturn __start_xen(unsigne acpi_boot_init(); + /* + * Requires initial ACPI table parsing to have happened, such that + * check_x2apic_preenabled() would be able to observe acpi_iommu_init()'s + * findings, in particular it turning off iommu_intremap. + */ + generic_apic_probe(); + if ( smp_found_config ) get_smp_config();