libvhost-user: Dynamically allocate memory for memory slots
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. Reviewed-by: Raphael Norwitz <raphael@enfabrica.net> Acked-by: Stefano Garzarella <sgarzare@redhat.com> Signed-off-by: David Hildenbrand <david@redhat.com> Message-Id: <20240214151701.29906-2-david@redhat.com> Tested-by: Mario Casquero <mcasquer@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
9ed62809b6
commit
d884e27278
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user