static int kvm_section_update_flags(KVMMemoryListener *kml,
MemoryRegionSection *section)
{
- hwaddr phys_addr = section->offset_within_address_space;
- ram_addr_t size = int128_get64(section->size);
- KVMSlot *mem = kvm_lookup_matching_slot(kml, phys_addr, size);
+ hwaddr start_addr, size;
+ KVMSlot *mem;
- if (mem == NULL) {
+ size = kvm_align_section(section, &start_addr);
+ if (!size) {
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,