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? Paolo