From c9a97addeb89fc40fc00bdc3b7218f7857a75e11 Mon Sep 17 00:00:00 2001 From: Changpeng Liu Date: Thu, 29 Jun 2017 08:55:01 +0800 Subject: [PATCH] vhost: don't start device before got valid descriptor For each virt queue's kickfd and callfd, there are 2 invalid status: VIRTIO_UNINITIALIZED_EVENTFD and VIRTIO_INVALID_EVENTFD. Don't set the virt queue to ready status until got the valid descriptor. This is safe for polling mode drivers in Guest OS, the backend vhost process will not post notification to interrupt vector for PMD mode in Guest, but the interrupt vector still valid. Change-Id: Icdf1e67f3c4e8da221843eb1383469ca1fba485c Signed-off-by: Changpeng Liu Reviewed-on: https://review.gerrithub.io/365327 Reviewed-by: Pawel Wodkowski Tested-by: SPDK Automated Test System Reviewed-by: Daniel Verkamp --- lib/vhost/rte_vhost/vhost_user.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/vhost/rte_vhost/vhost_user.c b/lib/vhost/rte_vhost/vhost_user.c index 52da1c3e6..f619b036c 100644 --- a/lib/vhost/rte_vhost/vhost_user.c +++ b/lib/vhost/rte_vhost/vhost_user.c @@ -654,7 +654,9 @@ vq_is_ready(struct vhost_virtqueue *vq) { return vq && vq->desc && vq->kickfd != VIRTIO_UNINITIALIZED_EVENTFD && - vq->callfd != VIRTIO_UNINITIALIZED_EVENTFD; + vq->callfd != VIRTIO_UNINITIALIZED_EVENTFD && + vq->kickfd != VIRTIO_INVALID_EVENTFD && + vq->callfd != VIRTIO_INVALID_EVENTFD; } static int