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 @@ -112,6 +113,20 @@ isrc = NULL; } +#ifdef SMP + if (type == EVTCHN_TYPE_PORT) { + static u_int current = 1; + + /* + * 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); + isrc->xi_cpu = current; + } +#endif + return (isrc); }