Index: sys/arm64/arm64/gic_v3_var.h =================================================================== --- sys/arm64/arm64/gic_v3_var.h +++ sys/arm64/arm64/gic_v3_var.h @@ -43,6 +43,7 @@ struct redist_pcpu { struct resource res; vm_offset_t pend_base; + u_int lpi_enabled:1; }; struct gic_redists { Index: sys/arm64/arm64/gicv3_its.c =================================================================== --- sys/arm64/arm64/gicv3_its.c +++ sys/arm64/arm64/gicv3_its.c @@ -670,11 +670,14 @@ if ((gic_r_read_4(gicv3, GICR_TYPER) & GICR_TYPER_PLPIS) == 0) return (ENXIO); - its_init_cpu_lpi(dev, sc); + rpcpu = gicv3_get_redist(dev); + if (!rpcpu->lpi_enabled) { + its_init_cpu_lpi(dev, sc); + rpcpu->lpi_enabled = 1; + } if ((gic_its_read_8(sc, GITS_TYPER) & GITS_TYPER_PTA) != 0) { /* This ITS wants the redistributor physical address */ - rpcpu = gicv3_get_redist(dev); target = vtophys(rman_get_virtual(&rpcpu->res)); } else { /* This ITS wants the unique processor number */