All of lore.kernel.org
 help / color / mirror / Atom feed
From: Fan Zhang <roy.fan.zhang@intel.com>
To: dev@dpdk.org
Cc: maxime.coquelin@redhat.com, jianjay.zhou@huawei.com
Subject: [PATCH v3 01/10] lib/librte_vhost: add external backend support
Date: Mon, 26 Mar 2018 10:51:05 +0100	[thread overview]
Message-ID: <20180326095114.11605-2-roy.fan.zhang@intel.com> (raw)
In-Reply-To: <20180326095114.11605-1-roy.fan.zhang@intel.com>

This patch adds external backend support to vhost library. The patch provides
new APIs for the external backend to register private data, plus pre and post
vhost-user message handlers.

Signed-off-by: Fan Zhang <roy.fan.zhang@intel.com>
---
 lib/librte_vhost/rte_vhost.h  | 45 ++++++++++++++++++++++++++++++++++++++++++-
 lib/librte_vhost/vhost.c      | 23 +++++++++++++++++++++-
 lib/librte_vhost/vhost.h      |  8 ++++++--
 lib/librte_vhost/vhost_user.c | 29 +++++++++++++++++++++++++---
 4 files changed, 98 insertions(+), 7 deletions(-)

diff --git a/lib/librte_vhost/rte_vhost.h b/lib/librte_vhost/rte_vhost.h
index d332069..591b731 100644
--- a/lib/librte_vhost/rte_vhost.h
+++ b/lib/librte_vhost/rte_vhost.h
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2010-2017 Intel Corporation
+ * Copyright(c) 2010-2018 Intel Corporation
  */
 
 #ifndef _RTE_VHOST_H_
@@ -88,6 +88,33 @@ struct vhost_device_ops {
 };
 
 /**
+ * function prototype for external virtio device to handler device specific
+ * vhost user messages
+ *
+ * @param extern_data
+ *  private data for external backend
+ * @param msg
+ *  Message pointer
+ * @param payload
+ *  Message payload
+ * @param require_reply
+ *  If the handler requires sending a reply, this varaible shall be written 1,
+ *  otherwise 0
+ * @return
+ *  0 on success, -1 on failure
+ */
+typedef int (*rte_vhost_msg_handler)(int vid, void *msg,
+		uint32_t *require_reply);
+
+/**
+ * pre and post vhost user message handlers
+ */
+struct rte_vhost_user_dev_extern_ops {
+	rte_vhost_msg_handler pre_vhost_user_msg_handler;
+	rte_vhost_msg_handler post_vhost_user_msg_handler;
+};
+
+/**
  * Convert guest physical address to host virtual address
  *
  * @param mem
@@ -434,6 +461,22 @@ int rte_vhost_vring_call(int vid, uint16_t vring_idx);
  */
 uint32_t rte_vhost_rx_queue_count(int vid, uint16_t qid);
 
+/**
+ * register external vhost backend
+ *
+ * @param vid
+ *  vhost device ID
+ * @param extern_data
+ *  private data for external backend
+ * @param ops
+ *  ops that process external vhost user messages
+ * @return
+ *  0 on success, -1 on failure
+ */
+int
+rte_vhost_user_register_extern_backend(int vid, void *extern_data,
+		struct rte_vhost_user_dev_extern_ops *ops);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/lib/librte_vhost/vhost.c b/lib/librte_vhost/vhost.c
index a407067..0932537 100644
--- a/lib/librte_vhost/vhost.c
+++ b/lib/librte_vhost/vhost.c
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2010-2016 Intel Corporation
+ * Copyright(c) 2010-2018 Intel Corporation
  */
 
 #include <linux/vhost.h>
@@ -627,3 +627,24 @@ rte_vhost_rx_queue_count(int vid, uint16_t qid)
 
 	return *((volatile uint16_t *)&vq->avail->idx) - vq->last_avail_idx;
 }
+
+int
+rte_vhost_user_register_extern_backend(int vid, void *extern_data,
+		struct rte_vhost_user_dev_extern_ops *ops)
+{
+	struct virtio_net *dev;
+
+	dev = get_device(vid);
+	if (dev == NULL)
+		return -1;
+
+	dev->extern_data = extern_data;
+	if (ops) {
+		dev->extern_ops.pre_vhost_user_msg_handler =
+				ops->pre_vhost_user_msg_handler;
+		dev->extern_ops.post_vhost_user_msg_handler =
+				ops->post_vhost_user_msg_handler;
+	}
+
+	return 0;
+}
diff --git a/lib/librte_vhost/vhost.h b/lib/librte_vhost/vhost.h
index d947bc9..6aaa46c 100644
--- a/lib/librte_vhost/vhost.h
+++ b/lib/librte_vhost/vhost.h
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2010-2014 Intel Corporation
+ * Copyright(c) 2010-2018 Intel Corporation
  */
 
 #ifndef _VHOST_NET_CDEV_H_
@@ -241,8 +241,12 @@ struct virtio_net {
 	struct guest_page       *guest_pages;
 
 	int			slave_req_fd;
-} __rte_cache_aligned;
 
