>> +/*
>> + * 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.