DPDK patches and discussions
 help / color / mirror / Atom feed
From: Maxime Coquelin <maxime.coquelin@redhat.com>
To: dev@dpdk.org, chenbo.xia@intel.com, david.marchand@redhat.com,
	mkp@redhat.com, fbl@redhat.com, jasowang@redhat.com,
	cunming.liang@intel.com, xieyongji@bytedance.com,
	echaudro@redhat.com, eperezma@redhat.com, amorenoz@redhat.com,
	lulu@redhat.com
Cc: Maxime Coquelin <maxime.coquelin@redhat.com>
Subject: [PATCH v2 15/28] vhost: add API to set max queue pairs
Date: Thu, 25 May 2023 18:15:37 +0200	[thread overview]
Message-ID: <20230525161551.70002-16-maxime.coquelin@redhat.com> (raw)
In-Reply-To: <20230525161551.70002-1-maxime.coquelin@redhat.com>

This patch introduces a new rte_vhost_driver_set_max_queues
API as preliminary work for multiqueue support with VDUSE.

Indeed, with VDUSE we need to pre-allocate the vrings at
device creation time, so we need such API not to allocate
the 128 queue pairs supported by the Vhost library.

Calling the API is optional, 128 queue pairs remaining the
default.

Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
---
 doc/guides/prog_guide/vhost_lib.rst    |  4 +++
 doc/guides/rel_notes/release_23_07.rst |  5 ++++
 lib/vhost/rte_vhost.h                  | 17 ++++++++++++
 lib/vhost/socket.c                     | 36 ++++++++++++++++++++++++--
 lib/vhost/version.map                  |  3 +++
 5 files changed, 63 insertions(+), 2 deletions(-)

diff --git a/doc/guides/prog_guide/vhost_lib.rst b/doc/guides/prog_guide/vhost_lib.rst
index e8bb8c9b7b..cd4b109139 100644
--- a/doc/guides/prog_guide/vhost_lib.rst
+++ b/doc/guides/prog_guide/vhost_lib.rst
@@ -334,6 +334,10 @@ The following is an overview of some key Vhost API functions:
   Clean DMA vChannel finished to use. After this function is called,
   the specified DMA vChannel should no longer be used by the Vhost library.
 
+* ``rte_vhost_driver_set_max_queue_num(path, max_queue_pairs)``
+
+  Set the maximum number of queue pairs supported by the device.
+
 Vhost-user Implementations
 --------------------------
 
diff --git a/doc/guides/rel_notes/release_23_07.rst b/doc/guides/rel_notes/release_23_07.rst
index a9b1293689..fa889a5ee7 100644
--- a/doc/guides/rel_notes/release_23_07.rst
+++ b/doc/guides/rel_notes/release_23_07.rst
@@ -55,6 +55,11 @@ New Features
      Also, make sure to start the actual text at the margin.
      =======================================================
 
+* **Added Vhost API to set maximum queue pairs supported
+
+  Introduced ``rte_vhost_driver_set_max_queue_num()`` to be able to limit the
+  maximum number of supported queue pairs, required for VDUSE support.
+
 
 Removed Items
 -------------
