On Fri, 22 Dec 2017 17:25:13 +0100 Igor Mammedov <imamm...@redhat.com> wrote:
> On Fri, 15 Dec 2017 16:45:54 +0800 > Jay Zhou <jianjay.z...@huawei.com> wrote: [...] > > +static void vhost_user_set_used_memslots(struct vhost_dev *dev) > > +{ > > + int counter = 0; > > + int i; > > + > > + for (i = 0; i < dev->mem->nregions; ++i) { > > + struct vhost_memory_region *reg = dev->mem->regions + i; > > + ram_addr_t offset; > > + MemoryRegion *mr; > > + int fd; > > + > > + assert((uintptr_t)reg->userspace_addr == reg->userspace_addr); > > + mr = memory_region_from_host((void > > *)(uintptr_t)reg->userspace_addr, > > + &offset); > > + fd = memory_region_get_fd(mr); > > + if (fd > 0) { > > + counter++; > > + } > > + } > vhost_user_set_mem_table() already does the same counting, > there is no point in duplicating it, just drop vhost_set_used_memslots > callback > > > + vhost_user_used_memslots = counter; > and update this value from vhost_user_set_mem_table() never mind, updating it from vhost_user_set_mem_table() as it's called only when device is started which is not the case when backend is initialized, so the way you did it should work for both cases > > > +} > > + [...]