All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/2] vhost: packed ring support completion
@ 2018-10-18  9:41 Maxime Coquelin
  2018-10-18  9:41 ` [PATCH v3 1/2] vhost: add packed ring support to vring base requests Maxime Coquelin
  2018-10-18  9:41 ` [PATCH v3 2/2] vhost: advertize packed ring layout support Maxime Coquelin
  0 siblings, 2 replies; 3+ messages in thread
From: Maxime Coquelin @ 2018-10-18  9:41 UTC (permalink / raw)
  To: dev, jfreimann, tiwei.bie, zhihong.wang, jasowang, mst; +Cc: Maxime Coquelin

In this v3, the vring state num field structure is changed
to store both used and avail indexes and their wrap counters.

Initial series ading packed ring layout support to the
vhost library was missing the save and restore of the
wrap counters and indexs on vring base requests used for
migration.

First patch saves/restores the used and avail indexes and their
wrap counters values into/from the vring state num field.

Patch 2 advertise support for the packed ring.

Maxime Coquelin (2):
  vhost: add packed ring support to vring base requests
  vhost: advertize packed ring layout support

 lib/librte_vhost/vhost.h      |  3 ++-
 lib/librte_vhost/vhost_user.c | 41 ++++++++++++++++++++++++++++++-----
 2 files changed, 37 insertions(+), 7 deletions(-)

-- 
2.17.1

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH v3 1/2] vhost: add packed ring support to vring base requests
  2018-10-18  9:41 [PATCH v3 0/2] vhost: packed ring support completion Maxime Coquelin
@ 2018-10-18  9:41 ` Maxime Coquelin
  2018-10-18  9:41 ` [PATCH v3 2/2] vhost: advertize packed ring layout support Maxime Coquelin
  1 sibling, 0 replies; 3+ messages in thread
From: Maxime Coquelin @ 2018-10-18  9:41 UTC (permalink / raw)
  To: dev, jfreimann, tiwei.bie, zhihong.wang, jasowang, mst; +Cc: Maxime Coquelin

For packed ring layout, we need save and restore avail and
used indexes, and their wrap counter values.

Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
---
 lib/librte_vhost/vhost_user.c | 41 ++++++++++++++++++++++++++++++-----
 1 file changed, 35 insertions(+), 6 deletions(-)

diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c
index 508228a3c..ff80bef8e 100644
--- a/lib/librte_vhost/vhost_user.c
+++ b/lib/librte_vhost/vhost_user.c
@@ -696,10 +696,24 @@ vhost_user_set_vring_base(struct virtio_net **pdev,
 			int main_fd __rte_unused)
 {
 	struct virtio_net *dev = *pdev;
-	dev->virtqueue[msg->payload.state.index]->last_used_idx  =
-			msg->payload.state.num;
-	dev->virtqueue[msg->payload.state.index]->last_avail_idx =
-			msg->payload.state.num;
+	struct vhost_virtqueue *vq = dev->virtqueue[msg->payload.state.index];
+	uint64_t val = msg->payload.state.num;
+
+	if (vq_is_packed(dev)) {
+		/*
+		 * Bit[0:14]: avail index
+		 * Bit[15]: avail wrap counter
+		 * Bit[16:30]: used index
+		 * Bit[31]: used wrap counter
+		 */
+		vq->last_avail_idx = val & 0x7fff;
+		vq->avail_wrap_counter = (val & (0x1 << 15)) >> 15;
+		vq->last_used_idx = (val & (0x7fff << 16)) >> 16;
+		vq->used_wrap_counter = (val & (0x1 << 31)) >> 31;
+	} else {
+		vq->last_used_idx = msg->payload.state.num;
+		vq->last_avail_idx = msg->payload.state.num;
+	}
 
 	return VH_RESULT_OK;
 }
@@ -1208,6 +1222,7 @@ vhost_user_get_vring_base(struct virtio_net **pdev,
 {
 	struct virtio_net *dev = *pdev;
 	struct vhost_virtqueue *vq = dev->virtqueue[msg->payload.state.index];
+	uint64_t val;
 
 	/* We have to stop the queue (virtio) if it is running. */
 	vhost_destroy_device_notify(dev);
@@ -1215,8 +1230,22 @@ vhost_user_get_vring_base(struct virtio_net **pdev,
 	dev->flags &= ~VIRTIO_DEV_READY;
 	dev->flags &= ~VIRTIO_DEV_VDPA_CONFIGURED;
 
-	/* Here we are safe to get the last avail index */
-	msg->payload.state.num = vq->last_avail_idx;
+	/* Here we are safe to get the indexes */
+	if (vq_is_packed(dev)) {
+		/*
+		 * Bit[0:14]: avail index
+		 * Bit[15]: avail wrap counter
+		 * Bit[16:30]: used index
+		 * Bit[31]: used wrap counter
+		 */
+		val = vq->last_avail_idx & 0x7fff;
+		val |= vq->avail_wrap_counter << 15;
+		val |= (vq->last_used_idx & 0x7fff) << 16;
+		val |= vq->used_wrap_counter << 31;
+		msg->payload.state.num = val;
+	} else {
+		msg->payload.state.num = vq->last_avail_idx;
+	}
 
 	RTE_LOG(INFO, VHOST_CONFIG,
 		"vring base idx:%d file:%d\n", msg->payload.state.index,
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH v3 2/2] vhost: advertize packed ring layout support
  2018-10-18  9:41 [PATCH v3 0/2] vhost: packed ring support completion Maxime Coquelin
  2018-10-18  9:41 ` [PATCH v3 1/2] vhost: add packed ring support to vring base requests Maxime Coquelin
@ 2018-10-18  9:41 ` Maxime Coquelin
  1 sibling, 0 replies; 3+ messages in thread
From: Maxime Coquelin @ 2018-10-18  9:41 UTC (permalink / raw)
  To: dev, jfreimann, tiwei.bie, zhihong.wang, jasowang, mst; +Cc: Maxime Coquelin

Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
---
 lib/librte_vhost/vhost.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/lib/librte_vhost/vhost.h b/lib/librte_vhost/vhost.h
index b4abad30c..760f42192 100644
--- a/lib/librte_vhost/vhost.h
+++ b/lib/librte_vhost/vhost.h
@@ -275,7 +275,8 @@ struct vring_packed_desc_event {
 				(1ULL << VIRTIO_RING_F_EVENT_IDX) | \
 				(1ULL << VIRTIO_NET_F_MTU)  | \
 				(1ULL << VIRTIO_F_IN_ORDER) | \
-				(1ULL << VIRTIO_F_IOMMU_PLATFORM))
+				(1ULL << VIRTIO_F_IOMMU_PLATFORM) | \
+				(1ULL << VIRTIO_F_RING_PACKED))
 
 
 struct guest_page {
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-10-18  9:42 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-18  9:41 [PATCH v3 0/2] vhost: packed ring support completion Maxime Coquelin
2018-10-18  9:41 ` [PATCH v3 1/2] vhost: add packed ring support to vring base requests Maxime Coquelin
2018-10-18  9:41 ` [PATCH v3 2/2] vhost: advertize packed ring layout support Maxime Coquelin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.