gic_redists
res = sc->gic_redists.pcpu[cpuid].res;
offset = sc->gic_redists.pcpu[PCPU_GET(cpuid)].offset;
sc->gic_redists.pcpu = mallocarray(mp_maxid + 1,
sizeof(sc->gic_redists.pcpu[0]), M_GIC_V3, M_WAITOK);
for (i = 0; i < sc->gic_redists.nregions; i++) {
r_res = sc->gic_redists.regions[i];
sc->gic_redists.pcpu[cpuid].res = r_res;
sc->gic_redists.pcpu[cpuid].offset = offset;
sc->gic_redists.pcpu[cpuid].lpi_enabled = false;
!sc->gic_redists.single && (typer & GICR_TYPER_LAST) == 0);
rdist = sc->gic_redists.pcpu[PCPU_GET(cpuid)].res;
offset += sc->gic_redists.pcpu[PCPU_GET(cpuid)].offset;
rdist = sc->gic_redists.pcpu[PCPU_GET(cpuid)].res;
offset += sc->gic_redists.pcpu[PCPU_GET(cpuid)].offset;
rdist = sc->gic_redists.pcpu[PCPU_GET(cpuid)].res;
offset += sc->gic_redists.pcpu[PCPU_GET(cpuid)].offset;
rdist = sc->gic_redists.pcpu[PCPU_GET(cpuid)].res;
offset += sc->gic_redists.pcpu[PCPU_GET(cpuid)].offset;
sizeof(*sc->gic_res) * (sc->gic_redists.nregions + 1),
for (i = 0, rid = 0; i < (sc->gic_redists.nregions + 1); i++, rid++) {
sc->gic_redists.regions = malloc(
sizeof(*sc->gic_redists.regions) * sc->gic_redists.nregions,
for (i = 0, rid = 1; i < sc->gic_redists.nregions; i++, rid++)
sc->gic_redists.regions[i] = sc->gic_res[rid];
for (rid = 0; rid < (sc->gic_redists.nregions + 1); rid++)
free(sc->gic_redists.pcpu, M_GIC_V3);
free(sc->gic_redists.regions, M_GIC_V3);
*result = (uintptr_t)&sc->gic_redists.pcpu[PCPU_GET(cpuid)];
sc->gic_redists.nregions++;
sc->gic_redists.nregions++;
if (sc->gic_redists.nregions == 0) {
sc->gic_redists.single = true;
return (sc->gic_redists.nregions > 0 ? 0 : ENXIO);
sc->gic_redists.nregions = 1;
sc->gic_redists.nregions = redist_regions;
(sc)->gic_redists.pcpu[cpu].res, \
(sc)->gic_redists.pcpu[cpu].offset + (reg)); \
(sc)->gic_redists.pcpu[cpu].res, \
(sc)->gic_redists.pcpu[cpu].offset + (reg), \
struct gic_redists gic_redists;