On Fri, Feb 2, 2024 at 4:54 PM David Hildenbrand <da...@redhat.com> wrote: > > Let's prepare for increasing VHOST_USER_MAX_RAM_SLOTS by dynamically > allocating dev->regions. We don't have any ABI guarantees (not > dynamically linked), so we can simply change the layout of VuDev. > > Let's zero out the memory, just as we used to do. > > Signed-off-by: David Hildenbrand <da...@redhat.com>
Reviewed-by: Raphael Norwitz <raph...@enfabrica.net> > --- > subprojects/libvhost-user/libvhost-user.c | 11 +++++++++++ > subprojects/libvhost-user/libvhost-user.h | 2 +- > 2 files changed, 12 insertions(+), 1 deletion(-) > > diff --git a/subprojects/libvhost-user/libvhost-user.c > b/subprojects/libvhost-user/libvhost-user.c > index 7e515ed15d..8a5a7a2295 100644 > --- a/subprojects/libvhost-user/libvhost-user.c > +++ b/subprojects/libvhost-user/libvhost-user.c > @@ -2171,6 +2171,8 @@ vu_deinit(VuDev *dev) > > free(dev->vq); > dev->vq = NULL; > + free(dev->regions); > + dev->regions = NULL; > } > > bool > @@ -2205,9 +2207,18 @@ vu_init(VuDev *dev, > dev->backend_fd = -1; > dev->max_queues = max_queues; > > + dev->regions = malloc(VHOST_USER_MAX_RAM_SLOTS * > sizeof(dev->regions[0])); > + if (!dev->regions) { > + DPRINT("%s: failed to malloc mem regions\n", __func__); > + return false; > + } > + memset(dev->regions, 0, VHOST_USER_MAX_RAM_SLOTS * > sizeof(dev->regions[0])); > + > dev->vq = malloc(max_queues * sizeof(dev->vq[0])); > if (!dev->vq) { > DPRINT("%s: failed to malloc virtqueues\n", __func__); > + free(dev->regions); > + dev->regions = NULL; > return false; > } > > diff --git a/subprojects/libvhost-user/libvhost-user.h > b/subprojects/libvhost-user/libvhost-user.h > index c2352904f0..c882b4e3a2 100644 > --- a/subprojects/libvhost-user/libvhost-user.h > +++ b/subprojects/libvhost-user/libvhost-user.h > @@ -398,7 +398,7 @@ typedef struct VuDevInflightInfo { > struct VuDev { > int sock; > uint32_t nregions; > - VuDevRegion regions[VHOST_USER_MAX_RAM_SLOTS]; > + VuDevRegion *regions; > VuVirtq *vq; > VuDevInflightInfo inflight_info; > int log_call_fd; > -- > 2.43.0 > >