diff --git a/lib/vhost/rte_vhost.h b/lib/vhost/rte_vhost.h
index 58a5d4be92..44cbfcb469 100644
--- a/lib/vhost/rte_vhost.h
+++ b/lib/vhost/rte_vhost.h
@@ -588,6 +588,23 @@ rte_vhost_driver_get_protocol_features(const char *path,
 int
 rte_vhost_driver_get_queue_num(const char *path, uint32_t *queue_num);
 
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change, or be removed, without prior notice.
+ *
+ * Set the maximum number of queue pairs supported by the device.
+ *
+ * @param path
+ *  The vhost-user socket file path
+ * @param max_queue_pairs
+ *  The maximum number of queue pairs
+ * @return
+ *  0 on success, -1 on failure
+ */
+__rte_experimental
+int
+rte_vhost_driver_set_max_queue_num(const char *path, uint32_t max_queue_pairs);
+
 /**
  * Get the feature bits after negotiation
  *
diff --git a/lib/vhost/socket.c b/lib/vhost/socket.c
index ba54263824..e95c3ffeac 100644
--- a/lib/vhost/socket.c
+++ b/lib/vhost/socket.c
@@ -56,6 +56,8 @@ struct vhost_user_socket {
 
 	uint64_t protocol_features;
 
+	uint32_t max_queue_pairs;
+
 	struct rte_vdpa_device *vdpa_dev;
 
 	struct rte_vhost_device_ops const *notify_ops;
@@ -821,7 +823,7 @@ rte_vhost_driver_get_queue_num(const char *path, uint32_t *queue_num)
 
 	vdpa_dev = vsocket->vdpa_dev;
 	if (!vdpa_dev) {
-		*queue_num = VHOST_MAX_QUEUE_PAIRS;
+		*queue_num = vsocket->max_queue_pairs;
 		goto unlock_exit;
 	}
 
@@ -831,7 +833,36 @@ rte_vhost_driver_get_queue_num(const char *path, uint32_t *queue_num)
 		goto unlock_exit;
 	}
 
-	*queue_num = RTE_MIN((uint32_t)VHOST_MAX_QUEUE_PAIRS, vdpa_queue_num);
+	*queue_num = RTE_MIN(vsocket->max_queue_pairs, vdpa_queue_num);
+
+unlock_exit:
+	pthread_mutex_unlock(&vhost_user.mutex);
+	return ret;
+}
+
+int
+rte_vhost_driver_set_max_queue_num(const char *path, uint32_t max_queue_pairs)
+{
+	struct vhost_user_socket *vsocket;
+	int ret = 0;
+
+	VHOST_LOG_CONFIG(path, INFO, "Setting max queue pairs to %u\n", max_queue_pairs);
+
+	if (max_queue_pairs > VHOST_MAX_QUEUE_PAIRS) {
+		VHOST_LOG_CONFIG(path, ERR, "Library only supports up to %u queue pairs\n",
+				VHOST_MAX_QUEUE_PAIRS);
+		return -1;
+	}
+
+	pthread_mutex_lock(&vhost_user.mutex);
+	vsocket = find_vhost_user_socket(path);
+	if (!vsocket) {
+		VHOST_LOG_CONFIG(path, ERR, "socket file is not registered yet.\n");
+		ret = -1;
+		goto unlock_exit;
+	}
+
+	vsocket->max_queue_pairs = max_queue_pairs;
 
 unlock_exit:
 	pthread_mutex_unlock(&vhost_user.mutex);
@@ -890,6 +921,7 @@ rte_vhost_driver_register(const char *path, uint64_t flags)
 		goto out_free;
 	}
 	vsocket->vdpa_dev = NULL;
+	vsocket->max_queue_pairs = VHOST_MAX_QUEUE_PAIRS;
 	vsocket->extbuf = flags & RTE_VHOST_USER_EXTBUF_SUPPORT;
 	vsocket->linearbuf = flags & RTE_VHOST_USER_LINEARBUF_SUPPORT;
 	vsocket->async_copy = flags & RTE_VHOST_USER_ASYNC_COPY;
diff --git a/lib/vhost/version.map b/lib/vhost/version.map
index d322a4a888..dffb126aa8 100644
--- a/lib/vhost/version.map
+++ b/lib/vhost/version.map
@@ -98,6 +98,9 @@ EXPERIMENTAL {
 	# added in 22.11
 	rte_vhost_async_dma_unconfigure;
 	rte_vhost_vring_call_nonblock;
+
+	# added in 23.07
+	rte_vhost_driver_set_max_queue_num;
 };
 
 INTERNAL {
-- 
2.40.1


  parent reply	other threads:[~2023-05-25 16:17 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-25 16:15 [PATCH v2 00/28] Add VDUSE support to Vhost library Maxime Coquelin
2023-05-25 16:15 ` [PATCH v2 01/28] vhost: fix missing guest notif stat increment Maxime Coquelin
2023-05-25 16:15 ` [PATCH v2 02/28] vhost: fix invalid call FD handling Maxime Coquelin
2023-05-25 16:15 ` [PATCH v2 03/28] vhost: fix IOTLB entries overlap check with previous entry Maxime Coquelin
2023-05-25 16:15 ` [PATCH v2 04/28] vhost: add helper of IOTLB entries coredump Maxime Coquelin
2023-05-25 16:15 ` [PATCH v2 05/28] vhost: add helper for IOTLB entries shared page check Maxime Coquelin
2023-05-25 16:15 ` [PATCH v2 06/28] vhost: don't dump unneeded pages with IOTLB Maxime Coquelin
2023-05-25 16:15 ` [PATCH v2 07/28] vhost: change to single IOTLB cache per device Maxime Coquelin
2023-05-25 16:15 ` [PATCH v2 08/28] vhost: add offset field to IOTLB entries Maxime Coquelin
2023-05-25 16:15 ` [PATCH v2 09/28] vhost: add page size info to IOTLB entry Maxime Coquelin
2023-05-25 16:15 ` [PATCH v2 10/28] vhost: retry translating IOVA after IOTLB miss Maxime Coquelin
2023-05-25 16:15 ` [PATCH v2 11/28] vhost: introduce backend ops Maxime Coquelin
2023-05-25 16:15 ` [PATCH v2 12/28] vhost: add IOTLB cache entry removal callback Maxime Coquelin
2023-05-25 16:15 ` [PATCH v2 13/28] vhost: add helper for IOTLB misses Maxime Coquelin
2023-05-25 16:15 ` [PATCH v2 14/28] vhost: add helper for interrupt injection Maxime Coquelin
2023-05-25 16:15 ` Maxime Coquelin [this message]
2023-05-25 16:15 ` [PATCH v2 16/28] net/vhost: use API to set max queue pairs Maxime Coquelin
2023-05-25 16:15 ` [PATCH v2 17/28] vhost: add control virtqueue support Maxime Coquelin
2023-05-25 16:15 ` [PATCH v2 18/28] vhost: add VDUSE device creation and destruction Maxime Coquelin
2023-05-25 16:15 ` [PATCH v2 19/28] vhost: add VDUSE callback for IOTLB miss Maxime Coquelin
2023-05-25 16:15 ` [PATCH v2 20/28] vhost: add VDUSE callback for IOTLB entry removal Maxime Coquelin
2023-05-25 16:15 ` [PATCH v2 21/28] vhost: add VDUSE callback for IRQ injection Maxime Coquelin
2023-05-25 16:15 ` [PATCH v2 22/28] vhost: add VDUSE events handler Maxime Coquelin
2023-05-25 16:15 ` [PATCH v2 23/28] vhost: add support for virtqueue state get event Maxime Coquelin
2023-05-25 16:15 ` [PATCH v2 24/28] vhost: add support for VDUSE status set event Maxime Coquelin
2023-05-25 16:15 ` [PATCH v2 25/28] vhost: add support for VDUSE IOTLB update event Maxime Coquelin
2023-05-25 16:15 ` [PATCH v2 26/28] vhost: add VDUSE device startup Maxime Coquelin
2023-05-25 16:15 ` [PATCH v2 27/28] vhost: add multiqueue support to VDUSE Maxime Coquelin
2023-05-25 16:15 ` [PATCH 28/28] vhost: Add VDUSE device stop Maxime Coquelin
2023-05-25 16:23   ` Maxime Coquelin
2023-05-25 16:15 ` [PATCH v2 28/28] vhost: add " 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=20230525161551.70002-16-maxime.coquelin@redhat.com \
    --to=maxime.coquelin@redhat.com \
    --cc=amorenoz@redhat.com \
    --cc=chenbo.xia@intel.com \
    --cc=cunming.liang@intel.com \
    --cc=david.marchand@redhat.com \
    --cc=dev@dpdk.org \
    --cc=echaudro@redhat.com \
    --cc=eperezma@redhat.com \
    --cc=fbl@redhat.com \
    --cc=jasowang@redhat.com \
    --cc=lulu@redhat.com \
    --cc=mkp@redhat.com \
    --cc=xieyongji@bytedance.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).