All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jin Yu <jin.yu@intel.com>
To: dev@dpdk.org
Cc: changpeng.liu@intel.com, maxime.coquelin@redhat.com,
	tiwei.bie@intel.com, zhihong.wang@intel.com,
	Jin Yu <jin.yu@intel.com>, Lin Li <lilin24@baidu.com>,
	Xun Ni <nixun@baidu.com>, Yu Zhang <zhangyu31@baidu.com>
Subject: [dpdk-dev] [PATCH v10 7/9] vhost: add APIs for user getting inflight ring
Date: Wed,  9 Oct 2019 23:25:13 +0800	[thread overview]
Message-ID: <20191009152515.21765-8-jin.yu@intel.com> (raw)
In-Reply-To: <20191009152515.21765-1-jin.yu@intel.com>

This patch introduces two APIs. one is for getting inflgiht
ring and the other is for getting base.

Signed-off-by: Lin Li <lilin24@baidu.com>
Signed-off-by: Xun Ni <nixun@baidu.com>
Signed-off-by: Yu Zhang <zhangyu31@baidu.com>
Signed-off-by: Jin Yu <jin.yu@intel.com>
---
 lib/librte_vhost/rte_vhost.h           | 40 +++++++++++++++++
 lib/librte_vhost/rte_vhost_version.map |  2 +
 lib/librte_vhost/vhost.c               | 61 ++++++++++++++++++++++++++
 3 files changed, 103 insertions(+)

diff --git a/lib/librte_vhost/rte_vhost.h b/lib/librte_vhost/rte_vhost.h
index 15d7e67cd..1e1e13d71 100644
--- a/lib/librte_vhost/rte_vhost.h
+++ b/lib/librte_vhost/rte_vhost.h
@@ -693,6 +693,23 @@ int rte_vhost_get_mem_table(int vid, struct rte_vhost_memory **mem);
 int rte_vhost_get_vhost_vring(int vid, uint16_t vring_idx,
 			      struct rte_vhost_vring *vring);
 
