@@ -53,8 +53,8 @@ static void synic_update(SynICState *synic, bool enable,
&synic->msg_page_mr);
}
if (msg_page_addr) {
- memory_region_add_subregion(get_system_memory(), msg_page_addr,
- &synic->msg_page_mr);
+ memory_region_add_subregion_overlap(get_system_memory(), msg_page_addr,
+ &synic->msg_page_mr, 2);
}
synic->msg_page_addr = msg_page_addr;
}
@@ -64,8 +64,8 @@ static void synic_update(SynICState *synic, bool enable,
&synic->event_page_mr);
}
if (event_page_addr) {
- memory_region_add_subregion(get_system_memory(), event_page_addr,
- &synic->event_page_mr);
+ memory_region_add_subregion_overlap(get_system_memory(), event_page_addr,
+ &synic->event_page_mr, 2);
}
synic->event_page_addr = event_page_addr;
}
On PC systems, system memory is organized like this: - priority -1 is the PCI BARs - priority 0 is the RAM - priority 1 pokes holes in RAM whenever PCI BARs should appear instead (for example due to SMRAM or PAM configuration), plus it contains RAM regions in RAM mode (again toggled by PAM configuration). (SMRAM for CPUs in SMM has "infinite" priority since it is added in a completely different address space). SynIC memory regions are overlaid on top of memory, so they should have the highest priority except for SMRAM. Implement this by giving them priority 2. Cc: Dr. David Alan Gilbert <dgilbert@redhat.com> Cc: Vitaly Kuznetsov <vkuznets@redhat.com> Cc: Roman Kagan <rkagan@virtuozzo.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- hw/hyperv/hyperv.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)