kvm: kvm_log_start/stop are only called with known sections
Let's properly align the sections first and bail out if we would ever get called with a memory section we don't know yet. Signed-off-by: David Hildenbrand <david@redhat.com> Message-Id: <20170911174933.20789-6-david@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
f357f564be
commit
343562e8fa
|
@ -411,15 +411,21 @@ static int kvm_slot_update_flags(KVMMemoryListener *kml, KVMSlot *mem,
|
||||||
static int kvm_section_update_flags(KVMMemoryListener *kml,
|
static int kvm_section_update_flags(KVMMemoryListener *kml,
|
||||||
MemoryRegionSection *section)
|
MemoryRegionSection *section)
|
||||||
{
|
{
|
||||||
hwaddr phys_addr = section->offset_within_address_space;
|
hwaddr start_addr, size;
|
||||||
ram_addr_t size = int128_get64(section->size);
|
KVMSlot *mem;
|
||||||
KVMSlot *mem = kvm_lookup_matching_slot(kml, phys_addr, size);
|
|
||||||
|
|
||||||
if (mem == NULL) {
|
size = kvm_align_section(section, &start_addr);
|
||||||
|
if (!size) {
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
|
||||||
return kvm_slot_update_flags(kml, mem, section->mr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mem = kvm_lookup_matching_slot(kml, start_addr, size);
|
||||||
|
if (!mem) {
|
||||||
|
fprintf(stderr, "%s: error finding slot\n", __func__);
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
return kvm_slot_update_flags(kml, mem, section->mr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void kvm_log_start(MemoryListener *listener,
|
static void kvm_log_start(MemoryListener *listener,
|
||||||
|
|
Loading…
Reference in New Issue