>> +/* >> + * XIVE Interrupt Source MMIOs >> + */ >> +static uint64_t spapr_xive_esb_read(void *opaque, hwaddr addr, unsigned >> size) >> +{ >> + sPAPRXive *xive = SPAPR_XIVE(opaque); >> + uint32_t offset = addr & 0xF00; >> + uint32_t srcno = addr >> xive->esb_shift; >> + XiveIVE *ive; >> + uint64_t ret = -1; >> + >> + ive = spapr_xive_get_ive(xive, srcno); >> + if (!ive || !(ive->w & IVE_VALID)) { >> + qemu_log_mask(LOG_GUEST_ERROR, "XIVE: invalid LISN %d\n", srcno); >> + goto out; > > Since there's a whole (4k) page for each source, I wonder if we should > actually map each one as a separate MMIO region to allow us to tweak > the mappings more flexibly yes we could have a subregion for each source. In that case, we should also handle IVE_VALID properly. That will require a specific XIVE allocator which was difficult to do while keeping the compatibility with XICS for migration and CAS.
C.