* Paolo Bonzini (pbonz...@redhat.com) wrote: > On 13/12/2017 19:08, Dr. David Alan Gilbert (git) wrote: > > + if (dev->tmp_mem->nregions) { > > + /* Since we already have at least one region, lets see if > > + * this extends it; since we're scanning in order, we only > > + * have to look at the last one, and the FlatView that calls > > + * us shouldn't have overlaps. > > + */ > > + struct vhost_memory_region *prev_vmr = dev->tmp_mem->regions + > > + (dev->tmp_mem->nregions - > > 1); > > + uint64_t prev_gpa_start = prev_vmr->guest_phys_addr; > > + uint64_t prev_gpa_end = range_get_last(prev_gpa_start, > > + prev_vmr->memory_size); > > + uint64_t prev_host_start = prev_vmr->userspace_addr; > > + uint64_t prev_host_end = range_get_last(prev_host_start, > > + prev_vmr->memory_size); > > + > > + if (prev_gpa_end + 1 == mrs_gpa && > > + prev_host_end + 1 == mrs_host && > > + (!dev->vhost_ops->vhost_backend_can_merge || > > + dev->vhost_ops->vhost_backend_can_merge(dev, > > + mrs_host, mrs_size, > > + prev_host_start, prev_vmr->memory_size))) { > > + /* The two regions abut */ > > + need_add = false; > > + mrs_size = mrs_size + prev_vmr->memory_size; > > + prev_vmr->memory_size = mrs_size; > > + trace_vhost_region_add_tmp_abut(section->mr->name, mrs_size); > > + } > > + } > > Interesting, in which cases does this actually trigger?
:vhost_section vga-lowmem:0 :vhost_section /objects/mem:1 :vhost_region_add_tmp /objects/mem: 0x0+0xa0000 @ 0x7ff1f5a08000 :vhost_section vga.vram:0 :vhost_section vga-lowmem:0 :vhost_section /objects/mem:1 :vhost_region_add_tmp /objects/mem: 0xc0000+0xa000 @ 0x7ff1f5ac8000 :vhost_section /objects/mem:1 :vhost_region_add_tmp /objects/mem: 0xca000+0x3000 @ 0x7ff1f5ad2000 >vhost_region_add_tmp_abut /objects/mem: 0xd000 :vhost_section /objects/mem:1 :vhost_region_add_tmp /objects/mem: 0xcd000+0x1f000 @ 0x7ff1f5ad5000 >vhost_region_add_tmp_abut /objects/mem: 0x2c000 :vhost_section /objects/mem:1 :vhost_region_add_tmp /objects/mem: 0xec000+0x4000 @ 0x7ff1f5af4000 >vhost_region_add_tmp_abut /objects/mem: 0x30000 :vhost_section /objects/mem:1 :vhost_region_add_tmp /objects/mem: 0xf0000+0x10000 @ 0x7ff1f5af8000 >vhost_region_add_tmp_abut /objects/mem: 0x40000 :vhost_section /objects/mem:1 :vhost_region_add_tmp /objects/mem: 0x100000+0x3ff00000 @ 0x7ff1f5b08000 >vhost_region_add_tmp_abut /objects/mem: 0x3ff40000 :vhost_section vga.vram:0 :vhost_section vga ioports remapped:0 :vhost_section bochs dispi interface:0 :vhost_section qemu extended regs:0 :vhost_section msix-table:0 :vhost_section msix-pba:0 :vhost_section kvm-ioapic:0 :vhost_section hpet:0 :vhost_section kvm-apic-msi:0 :vhost_section pc.bios:0 :vhost_commit Started: 1 Changed: 0 So it's not unusual for us to piece them back together into one chunk. Dave > Paolo -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK