x86: irq_move_cleanup_interrupt() must ignore legacy vectors Since the main loop in the function includes legacy vectors, and since vector_irq[] gets set up for legacy vectors regardless of whether those get handled through the IO-APIC, it must not do anything on this vector range. In fact, we should never get here for IRQs not handled through the IO-APIC, so add a respective warning at once (could probably as well be an ASSERT()). Signed-off-by: Jan Beulich --- a/xen/arch/x86/irq.c +++ b/xen/arch/x86/irq.c @@ -625,6 +625,12 @@ void irq_move_cleanup_interrupt(struct c if ((int)irq < 0) continue; + if ( vector >= FIRST_LEGACY_VECTOR && vector <= LAST_LEGACY_VECTOR ) + { + WARN_ON(!IO_APIC_IRQ(irq)); + continue; + } + desc = irq_to_desc(irq); if (!desc) continue;