vhost: initialize vrings IOTLB caches
The per-virtqueue IOTLB cache init is done at virtqueue init time. init_vring_queue() now takes vring id as parameter, so that the IOTLB cache mempool name can be generated. Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com> Acked-by: Yuanhan Liu <yliu@fridaylinux.org>
This commit is contained in:
parent
01a4bb55f9
commit
76e99bfc4c
@ -48,6 +48,7 @@
|
||||
#include <rte_malloc.h>
|
||||
#include <rte_vhost.h>
|
||||
|
||||
#include "iotlb.h"
|
||||
#include "vhost.h"
|
||||
|
||||
struct virtio_net *vhost_devices[MAX_VHOST_DEVICE];
|
||||
@ -111,13 +112,25 @@ free_device(struct virtio_net *dev)
|
||||
}
|
||||
|
||||
static void
|
||||
init_vring_queue(struct vhost_virtqueue *vq)
|
||||
init_vring_queue(struct virtio_net *dev, uint32_t vring_idx)
|
||||
{
|
||||
struct vhost_virtqueue *vq;
|
||||
|
||||
if (vring_idx >= VHOST_MAX_VRING) {
|
||||
RTE_LOG(ERR, VHOST_CONFIG,
|
||||
"Failed not init vring, out of bound (%d)\n",
|
||||
vring_idx);
|
||||
return;
|
||||
}
|
||||
|
||||
vq = dev->virtqueue[vring_idx];
|
||||
|
||||
memset(vq, 0, sizeof(struct vhost_virtqueue));
|
||||
|
||||
vq->kickfd = VIRTIO_UNINITIALIZED_EVENTFD;
|
||||
vq->callfd = VIRTIO_UNINITIALIZED_EVENTFD;
|
||||
|
||||
vhost_user_iotlb_init(dev, vring_idx);
|
||||
/* Backends are set to -1 indicating an inactive device. */
|
||||
vq->backend = -1;
|
||||
|
||||
@ -131,12 +144,21 @@ init_vring_queue(struct vhost_virtqueue *vq)
|
||||
}
|
||||
|
||||
static void
|
||||
reset_vring_queue(struct vhost_virtqueue *vq)
|
||||
reset_vring_queue(struct virtio_net *dev, uint32_t vring_idx)
|
||||
{
|
||||
struct vhost_virtqueue *vq;
|
||||
int callfd;
|
||||
|
||||
if (vring_idx >= VHOST_MAX_VRING) {
|
||||
RTE_LOG(ERR, VHOST_CONFIG,
|
||||
"Failed not init vring, out of bound (%d)\n",
|
||||
vring_idx);
|
||||
return;
|
||||
}
|
||||
|
||||
vq = dev->virtqueue[vring_idx];
|
||||
callfd = vq->callfd;
|
||||
init_vring_queue(vq);
|
||||
init_vring_queue(dev, vring_idx);
|
||||
vq->callfd = callfd;
|
||||
}
|
||||
|
||||
@ -153,7 +175,7 @@ alloc_vring_queue(struct virtio_net *dev, uint32_t vring_idx)
|
||||
}
|
||||
|
||||
dev->virtqueue[vring_idx] = vq;
|
||||
init_vring_queue(vq);
|
||||
init_vring_queue(dev, vring_idx);
|
||||
|
||||
dev->nr_vring += 1;
|
||||
|
||||
@ -175,7 +197,7 @@ reset_device(struct virtio_net *dev)
|
||||
dev->flags = 0;
|
||||
|
||||
for (i = 0; i < dev->nr_vring; i++)
|
||||
reset_vring_queue(dev->virtqueue[i]);
|
||||
reset_vring_queue(dev, i);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user