diff options
-rw-r--r-- | src/vnet/devices/virtio/vhost_user.c | 12 | ||||
-rw-r--r-- | src/vnet/devices/virtio/vhost_user_input.c | 4 |
2 files changed, 15 insertions, 1 deletions
diff --git a/src/vnet/devices/virtio/vhost_user.c b/src/vnet/devices/virtio/vhost_user.c index a8a7ae89065..796be4b80a2 100644 --- a/src/vnet/devices/virtio/vhost_user.c +++ b/src/vnet/devices/virtio/vhost_user.c @@ -73,7 +73,9 @@ get_huge_page_size (int fd) static void unmap_all_mem_regions (vhost_user_intf_t * vui) { - int i, r; + int i, r, q; + vhost_user_vring_t *vq; + for (i = 0; i < vui->nregions; i++) { if (vui->region_mmap_addr[i] != MAP_FAILED) @@ -104,6 +106,14 @@ unmap_all_mem_regions (vhost_user_intf_t * vui) } } vui->nregions = 0; + + for (q = 0; q < VHOST_VRING_MAX_N; q++) + { + vq = &vui->vrings[q]; + vq->avail = 0; + vq->used = 0; + vq->desc = 0; + } } static void diff --git a/src/vnet/devices/virtio/vhost_user_input.c b/src/vnet/devices/virtio/vhost_user_input.c index 1a7a0c47150..26140484d2e 100644 --- a/src/vnet/devices/virtio/vhost_user_input.c +++ b/src/vnet/devices/virtio/vhost_user_input.c @@ -259,6 +259,10 @@ vhost_user_if_input (vlib_main_t * vm, u16 thread_index = vm->thread_index; u16 copy_len = 0; + /* The descriptor table is not ready yet */ + if (PREDICT_FALSE (txvq->avail == 0)) + return 0; + { /* do we have pending interrupts ? */ vhost_user_vring_t *rxvq = &vui->vrings[VHOST_VRING_IDX_RX (qid)]; |