[dpdk-dev] [RFC 20/29] vhost: fix vring addr setup
Tiwei Bie
tiwei.bie at intel.com
Wed Jun 21 04:57:56 CEST 2017
Signed-off-by: Tiwei Bie <tiwei.bie at intel.com>
---
lib/librte_vhost/vhost.c | 4 ++++
lib/librte_vhost/vhost_user.c | 17 +++++++++++++++--
2 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/lib/librte_vhost/vhost.c b/lib/librte_vhost/vhost.c
index 19c5a43..b7bc1ee 100644
--- a/lib/librte_vhost/vhost.c
+++ b/lib/librte_vhost/vhost.c
@@ -441,6 +441,10 @@ rte_vhost_enable_guest_notification(int vid, uint16_t queue_id, int enable)
return -1;
}
+ if (dev->features & (1ULL << VIRTIO_F_VERSION_1_1)) {
+ return 0;
+ }
+
dev->virtqueue[queue_id]->used->flags = VRING_USED_F_NO_NOTIFY;
return 0;
}
diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c
index 3a2de79..9265dcb 100644
--- a/lib/librte_vhost/vhost_user.c
+++ b/lib/librte_vhost/vhost_user.c
@@ -342,6 +342,19 @@ vhost_user_set_vring_addr(struct virtio_net *dev, VhostUserMsg *msg)
/* addr->index refers to the queue index. The txq 1, rxq is 0. */
vq = dev->virtqueue[msg->payload.addr.index];
+ if (dev->features & (1ULL << VIRTIO_F_VERSION_1_1)) {
+ vq->desc_1_1 = (struct vring_desc_1_1 *)(uintptr_t)qva_to_vva
+ (dev, msg->payload.addr.desc_user_addr);
+ vq->desc = NULL;
+ vq->avail = NULL;
+ vq->used = NULL;
+ vq->log_guest_addr = 0;
+
+ assert(vq->last_used_idx == 0);
+
+ return 0;
+ }
+
/* The addresses are converted from QEMU virtual to Vhost virtual. */
vq->desc = (struct vring_desc *)(uintptr_t)qva_to_vva(dev,
msg->payload.addr.desc_user_addr);
@@ -351,7 +364,7 @@ vhost_user_set_vring_addr(struct virtio_net *dev, VhostUserMsg *msg)
dev->vid);
return -1;
}
- vq->desc_1_1 = (struct vring_desc_1_1 *)vq->desc;
+ vq->desc_1_1 = NULL;
dev = numa_realloc(dev, msg->payload.addr.index);
vq = dev->virtqueue[msg->payload.addr.index];
@@ -617,7 +630,7 @@ vhost_user_set_mem_table(struct virtio_net *dev, struct VhostUserMsg *pmsg)
static int
vq_is_ready(struct vhost_virtqueue *vq)
{
- return vq && vq->desc &&
+ return vq && (vq->desc || vq->desc_1_1) &&
vq->kickfd != VIRTIO_UNINITIALIZED_EVENTFD &&
vq->callfd != VIRTIO_UNINITIALIZED_EVENTFD;
}
--
2.7.4
More information about the dev
mailing list