+	/* private data for external virtio device */
+	void			*extern_data;
+	/* pre and post vhost user message handlers for externel backend */
+	struct rte_vhost_user_dev_extern_ops extern_ops;
+} __rte_cache_aligned;
 
 #define VHOST_LOG_PAGE	4096
 
diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c
index 90ed211..c064cb3 100644
--- a/lib/librte_vhost/vhost_user.c
+++ b/lib/librte_vhost/vhost_user.c
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2010-2016 Intel Corporation
+ * Copyright(c) 2010-2018 Intel Corporation
  */
 
 #include <stdint.h>
@@ -50,6 +50,8 @@ static const char *vhost_message_str[VHOST_USER_MAX] = {
 	[VHOST_USER_NET_SET_MTU]  = "VHOST_USER_NET_SET_MTU",
 	[VHOST_USER_SET_SLAVE_REQ_FD]  = "VHOST_USER_SET_SLAVE_REQ_FD",
 	[VHOST_USER_IOTLB_MSG]  = "VHOST_USER_IOTLB_MSG",
+	[VHOST_USER_CRYPTO_CREATE_SESS] = "VHOST_USER_CRYPTO_CREATE_SESS",
+	[VHOST_USER_CRYPTO_CLOSE_SESS] = "VHOST_USER_CRYPTO_CLOSE_SESS",
 };
 
 static uint64_t
@@ -1379,6 +1381,18 @@ vhost_user_msg_handler(int vid, int fd)
 
 	}
 
+	if (dev->extern_ops.pre_vhost_user_msg_handler) {
+		uint32_t need_reply;
+
+		ret = (*dev->extern_ops.pre_vhost_user_msg_handler)(dev->vid,
+				(void *)&msg, &need_reply);
+		if (ret < 0)
+			goto skip_to_reply;
+
+		if (need_reply)
+			send_vhost_reply(fd, &msg);
+	}
+
 	switch (msg.request.master) {
 	case VHOST_USER_GET_FEATURES:
 		msg.payload.u64 = vhost_user_get_features(dev);
@@ -1477,11 +1491,20 @@ vhost_user_msg_handler(int vid, int fd)
 		break;
 
 	default:
-		ret = -1;
-		break;
+		if (dev->extern_ops.post_vhost_user_msg_handler) {
+			uint32_t need_reply;
 
+			ret = (*dev->extern_ops.post_vhost_user_msg_handler)(
+					dev->vid, (void *)&msg, &need_reply);
+
+			if (need_reply)
+				send_vhost_reply(fd, &msg);
+		} else
+			ret = -1;
+		break;
 	}
 
+skip_to_reply:
 	if (unlock_required)
 		vhost_user_unlock_all_queue_pairs(dev);
 
-- 
2.7.4

  reply	other threads:[~2018-03-26  9:54 UTC|newest]

