Index: sys/xen/xen_intr.c =================================================================== --- sys/xen/xen_intr.c +++ sys/xen/xen_intr.c @@ -769,6 +769,9 @@ for (i = 0; i < nitems(s->evtchn_mask); i++) atomic_store_rel_long(&s->evtchn_mask[i], ~0); + /* Protect xen_intr_port_to_isrc[] / ->xi_port */ + mtx_lock(&xen_intr_isrc_lock); + /* Clear existing port mappings */ for (isrc_idx = 0; isrc_idx < NR_EVENT_CHANNELS; ++isrc_idx) if (xen_intr_port_to_isrc[isrc_idx] != NULL) @@ -805,6 +808,9 @@ cur = next; } while (cur != NULL); } + + /* Done with xen_intr_port_to_isrc[] / ->xi_port */ + mtx_unlock(&xen_intr_isrc_lock); } #endif