All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Tan, Jianfeng" <jianfeng.tan@intel.com>
To: Fan Zhang <roy.fan.zhang@intel.com>, dev@dpdk.org
Cc: maxime.coquelin@redhat.com, jianjay.zhou@huawei.com, "Liu,
	Changpeng" <changpeng.liu@intel.com>,
	"Wodkowski, PawelX" <pawelx.wodkowski@intel.com>,
	"Stojaczyk, DariuszX" <dariuszx.stojaczyk@intel.com>,
	"Kulasek, TomaszX" <tomaszx.kulasek@intel.com>
Subject: Re: [PATCH v3 01/10] lib/librte_vhost: add external backend support
Date: Thu, 29 Mar 2018 10:11:20 +0800	[thread overview]
Message-ID: <dc66d8a8-87af-4df9-e92b-42a99d5fbf7d@intel.com> (raw)
In-Reply-To: <20180326095114.11605-2-roy.fan.zhang@intel.com>


It's interesting that we add some new APIs to be used by the 
lib/librte_vhost/ itself. I can understand as we planned to not put 
vhost crypto into the lib.

As vhost crypto is not a real "external backend", we could ask opinion 
of a real external backend if these are really necessary. pre and post 
message handlers would be OK. But do we really need register private 
data from external backend? @Changpeng @Pawel @Dariusz @Tomasz.

BTW, external backend sounds a little exclusive :-), does extended 
backend sound better?


On 3/26/2018 5:51 PM, Fan Zhang wrote:
> 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

handler -> handle

> + * vhost user messages
> + *
> + * @param extern_data
> + *  private data for external backend

There is not such parameter in below function type.

> + * @param msg
> + *  Message pointer
> + * @param payload
> + *  Message payload

Ditto.

> + * @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 {

Considering the original vhost_device_ops, does vhost_user_extern_ops 
sound better?

> +	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);

Considering the original rte_vhost_driver_callback_register, does 
rte_vhost_message_handler_register sound better?

For extern_data, as mentioned in the head, let's discuss if it's 
necessary to be registered through API.

> +
>   #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;

Do we want to rename this internal structure to something like 
vhost_dev, if it contains not only information for net?

> +
> +	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",

Please leave this patch device agnostic. Put these into crypto related 
patches.

>   };
>   
>   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,

We have a variable vid, why use dev->vid?

> +				(void *)&msg, &need_reply);
> +		if (ret < 0)
> +			goto skip_to_reply;
> +
> +		if (need_reply)
> +			send_vhost_reply(fd, &msg);

Do we have case that, if device handles that, we don't need to common 
handle and post handle below? In other words, how to handle overlapping 
of message handle?

> +	}
> +
>   	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) {

Do we allow overlapping of common and post handle?

> +			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);
>   

  reply	other threads:[~2018-03-29  2:11 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 ` [PATCH v3 01/10] lib/librte_vhost: add external " Fan Zhang
2018-03-29  2:11   ` Tan, Jianfeng [this message]
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=dc66d8a8-87af-4df9-e92b-42a99d5fbf7d@intel.com \
    --to=jianfeng.tan@intel.com \
    --cc=changpeng.liu@intel.com \
    --cc=dariuszx.stojaczyk@intel.com \
    --cc=dev@dpdk.org \
    --cc=jianjay.zhou@huawei.com \
    --cc=maxime.coquelin@redhat.com \
    --cc=pawelx.wodkowski@intel.com \
    --cc=roy.fan.zhang@intel.com \
    --cc=tomaszx.kulasek@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.