+/**
+ * Get guest inflight vring info, including inflight ring and resubmit list.
+ *
+ * @param vid
+ *  vhost device ID
+ * @param vring_idx
+ *  vring index
+ * @param vring
+ *  the structure to hold the requested inflight vring info
+ * @return
+ *  0 on success, -1 on failure
+ */
+__rte_experimental
+int
+rte_vhost_get_vhost_ring_inflight(int vid, uint16_t vring_idx,
+	struct rte_vhost_ring_inflight *vring);
+
 /**
  * Set split inflight descriptor.
  *
@@ -867,6 +884,29 @@ int __rte_experimental
 rte_vhost_get_vring_base(int vid, uint16_t queue_id,
 		uint16_t *last_avail_idx, uint16_t *last_used_idx);
 
+/**
+ * Get last_avail/last_used of the vhost virtqueue
+ *
+ * This function is designed for the reconnection and it's specific for
+ * the packed ring as we can get the two parameters from the inflight
+ * queueregion
+ *
+ * @param vid
+ *  vhost device ID
+ * @param queue_id
+ *  vhost queue index
+ * @param last_avail_idx
+ *  vhost last_avail_idx to get
+ * @param last_used_idx
+ *  vhost last_used_idx to get
+ * @return
+ *  0 on success, -1 on failure
+ */
+__rte_experimental
+int
+rte_vhost_get_vring_base_from_inflight(int vid,
+	uint16_t queue_id, uint16_t *last_avail_idx, uint16_t *last_used_idx);
+
 /**
  * Set last_avail/used_idx of the vhost virtqueue
  *
diff --git a/lib/librte_vhost/rte_vhost_version.map b/lib/librte_vhost/rte_vhost_version.map
index bc70bfaa5..ce517b127 100644
--- a/lib/librte_vhost/rte_vhost_version.map
+++ b/lib/librte_vhost/rte_vhost_version.map
@@ -93,4 +93,6 @@ EXPERIMENTAL {
 	rte_vhost_set_last_inflight_io_packed;
 	rte_vhost_clr_inflight_desc_split;
 	rte_vhost_clr_inflight_desc_packed;
+	rte_vhost_get_vhost_ring_inflight;
+	rte_vhost_get_vring_base_from_inflight;
 };
diff --git a/lib/librte_vhost/vhost.c b/lib/librte_vhost/vhost.c
index b8c14a6ea..f7ed37261 100644
--- a/lib/librte_vhost/vhost.c
+++ b/lib/librte_vhost/vhost.c
@@ -783,6 +783,41 @@ rte_vhost_get_vhost_vring(int vid, uint16_t vring_idx,
 	return 0;
 }
 
+int
+rte_vhost_get_vhost_ring_inflight(int vid, uint16_t vring_idx,
+				  struct rte_vhost_ring_inflight *vring)
+{
+	struct virtio_net *dev;
+	struct vhost_virtqueue *vq;
+
+	dev = get_device(vid);
+	if (unlikely(!dev))
+		return -1;
+
+	if (vring_idx >= VHOST_MAX_VRING)
+		return -1;
+
+	vq = dev->virtqueue[vring_idx];
+	if (unlikely(!vq))
+		return -1;
+
+	if (vq_is_packed(dev)) {
+		if (unlikely(!vq->inflight_packed))
+			return -1;
+
+		vring->inflight_packed = vq->inflight_packed;
+	} else {
+		if (unlikely(!vq->inflight_split))
+			return -1;
+
+		vring->inflight_split = vq->inflight_split;
+	}
+
+	vring->resubmit_inflight = vq->resubmit_inflight;
+
+	return 0;
+}
+
 int
 rte_vhost_set_inflight_desc_split(int vid, uint16_t vring_idx,
 				  uint16_t idx)
@@ -1250,6 +1285,32 @@ int rte_vhost_get_vring_base(int vid, uint16_t queue_id,
 	return 0;
 }
 
+int
+rte_vhost_get_vring_base_from_inflight(int vid,
+				       uint16_t queue_id,
+				       uint16_t *last_avail_idx,
+				       uint16_t *last_used_idx)
+{
+	struct rte_vhost_inflight_info_packed *inflight_info;
+	struct virtio_net *dev = get_device(vid);
+
+	if (dev == NULL || last_avail_idx == NULL || last_used_idx == NULL)
+		return -1;
+
+	if (!vq_is_packed(dev))
+		return -1;
+
+	inflight_info = dev->virtqueue[queue_id]->inflight_packed;
+	if (!inflight_info)
+		return -1;
+
+	*last_avail_idx = (inflight_info->old_used_wrap_counter << 15) |
+			  inflight_info->old_used_idx;
+	*last_used_idx = *last_avail_idx;
+
+	return 0;
+}
+
 int rte_vhost_set_vring_base(int vid, uint16_t queue_id,
 		uint16_t last_avail_idx, uint16_t last_used_idx)
 {
-- 
2.17.2


  parent reply	other threads:[~2019-10-09  7:43 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20191008153341.22228>
2019-10-09 15:25 ` [dpdk-dev] [PATCH v10 0/9] vhost: support inflight share memory protocol feature Jin Yu
2019-10-09 15:25   ` [dpdk-dev] [PATCH v10 1/9] vhost: add the inflight description Jin Yu
2019-10-09 15:25   ` [dpdk-dev] [PATCH v10 2/9] vhost: add packed ring Jin Yu
2019-10-09 15:25   ` [dpdk-dev] [PATCH v10 3/9] vhost: add the inflight structure Jin Yu
2019-10-09 15:25   ` [dpdk-dev] [PATCH v10 4/9] vhost: add two new messages to support a shared buffer Jin Yu
2019-10-09 15:25   ` [dpdk-dev] [PATCH v10 5/9] vhost: checkout the resubmit inflight information Jin Yu
2019-10-09 15:25   ` [dpdk-dev] [PATCH v10 6/9] vhost: add the APIs to operate inflight ring Jin Yu
2019-10-09 15:25   ` Jin Yu [this message]
2019-10-09 15:25   ` [dpdk-dev] [PATCH v10 8/9] vhost: add vring functions packed ring support Jin Yu
2019-10-09 15:25   ` [dpdk-dev] [PATCH v10 9/9] vhost: add vhost-user-blk example which support inflight Jin Yu
2019-10-09 20:37 ` [dpdk-dev] [PATCH v10 0/9] vhost: support inflight share memory protocol feature Jin Yu
2019-10-09 20:37   ` [dpdk-dev] [PATCH v10 1/9] vhost: add the inflight description Jin Yu
2019-10-09 20:37   ` [dpdk-dev] [PATCH v10 2/9] vhost: add packed ring Jin Yu
2019-10-09 20:37   ` [dpdk-dev] [PATCH v10 3/9] vhost: add the inflight structure Jin Yu
2019-10-09 20:37   ` [dpdk-dev] [PATCH v10 4/9] vhost: add two new messages to support a shared buffer Jin Yu
2019-10-09 20:37   ` [dpdk-dev] [PATCH v10 5/9] vhost: checkout the resubmit inflight information Jin Yu
2019-10-09 20:37   ` [dpdk-dev] [PATCH v10 6/9] vhost: add the APIs to operate inflight ring Jin Yu
2019-10-09 20:37   ` [dpdk-dev] [PATCH v10 7/9] vhost: add APIs for user getting " Jin Yu
2019-10-09 20:37   ` [dpdk-dev] [PATCH v10 8/9] vhost: add vring functions packed ring support Jin Yu
2019-10-09 20:37   ` [dpdk-dev] [PATCH v10 9/9] vhost: add vhost-user-blk example which support inflight Jin Yu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191009152515.21765-8-jin.yu@intel.com \
    --to=jin.yu@intel.com \
    --cc=changpeng.liu@intel.com \
    --cc=dev@dpdk.org \
    --cc=lilin24@baidu.com \
    --cc=maxime.coquelin@redhat.com \
    --cc=nixun@baidu.com \
    --cc=tiwei.bie@intel.com \
    --cc=zhangyu31@baidu.com \
    --cc=zhihong.wang@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.