DPDK patches and discussions
 help / color / mirror / Atom feed
From: Noa Ezra <noae@mellanox.com>
To: maxime.coquelin@redhat.com
Cc: matan@mellanox.com, dev@dpdk.org, noae@mellanox.com
Subject: [dpdk-dev] [PATCH] net/vhost: add an API for get queue status
Date: Wed, 19 Jun 2019 06:14:58 +0000	[thread overview]
Message-ID: <1560924898-221025-1-git-send-email-noae@mellanox.com> (raw)

Add an API that returns queue status for requested queue in the port.
The queue's status can be changed before the user has signed for the
queue state event interrupt. In this case the user can't know the
current queue's status. This API returns the current status.

Signed-off-by: Noa Ezra <noae@mellanox.com>
Reviewed-by: Matan Azrad <matan@mellanox.com>
---
 drivers/net/vhost/rte_eth_vhost.c           | 47 +++++++++++++++++++++++++++++
 drivers/net/vhost/rte_eth_vhost.h           | 18 +++++++++++
 drivers/net/vhost/rte_pmd_vhost_version.map |  6 ++++
 3 files changed, 71 insertions(+)

diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c
index 9a54020..cad1e5c 100644
--- a/drivers/net/vhost/rte_eth_vhost.c
+++ b/drivers/net/vhost/rte_eth_vhost.c
@@ -855,6 +855,7 @@ struct vhost_xstats_name_off {
 	/* won't be NULL */
 	state = vring_states[eth_dev->data->port_id];
 	rte_spinlock_lock(&state->lock);
+
 	state->cur[vring] = enable;
 	state->max_vring = RTE_MAX(vring, state->max_vring);
 	rte_spinlock_unlock(&state->lock);
@@ -874,6 +875,52 @@ struct vhost_xstats_name_off {
 };
 
 int
+rte_eth_vhost_get_queue_status(uint16_t port_id, bool rx, uint16_t queue_id,
+		bool *queue_status)
+{
+	struct rte_vhost_vring_state *state;
+	struct internal_list *list;
+	struct rte_eth_dev *eth_dev;
+	int found = 0;
+	uint16_t nb_q = 0;
+
+	if (port_id >= RTE_MAX_ETHPORTS) {
+		VHOST_LOG(ERR, "Invalid port id\n");
+		return -1;
+	}
+	TAILQ_FOREACH(list, &internal_list, next) {
+		eth_dev = list->eth_dev;
+		if (eth_dev->data->port_id == port_id) {
+			nb_q = rx ? eth_dev->data->nb_rx_queues :
+					eth_dev->data->nb_tx_queues;
+			found = 1;
+			break;
+		}
+	}
+	if (!found) {
+		VHOST_LOG(ERR, "No device found for port id %u\n", port_id);
+		return -1;
+	}
+	if (queue_id >= nb_q) {
+		VHOST_LOG(ERR, "Invalid queue id\n");
+		return -1;
+	}
+
+	state = vring_states[port_id];
+	if (!state) {
+		VHOST_LOG(ERR, "Unused port\n");
+		return -1;
+	}
+
+	rte_spinlock_lock(&state->lock);
+	*queue_status = rx ? state->cur[queue_id * 2 + 1] :
+			state->cur[queue_id * 2];
+	rte_spinlock_unlock(&state->lock);
+
+	return 0;
+}
+
+int
 rte_eth_vhost_get_queue_event(uint16_t port_id,
 		struct rte_eth_vhost_queue_event *event)
 {
diff --git a/drivers/net/vhost/rte_eth_vhost.h b/drivers/net/vhost/rte_eth_vhost.h
index 0e68b9f..1e65c69 100644
--- a/drivers/net/vhost/rte_eth_vhost.h
+++ b/drivers/net/vhost/rte_eth_vhost.h
@@ -44,6 +44,24 @@ int rte_eth_vhost_get_queue_event(uint16_t port_id,
 		struct rte_eth_vhost_queue_event *event);
 
 /**
+ * Get queue status for specific queue in the port.
+ *
+ * @param[in] port_id
+ *  Port id.
+ * @param[in] rx
+ *  True is rx, False if tx
+ * @paran[in] queue_id
+ *  Queue_id
+ * @param[out] queue_status
+ *  Pointer to a boolean, True is enable, False if disable.
+ * @return
+ *  - On success, zero, queue_status is updated.
+ *  - On failure, a negative value, queue_status is not updated.
+ */
+int rte_eth_vhost_get_queue_status(uint16_t port_id, bool rx, uint16_t queue_id,
+		bool *queue_status);
+
+/**
  * Get the 'vid' value associated with the specified port.
  *
  * @return
diff --git a/drivers/net/vhost/rte_pmd_vhost_version.map b/drivers/net/vhost/rte_pmd_vhost_version.map
index 695db85..1eabfd2 100644
--- a/drivers/net/vhost/rte_pmd_vhost_version.map
+++ b/drivers/net/vhost/rte_pmd_vhost_version.map
@@ -11,3 +11,9 @@ DPDK_16.11 {
 
 	rte_eth_vhost_get_vid_from_port_id;
 };
+
+DPDK_19.08 {
+	global:
+
+	rte_eth_vhost_get_queue_status;
+};
-- 
1.8.3.1


             reply	other threads:[~2019-06-19  6:15 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-19  6:14 Noa Ezra [this message]
2019-06-24 11:08 ` [dpdk-dev] [Suspected-Phishing][PATCH] " Noa Ezra
2019-06-24 16:47   ` Maxime Coquelin
2019-06-25  7:00     ` Noa Ezra
2019-06-25  7:36       ` Maxime Coquelin
2019-06-25  7:49         ` Maxime Coquelin
2019-08-30  8:55   ` Maxime Coquelin
2019-09-12 10:04     ` Noa Ezra

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=1560924898-221025-1-git-send-email-noae@mellanox.com \
    --to=noae@mellanox.com \
    --cc=dev@dpdk.org \
    --cc=matan@mellanox.com \
    --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).