This is done due to the fact that the kvm-openpic region_add callbacks can be invoked for sections generated from other memory regions as well. These callbacks should handle only requests for the kvm-openpic memory region.
The patch fixes a bug on target-ppc occuring when the "e500-pci-bar0" memory region is added. This memory region registers an alias to the "e500-ccsr" memory region, which further contains the "kvm-openpic" subregion. Due to this alias, the kvm_openpic_region_add is called once more, with an offset within the "e500-pci-bar" memory region. This generates the remapping of the in-kernel MPIC at a wrong offset. The fix consists in an additional filter in kvm_openpic_region_add to consider only addresses matching the start of the kvm-openpic memory region. Signed-off-by: Bogdan Purcareata <bogdan.purcare...@freescale.com> Signed-off-by: Mihai Caraman <mihai.cara...@freescale.com> --- hw/intc/openpic_kvm.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hw/intc/openpic_kvm.c b/hw/intc/openpic_kvm.c index e3bce04..b02de40 100644 --- a/hw/intc/openpic_kvm.c +++ b/hw/intc/openpic_kvm.c @@ -128,6 +128,11 @@ static void kvm_openpic_region_add(MemoryListener *listener, return; } + /* Ignore events on regions that are not at the MPIC offset */ + if (section->offset_within_address_space != + memory_region_address_space_offset(section->mr)) + return; + reg_base = section->offset_within_address_space; attr.group = KVM_DEV_MPIC_GRP_MISC; -- 1.7.10.4