It is not obvious at first glance, but this is dead logic.
On Intel, xAPIC (which is what modern_apic() is really checking for) predates
64bit support, while the Family 0xf check on AMD is the K8 processor.
Simply drop the logic, rather than trying to adjust vendor/family logic.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Jan Beulich <JBeulich@suse.com>
CC: Roger Pau Monné <roger.pau@citrix.com>
add/remove: 0/1 grow/shrink: 0/1 up/down: 0/-166 (-166)
Function old new delta
setup_IO_APIC 2992 2987 -5
sync_Arb_IDs 161 - -161
---
xen/arch/x86/apic.c | 32 --------------------------------
xen/arch/x86/include/asm/apic.h | 1 -
xen/arch/x86/io_apic.c | 2 +-
3 files changed, 1 insertion(+), 34 deletions(-)
diff --git a/xen/arch/x86/apic.c b/xen/arch/x86/apic.c
index 70636b0bb585..774771860002 100644
--- a/xen/arch/x86/apic.c
+++ b/xen/arch/x86/apic.c
@@ -91,23 +91,6 @@ static enum apic_mode apic_boot_mode = APIC_MODE_INVALID;
bool __read_mostly x2apic_enabled;
bool __read_mostly directed_eoi_enabled;
-static int modern_apic(void)
-{
- unsigned int lvr, version;
- /* AMD systems use old APIC versions, so check the CPU */
- if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD &&
- boot_cpu_data.x86 >= 0xf)
- return 1;
-
- /* Hygon systems use modern APIC */
- if (boot_cpu_data.x86_vendor == X86_VENDOR_HYGON)
- return 1;
-
- lvr = apic_read(APIC_LVR);
- version = GET_APIC_VERSION(lvr);
- return version >= 0x14;
-}
-
/*
* 'what should we do if we get a hw irq event on an illegal vector'.
* each architecture has to answer this themselves.
@@ -396,21 +379,6 @@ int __init verify_local_APIC(void)
return 1;
}
-void __init sync_Arb_IDs(void)
-{
- /* Unsupported on P4 - see Intel Dev. Manual Vol. 3, Ch. 8.6.1
- And not needed on AMD */
- if (modern_apic())
- return;
- /*
- * Wait for idle.
- */
- apic_wait_icr_idle();
-
- apic_printk(APIC_DEBUG, "Synchronizing Arb IDs.\n");
- apic_write(APIC_ICR, APIC_DEST_ALLINC | APIC_INT_LEVELTRIG | APIC_DM_INIT);
-}
-
/*
* An initial setup of the virtual wire mode.
*/
diff --git a/xen/arch/x86/include/asm/apic.h b/xen/arch/x86/include/asm/apic.h
index d22854953689..918f1cee3567 100644
--- a/xen/arch/x86/include/asm/apic.h
+++ b/xen/arch/x86/include/asm/apic.h
@@ -166,7 +166,6 @@ extern void disconnect_bsp_APIC (int virt_wire_setup);
extern void disable_local_APIC (void);
extern int verify_local_APIC (void);
extern void cache_APIC_registers (void);
-extern void sync_Arb_IDs (void);
extern void init_bsp_APIC (void);
extern void setup_local_APIC(bool bsp);
extern void init_apic_mappings (void);
diff --git a/xen/arch/x86/io_apic.c b/xen/arch/x86/io_apic.c
index 42a9b653d397..17e6827f4bb3 100644
--- a/xen/arch/x86/io_apic.c
+++ b/xen/arch/x86/io_apic.c
@@ -2163,7 +2163,7 @@ void __init setup_IO_APIC(void)
*/
if (!acpi_ioapic)
setup_ioapic_ids_from_mpc();
- sync_Arb_IDs();
+
setup_IO_APIC_irqs();
init_IO_APIC_traps();
check_timer();
--
2.39.5
On 29.08.2025 18:17, Andrew Cooper wrote: > It is not obvious at first glance, but this is dead logic. > > On Intel, xAPIC (which is what modern_apic() is really checking for) predates > 64bit support, while the Family 0xf check on AMD is the K8 processor. > > Simply drop the logic, rather than trying to adjust vendor/family logic. > > Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Reviewed-by: Jan Beulich <jbeulich@suse.com>
© 2016 - 2025 Red Hat, Inc.