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

In this v2, 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] 4+ messages in thread

* [PATCH v2 1/2] vhost: add packed ring support to vring base requests
  2018-10-18  9:29 [PATCH v2 0/2] vhost: packed ring support completion Maxime Coquelin
@ 2018-10-18  9:29 ` Maxime Coquelin
  2018-10-18  9:29 ` [PATCH v2 2/2] vhost: advertize packed ring layout support Maxime Coquelin
  2018-10-18  9:32 ` [PATCH v2 0/2] vhost: packed ring support completion Maxime Coquelin
  2 siblings, 0 replies; 4+ messages in thread
From: Maxime Coquelin @ 2018-10-18  9:29 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..c712c9a40 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 & 0x1f);
+		vq->avail_wrap_counter = (val & (0x1 << 15) >> 15);
+		vq->last_used_idx = (val & (0x1f << 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 & 0x1f;
+		val |= vq->avail_wrap_counter << 15;
+		val |= (vq->last_used_idx & 0x1f) << 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] 4+ messages in thread

* [PATCH v2 2/2] vhost: advertize packed ring layout support
  2018-10-18  9:29 [PATCH v2 0/2] vhost: packed ring support completion Maxime Coquelin
  2018-10-18  9:29 ` [PATCH v2 1/2] vhost: add packed ring support to vring base requests Maxime Coquelin
@ 2018-10-18  9:29 ` Maxime Coquelin
  2018-10-18  9:32 ` [PATCH v2 0/2] vhost: packed ring support completion Maxime Coquelin
  2 siblings, 0 replies; 4+ messages in thread
From: Maxime Coquelin @ 2018-10-18  9:29 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] 4+ messages in thread

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

Sorry, just notice I forgot to generate patches again after fixing patch
2, v3 coming soon.

On 10/18/2018 11:29 AM, Maxime Coquelin wrote:
> In this v2, 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(-)
> 

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

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

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-18  9:29 [PATCH v2 0/2] vhost: packed ring support completion Maxime Coquelin
2018-10-18  9:29 ` [PATCH v2 1/2] vhost: add packed ring support to vring base requests Maxime Coquelin
2018-10-18  9:29 ` [PATCH v2 2/2] vhost: advertize packed ring layout support Maxime Coquelin
2018-10-18  9:32 ` [PATCH v2 0/2] vhost: packed ring support completion 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.