Thread overview: 70+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-26  9:51 [PATCH v3 00/10] lib/librte_vhost: introduce new vhost user crypto backend support Fan Zhang
2018-03-26  9:51 ` Fan Zhang [this message]
2018-03-29  2:11   ` [PATCH v3 01/10] lib/librte_vhost: add external " Tan, Jianfeng
2018-03-29  4:17     ` Liu, Changpeng
2018-03-26  9:51 ` [PATCH v3 02/10] lib/librte_vhost: add virtio-crypto user message structure Fan Zhang
2018-03-26  9:51 ` [PATCH v3 03/10] lib/librte_vhost: add session message handler Fan Zhang
2018-03-26  9:51 ` [PATCH v3 04/10] lib/librte_vhost: add request handler Fan Zhang
2018-03-26  9:51 ` [PATCH v3 05/10] lib/librte_vhost: add head file Fan Zhang
2018-03-26  9:51 ` [PATCH v3 06/10] lib/librte_vhost: add public function implementation Fan Zhang
2018-03-26  9:51 ` [PATCH v3 07/10] lib/librte_vhost: update version map Fan Zhang
2018-03-26  9:51 ` [PATCH v3 08/10] lib/librte_vhost: update makefile Fan Zhang
2018-03-26  9:51 ` [PATCH v3 09/10] examples/vhost_crypto: add vhost crypto sample application Fan Zhang
2018-03-26  9:51 ` [PATCH v3 10/10] doc: update prog guide and sample app guide Fan Zhang
2018-03-29 12:52 ` [PATCH v4 0/8] vhost: intdroduce vhost user crypto backend Fan Zhang
2018-03-29 12:52   ` [PATCH v4 1/8] lib/librte_vhost: add external backend support Fan Zhang
2018-03-29 13:47     ` Wodkowski, PawelX
2018-04-01 19:53       ` Zhang, Roy Fan
2018-04-03 13:44         ` Maxime Coquelin
2018-04-03 13:55           ` Zhang, Roy Fan
2018-04-03 14:42           ` Tan, Jianfeng
2018-04-03 14:48             ` Wodkowski, PawelX
2018-03-29 12:52   ` [PATCH v4 2/8] lib/librte_vhost: add virtio-crypto user message structure Fan Zhang
2018-03-29 12:52   ` [PATCH v4 3/8] lib/librte_vhost: add session message handler Fan Zhang
2018-03-29 15:02     ` Tan, Jianfeng
2018-04-03 15:09       ` Zhang, Roy Fan
2018-03-29 12:52   ` [PATCH v4 4/8] lib/librte_vhost: add request handler Fan Zhang
2018-03-29 12:52   ` [PATCH v4 5/8] lib/librte_vhost: add public function implementation Fan Zhang
2018-03-29 12:52   ` [PATCH v4 6/8] lib/librte_vhost: update makefile Fan Zhang
2018-03-29 12:52   ` [PATCH v4 7/8] examples/vhost_crypto: add vhost crypto sample application Fan Zhang
2018-03-29 12:52   ` [PATCH v4 8/8] doc: update for vhost crypto support Fan Zhang
2018-04-04 10:08   ` [PATCH v5 0/8] vhost: introduce vhost crypto backend Fan Zhang
2018-04-04 10:08     ` [PATCH v5 1/8] lib/librte_vhost: add external backend support Fan Zhang
2018-04-04 14:08       ` Maxime Coquelin
2018-04-04 10:08     ` [PATCH v5 2/8] lib/librte_vhost: add virtio-crypto user message structure Fan Zhang
2018-04-04 10:08     ` [PATCH v5 3/8] lib/librte_vhost: add session message handler Fan Zhang
2018-04-04 10:08     ` [PATCH v5 4/8] lib/librte_vhost: add request handler Fan Zhang
2018-04-04 10:08     ` [PATCH v5 5/8] lib/librte_vhost: add public function implementation Fan Zhang
2018-04-04 10:09     ` [PATCH v5 6/8] lib/librte_vhost: update makefile Fan Zhang
2018-04-04 10:09     ` [PATCH v5 7/8] examples/vhost_crypto: add vhost crypto sample application Fan Zhang
2018-04-04 10:09     ` [PATCH v5 8/8] doc: update for vhost crypto support Fan Zhang
2018-04-04 14:24     ` [PATCH v6 0/8] vhost: introduce vhost crypto backend Fan Zhang
2018-04-04 14:24       ` [PATCH v6 1/8] lib/librte_vhost: add vhost user message handlers Fan Zhang
2018-04-04 14:24       ` [PATCH v6 2/8] lib/librte_vhost: add virtio-crypto user message structure Fan Zhang
2018-04-04 14:24       ` [PATCH v6 3/8] lib/librte_vhost: add session message handler Fan Zhang
2018-04-04 14:25       ` [PATCH v6 4/8] lib/librte_vhost: add request handler Fan Zhang
2018-04-05  8:22         ` Maxime Coquelin
2018-04-04 14:25       ` [PATCH v6 5/8] lib/librte_vhost: add public function implementation Fan Zhang
2018-04-04 14:25       ` [PATCH v6 6/8] lib/librte_vhost: update makefile Fan Zhang
2018-04-04 14:25       ` [PATCH v6 7/8] examples/vhost_crypto: add vhost crypto sample application Fan Zhang
2018-04-04 14:25       ` [PATCH v6 8/8] doc: update for vhost crypto support Fan Zhang
2018-04-04 16:46         ` Zhoujian (jay)
2018-04-04 15:37       ` [PATCH v6 0/8] vhost: introduce vhost crypto backend Maxime Coquelin
2018-04-04 16:50         ` Zhoujian (jay)
2018-04-04 19:32           ` Maxime Coquelin
2018-04-05  8:26       ` Maxime Coquelin
2018-04-05  9:48         ` Maxime Coquelin
2018-04-05 16:01       ` [PATCH v7 " Fan Zhang
2018-04-05 16:01         ` [PATCH v7 1/8] lib/librte_vhost: add vhost user message handlers Fan Zhang
2018-04-05 16:01         ` [PATCH v7 2/8] lib/librte_vhost: add virtio-crypto user message structure Fan Zhang
2018-04-05 16:01         ` [PATCH v7 3/8] lib/librte_vhost: add session message handler Fan Zhang
2018-04-05 16:01         ` [PATCH v7 4/8] lib/librte_vhost: add request handler Fan Zhang
2018-04-05 16:01         ` [PATCH v7 5/8] lib/librte_vhost: add public function implementation Fan Zhang
2018-04-05 16:01         ` [PATCH v7 6/8] lib/librte_vhost: update makefile Fan Zhang
2018-04-05 16:01         ` [PATCH v7 7/8] examples/vhost_crypto: add vhost crypto sample application Fan Zhang
2018-04-15 14:34           ` Thomas Monjalon
2018-04-15 17:35             ` Thomas Monjalon
2018-04-16  7:27               ` Maxime Coquelin
2018-04-05 16:01         ` [PATCH v7 8/8] doc: update for vhost crypto support Fan Zhang
2018-04-05 19:28         ` [PATCH v7 0/8] vhost: introduce vhost crypto backend Maxime Coquelin
2018-04-05 19:40         ` 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=20180326095114.11605-2-roy.fan.zhang@intel.com \
    --to=roy.fan.zhang@intel.com \
    --cc=dev@dpdk.org \
    --cc=jianjay.zhou@huawei.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 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.