Index: sys/arm64/xen/xen_arch_intr.c =================================================================== --- sys/arm64/xen/xen_arch_intr.c +++ sys/arm64/xen/xen_arch_intr.c @@ -40,6 +40,7 @@ #include #include #include +#include #include #include @@ -123,6 +124,20 @@ isrc = NULL; } +#ifdef SMP + if (type == EVTCHN_TYPE_PORT) { + static u_int current; + + /* + * By default all interrupts are assigned to vCPU#0 + * unless specified otherwise, so shuffle them to balance + * the interrupt load. + */ + current = intr_irq_next_cpu(current, &all_cpus); + xen_intr_assign_cpu(isrc, current); + } +#endif + return (isrc); }