DPDK patches and discussions
 help / color / mirror / Atom feed
From: Miao Li <miao.li@intel.com>
To: dev@dpdk.org
Cc: chenbo.xia@intel.com, maxime.coquelin@redhat.com, miao.li@intel.com
Subject: [dpdk-dev] [PATCH 2/5] lib/vhost: implement rte_power_monitor API
Date: Fri, 10 Sep 2021 13:05:45 +0000	[thread overview]
Message-ID: <20210910130548.127017-3-miao.li@intel.com> (raw)
In-Reply-To: <20210910130548.127017-1-miao.li@intel.com>

This patch defines rte_vhost_power_monitor_cond which is used to pass
some information to vhost driver. The information is including the address
to monitor, the expected value, the mask to extract value read from 'addr',
the flag used to distinguish packed ring or split ring. Vhost driver can
use these information to fill rte_power_monitor_cond.

Signed-off-by: Miao Li <miao.li@intel.com>
---
 lib/vhost/rte_vhost.h | 33 +++++++++++++++++++++++++++++++++
 lib/vhost/version.map |  3 +++
 lib/vhost/vhost.c     | 30 ++++++++++++++++++++++++++++++
 3 files changed, 66 insertions(+)

diff --git a/lib/vhost/rte_vhost.h b/lib/vhost/rte_vhost.h
index 8d875e9322..f58643b0a3 100644
--- a/lib/vhost/rte_vhost.h
+++ b/lib/vhost/rte_vhost.h
@@ -38,6 +38,8 @@ extern "C" {
 #define RTE_VHOST_USER_ASYNC_COPY	(1ULL << 7)
 #define RTE_VHOST_USER_NET_COMPLIANT_OL_FLAGS	(1ULL << 8)
 
+#define VHOST_POWER_MONITOR_RING_PACKED (1ULL << 0)
+
 /* Features. */
 #ifndef VIRTIO_NET_F_GUEST_ANNOUNCE
  #define VIRTIO_NET_F_GUEST_ANNOUNCE 21
@@ -292,6 +294,20 @@ struct vhost_device_ops {
 	void *reserved[1]; /**< Reserved for future extension */
 };
 
+/**
+ * Power monitor condition.
+ */
+struct rte_vhost_power_monitor_cond {
+	volatile void *addr;  /**< Address to monitor for changes */
+	/**< If the `mask` is non-zero, location pointed
+	 *   to by `addr` will be read and compared
+	 *   against this value.
+	 */
+	uint64_t val;
+	uint64_t mask; /**< 64-bit mask to extract value read from `addr` */
+	uint8_t flag;  /**< if 1, vhost packed ring, otherwise split ring */
+};
+
 /**
  * Convert guest physical address to host virtual address
  *
@@ -914,6 +930,23 @@ int rte_vhost_vring_call(int vid, uint16_t vring_idx);
  */
 uint32_t rte_vhost_rx_queue_count(int vid, uint16_t qid);
 
+/**
+ * Get power monitor address of the vhost device
+ *
+ * @param vid
+ *  vhost device ID
+ * @param queue_id
+ *  vhost queue ID
+ * @param pmc
+ *  power monitor condition
+ * @return
+ *  0 on success, -1 on failure
+ */
+__rte_experimental
+int
+rte_vhost_get_monitor_addr(int vid, uint16_t queue_id,
+		struct rte_vhost_power_monitor_cond *pmc);
+
 /**
  * Get log base and log size of the vhost device
  *
diff --git a/lib/vhost/version.map b/lib/vhost/version.map
index c92a9d4962..0a9667ef1e 100644
--- a/lib/vhost/version.map
+++ b/lib/vhost/version.map
@@ -85,4 +85,7 @@ EXPERIMENTAL {
 	rte_vhost_async_channel_register_thread_unsafe;
 	rte_vhost_async_channel_unregister_thread_unsafe;
 	rte_vhost_clear_queue_thread_unsafe;
+
+	# added in 21.11
+	rte_vhost_get_monitor_addr;
 };
diff --git a/lib/vhost/vhost.c b/lib/vhost/vhost.c
index 355ff37651..f7374d3f94 100644
--- a/lib/vhost/vhost.c
+++ b/lib/vhost/vhost.c
@@ -1886,5 +1886,35 @@ int rte_vhost_async_get_inflight(int vid, uint16_t queue_id)
 	return ret;
 }
 
+int
+rte_vhost_get_monitor_addr(int vid, uint16_t queue_id,
+		struct rte_vhost_power_monitor_cond *pmc)
+{
+	struct virtio_net *dev = get_device(vid);
+	struct vhost_virtqueue *vq = dev->virtqueue[queue_id];
+	if (vq == NULL)
+		return -1;
+	if (vq_is_packed(dev)) {
+		struct vring_packed_desc *desc;
+		desc = vq->desc_packed;
+		pmc->addr = &desc[vq->last_avail_idx].flags;
+		if (vq->avail_wrap_counter)
+			pmc->val = VRING_DESC_F_AVAIL;
+		else
+			pmc->val = VRING_DESC_F_USED;
+		pmc->mask = VRING_DESC_F_AVAIL | VRING_DESC_F_USED;
+		pmc->flag = VHOST_POWER_MONITOR_RING_PACKED;
+	} else {
+		pmc->addr = &vq->avail->idx;
+		pmc->val = vq->last_avail_idx & (vq->size - 1);
+		pmc->mask = vq->size - 1;
+		pmc->flag = 0;
+	}
+	if (pmc->addr == NULL)
+		return -1;
+
+	return 0;
+}
+
 RTE_LOG_REGISTER_SUFFIX(vhost_config_log_level, config, INFO);
 RTE_LOG_REGISTER_SUFFIX(vhost_data_log_level, data, WARNING);
-- 
2.25.1


  parent reply	other threads:[~2021-09-10  5:04 UTC|newest]

Thread overview: 99+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-10 13:05 [dpdk-dev] [PATCH 0/5] CPU Enabling: Implement rte_power_monitor API in virtio/vhost PMD Miao Li
2021-09-10 13:05 ` [dpdk-dev] [PATCH 1/5] net/virtio: implement rte_power_monitor API Miao Li
2021-09-15  8:45   ` Xia, Chenbo
2021-09-17  6:40     ` Li, Miao
2021-09-10 13:05 ` Miao Li [this message]
2021-09-15  8:51   ` [dpdk-dev] [PATCH 2/5] lib/vhost: " Xia, Chenbo
2021-09-17  6:51     ` Li, Miao
2021-09-10 13:05 ` [dpdk-dev] [PATCH 3/5] net/vhost: " Miao Li
2021-09-10 13:05 ` [dpdk-dev] [PATCH 4/5] lib/power: modify return of queue_stopped Miao Li
2021-09-10 13:15   ` Burakov, Anatoly
2021-09-10 13:05 ` [dpdk-dev] [PATCH 5/5] examples/l3fwd-power: support virtio/vhost Miao Li
2021-09-10  7:24   ` Maxime Coquelin
2021-09-10  8:33     ` Li, Miao
2021-09-10  8:50       ` David Marchand
2021-09-13  1:41         ` Li, Miao
2021-09-18 13:22 ` [dpdk-dev] [PATCH 0/5] Implement rte_power_monitor API in virtio/vhost PMD Miao Li
2021-09-18 13:22   ` [dpdk-dev] [PATCH 1/5] net/virtio: implement rte_power_monitor API Miao Li
2021-09-18 13:22   ` [dpdk-dev] [PATCH 2/5] vhost: " Miao Li
2021-09-18 13:22   ` [dpdk-dev] [PATCH 3/5] net/vhost: " Miao Li
2021-09-18 13:22   ` [dpdk-dev] [PATCH 4/5] power: modify return of queue_stopped Miao Li
2021-09-18 13:22   ` [dpdk-dev] [PATCH 5/5] examples/l3fwd-power: support virtio/vhost Miao Li
2021-09-24 10:23   ` [dpdk-dev] [PATCH v3 0/5] Implement rte_power_monitor API in virtio/vhost PMD Miao Li
2021-09-24 10:23     ` [dpdk-dev] [PATCH v3 1/5] net/virtio: implement rte_power_monitor API Miao Li
2021-09-29  2:34       ` Xia, Chenbo
2021-09-24 10:23     ` [dpdk-dev] [PATCH v3 2/5] vhost: " Miao Li
2021-09-29  3:01       ` Xia, Chenbo
2021-10-11  5:16         ` Li, Miao
2021-09-24 10:23     ` [dpdk-dev] [PATCH v3 3/5] net/vhost: " Miao Li
2021-09-24 10:23     ` [dpdk-dev] [PATCH v3 4/5] power: modify return of queue_stopped Miao Li
2021-09-29  3:03       ` Xia, Chenbo
2021-10-11  5:18         ` Li, Miao
2021-09-24 10:23     ` [dpdk-dev] [PATCH v3 5/5] examples/l3fwd-power: support virtio/vhost Miao Li
2021-09-29  6:53       ` Xia, Chenbo
2021-10-11  5:22         ` Li, Miao
2021-10-12 14:22     ` [dpdk-dev] [PATCH v4 0/5] Implement rte_power_monitor API in virtio/vhost PMD Miao Li
2021-10-12 14:22       ` [dpdk-dev] [PATCH v4 1/5] net/virtio: implement rte_power_monitor API Miao Li
2021-10-12 14:22       ` [dpdk-dev] [PATCH v4 2/5] vhost: " Miao Li
2021-10-12 14:22       ` [dpdk-dev] [PATCH v4 3/5] net/vhost: " Miao Li
2021-10-12 14:22       ` [dpdk-dev] [PATCH v4 4/5] power: modify return of queue_stopped Miao Li
2021-10-12 14:22       ` [dpdk-dev] [PATCH v4 5/5] examples/l3fwd-power: support virtio/vhost Miao Li
2021-10-15 15:12       ` [dpdk-dev] [PATCH v5 0/5] Implement rte_power_monitor API in virtio/vhost PMD Miao Li
2021-10-15 15:12         ` [dpdk-dev] [PATCH v5 1/5] net/virtio: implement rte_power_monitor API Miao Li
2021-10-15 15:12         ` [dpdk-dev] [PATCH v5 2/5] vhost: " Miao Li
2021-10-15  7:38           ` Xia, Chenbo
2021-10-15  8:47             ` Li, Miao
2021-10-15 15:12         ` [dpdk-dev] [PATCH v5 3/5] net/vhost: " Miao Li
2021-10-15  7:39           ` Xia, Chenbo
2021-10-15  8:49             ` Li, Miao
2021-10-15 15:12         ` [dpdk-dev] [PATCH v5 4/5] power: modify return of queue_stopped Miao Li
2021-10-15  7:47           ` Xia, Chenbo
2021-10-15  8:50             ` Li, Miao
2021-10-15 15:12         ` [dpdk-dev] [PATCH v5 5/5] examples/l3fwd-power: support virtio/vhost Miao Li
2021-10-15  8:13           ` Xia, Chenbo
2021-10-15  8:51             ` Li, Miao
2021-10-15 17:09         ` [dpdk-dev] [PATCH v6 0/5] Implement rte_power_monitor API in virtio/vhost PMD Miao Li
2021-10-15 12:57           ` Maxime Coquelin
2021-10-18  1:54             ` Li, Miao
2021-10-15 17:09           ` [dpdk-dev] [PATCH v6 1/5] net/virtio: implement rte_power_monitor API Miao Li
2021-10-15 17:09           ` [dpdk-dev] [PATCH v6 2/5] vhost: " Miao Li
2021-10-15 17:09           ` [dpdk-dev] [PATCH v6 3/5] net/vhost: " Miao Li
2021-10-15 17:09           ` [dpdk-dev] [PATCH v6 4/5] power: modify return of queue_stopped Miao Li
2021-10-15 17:09           ` [dpdk-dev] [PATCH v6 5/5] examples/l3fwd-power: support virtio/vhost Miao Li
2021-10-18 14:16           ` [dpdk-dev] [PATCH v7 0/5] Implement rte_power_monitor API in virtio/vhost PMD Miao Li
2021-10-18 14:16             ` [dpdk-dev] [PATCH v7 1/5] net/virtio: implement rte_power_monitor API Miao Li
2021-10-21 16:50               ` Ferruh Yigit
2021-10-22  8:22                 ` Li, Miao
2021-10-21 16:59               ` Ferruh Yigit
2021-10-22  8:28                 ` Li, Miao
2021-10-22  8:51                   ` Li, Miao
2021-10-22  8:59                     ` Ferruh Yigit
2021-10-22  9:02                       ` Xia, Chenbo
2021-10-22 13:41               ` David Hunt
2021-10-18 14:16             ` [dpdk-dev] [PATCH v7 2/5] vhost: " Miao Li
2021-10-19  4:38               ` Xia, Chenbo
2021-10-22 12:34                 ` David Hunt
2021-10-18 14:16             ` [dpdk-dev] [PATCH v7 3/5] net/vhost: " Miao Li
2021-10-19  4:39               ` Xia, Chenbo
2021-10-22 12:01                 ` David Hunt
2021-10-18 14:16             ` [dpdk-dev] [PATCH v7 4/5] power: modify return of queue_stopped Miao Li
2021-10-21 16:48               ` Ferruh Yigit
2021-10-22  8:20                 ` Li, Miao
2021-10-22  9:01                   ` Ferruh Yigit
2021-10-22  9:05                     ` Li, Miao
2021-10-22 11:54                 ` David Hunt
2021-10-18 14:16             ` [dpdk-dev] [PATCH v7 5/5] examples/l3fwd-power: support virtio/vhost Miao Li
2021-10-19  4:39               ` Xia, Chenbo
2021-10-22 11:50                 ` David Hunt
2021-10-21 16:58               ` Ferruh Yigit
2021-10-21 12:35             ` [dpdk-dev] [PATCH v7 0/5] Implement rte_power_monitor API in virtio/vhost PMD Maxime Coquelin
2021-10-25 14:47             ` [dpdk-dev] [PATCH v8 0/5] Support power monitor " Miao Li
2021-10-25  7:06               ` Xia, Chenbo
2021-10-28  8:03                 ` Maxime Coquelin
2021-10-25 14:47               ` [dpdk-dev] [PATCH v8 1/5] net/virtio: support power monitor Miao Li
2021-10-25 14:47               ` [dpdk-dev] [PATCH v8 2/5] vhost: add power monitor support API Miao Li
2021-10-25 14:47               ` [dpdk-dev] [PATCH v8 3/5] net/vhost: support power monitor Miao Li
2021-10-25 14:47               ` [dpdk-dev] [PATCH v8 4/5] power: modify return of queue_stopped Miao Li
2021-10-25 14:47               ` [dpdk-dev] [PATCH v8 5/5] examples/l3fwd-power: support virtio/vhost Miao Li
2021-10-29 19:09                 ` Ferruh Yigit
2021-10-29 10:34               ` [dpdk-dev] [PATCH v8 0/5] Support power monitor in virtio/vhost PMD Maxime Coquelin

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=20210910130548.127017-3-miao.li@intel.com \
    --to=miao.li@intel.com \
    --cc=chenbo.xia@intel.com \
    --cc=dev@dpdk.org \
    --cc=maxime.coquelin@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).