All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Xia, Chenbo" <chenbo.xia@intel.com>
To: Maxime Coquelin <maxime.coquelin@redhat.com>,
	"dev@dpdk.org" <dev@dpdk.org>,
	"olivier.matz@6wind.com" <olivier.matz@6wind.com>,
	"amorenoz@redhat.com" <amorenoz@redhat.com>,
	"david.marchand@redhat.com" <david.marchand@redhat.com>
Subject: Re: [dpdk-dev] [PATCH v2 29/44] net/virtio: add Virtio-user memory tables ops
Date: Fri, 22 Jan 2021 07:34:30 +0000	[thread overview]
Message-ID: <MN2PR11MB4063E695B81BCFE4498DBEAE9CA00@MN2PR11MB4063.namprd11.prod.outlook.com> (raw)
In-Reply-To: <20210119212507.1043636-30-maxime.coquelin@redhat.com>

Hi Maxime,

> -----Original Message-----
> From: Maxime Coquelin <maxime.coquelin@redhat.com>
> Sent: Wednesday, January 20, 2021 5:25 AM
> To: dev@dpdk.org; Xia, Chenbo <chenbo.xia@intel.com>; olivier.matz@6wind.com;
> amorenoz@redhat.com; david.marchand@redhat.com
> Cc: Maxime Coquelin <maxime.coquelin@redhat.com>
> Subject: [PATCH v2 29/44] net/virtio: add Virtio-user memory tables ops
> 
> This patch implements a dedicated callback for
> preparing and sending memory table to the backends.
> 
> Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
> ---
>  drivers/net/virtio/virtio_user/vhost.h        |  1 +
>  drivers/net/virtio/virtio_user/vhost_kernel.c | 60 ++++++-------
>  drivers/net/virtio/virtio_user/vhost_user.c   | 86 ++++++++++++++-----
>  drivers/net/virtio/virtio_user/vhost_vdpa.c   |  8 +-
>  .../net/virtio/virtio_user/virtio_user_dev.c  |  4 +-
>  5 files changed, 101 insertions(+), 58 deletions(-)
> 
> diff --git a/drivers/net/virtio/virtio_user/vhost.h
> b/drivers/net/virtio/virtio_user/vhost.h
> index d805526130..463801f563 100644
> --- a/drivers/net/virtio/virtio_user/vhost.h
> +++ b/drivers/net/virtio/virtio_user/vhost.h
> @@ -114,6 +114,7 @@ struct virtio_user_backend_ops {
>  	int (*set_features)(struct virtio_user_dev *dev, uint64_t features);
>  	int (*get_protocol_features)(struct virtio_user_dev *dev, uint64_t
> *features);
>  	int (*set_protocol_features)(struct virtio_user_dev *dev, uint64_t
> features);
> +	int (*set_memory_table)(struct virtio_user_dev *dev);
>  	int (*send_request)(struct virtio_user_dev *dev,
>  			    enum vhost_user_request req,
>  			    void *arg);
> diff --git a/drivers/net/virtio/virtio_user/vhost_kernel.c
> b/drivers/net/virtio/virtio_user/vhost_kernel.c
> index f44df8ef1f..2d30f572b6 100644
> --- a/drivers/net/virtio/virtio_user/vhost_kernel.c
> +++ b/drivers/net/virtio/virtio_user/vhost_kernel.c
> @@ -148,17 +148,6 @@ vhost_kernel_set_features(struct virtio_user_dev *dev,
> uint64_t features)
>  	return vhost_kernel_ioctl(dev->vhostfds[0], VHOST_SET_FEATURES,
> &features);
>  }
> 
> -static uint64_t vhost_req_user_to_kernel[] = {
> -	[VHOST_USER_RESET_OWNER] = VHOST_RESET_OWNER,
> -	[VHOST_USER_SET_VRING_CALL] = VHOST_SET_VRING_CALL,
> -	[VHOST_USER_SET_VRING_NUM] = VHOST_SET_VRING_NUM,
> -	[VHOST_USER_SET_VRING_BASE] = VHOST_SET_VRING_BASE,
> -	[VHOST_USER_GET_VRING_BASE] = VHOST_GET_VRING_BASE,
> -	[VHOST_USER_SET_VRING_ADDR] = VHOST_SET_VRING_ADDR,
> -	[VHOST_USER_SET_VRING_KICK] = VHOST_SET_VRING_KICK,
> -	[VHOST_USER_SET_MEM_TABLE] = VHOST_SET_MEM_TABLE,
> -};
> -
>  static int
>  add_memseg_list(const struct rte_memseg_list *msl, void *arg)
>  {
> @@ -193,16 +182,17 @@ add_memseg_list(const struct rte_memseg_list *msl, void
> *arg)
>   * have much more memory regions. Below function will treat each
>   * contiguous memory space reserved by DPDK as one region.
>   */
> -static struct vhost_memory_kernel *
> -prepare_vhost_memory_kernel(void)
> +static int
> +vhost_kernel_set_memory_table(struct virtio_user_dev *dev)
>  {
>  	struct vhost_memory_kernel *vm;
> +	int ret;
> 
>  	vm = malloc(sizeof(struct vhost_memory_kernel) +
>  			max_regions *
>  			sizeof(struct vhost_memory_region));
>  	if (!vm)
> -		return NULL;
> +		goto err;
> 
>  	vm->nregions = 0;
>  	vm->padding = 0;
> @@ -211,14 +201,34 @@ prepare_vhost_memory_kernel(void)
>  	 * The memory lock has already been taken by memory subsystem
>  	 * or virtio_user_start_device().
>  	 */
> -	if (rte_memseg_list_walk_thread_unsafe(add_memseg_list, vm) < 0) {
> -		free(vm);
> -		return NULL;
> -	}
> +	ret = rte_memseg_list_walk_thread_unsafe(add_memseg_list, vm);
> +	if (ret < 0)
> +		goto err_free;
> +
> +	ret = vhost_kernel_ioctl(dev->vhostfds[0], VHOST_SET_MEM_TABLE, vm);
> +	if (ret < 0)
> +		goto err_free;
> 
> -	return vm;
> +	free(vm);
> +
> +	return 0;
> +err_free:
> +	free(vm);
> +err:
> +	PMD_DRV_LOG(ERR, "Failed to set memory table");
> +	return -1;
>  }
> 
> +static uint64_t vhost_req_user_to_kernel[] = {
> +	[VHOST_USER_RESET_OWNER] = VHOST_RESET_OWNER,
> +	[VHOST_USER_SET_VRING_CALL] = VHOST_SET_VRING_CALL,
> +	[VHOST_USER_SET_VRING_NUM] = VHOST_SET_VRING_NUM,
> +	[VHOST_USER_SET_VRING_BASE] = VHOST_SET_VRING_BASE,
> +	[VHOST_USER_GET_VRING_BASE] = VHOST_GET_VRING_BASE,
> +	[VHOST_USER_SET_VRING_ADDR] = VHOST_SET_VRING_ADDR,
> +	[VHOST_USER_SET_VRING_KICK] = VHOST_SET_VRING_KICK,
> +};
> +
>  static int
>  vhost_kernel_send_request(struct virtio_user_dev *dev,
>  		   enum vhost_user_request req,
> @@ -227,7 +237,6 @@ vhost_kernel_send_request(struct virtio_user_dev *dev,
>  	int ret = -1;
>  	unsigned int i;
>  	uint64_t req_kernel;
> -	struct vhost_memory_kernel *vm = NULL;
>  	int vhostfd;
>  	unsigned int queue_sel;
> 
> @@ -235,13 +244,6 @@ vhost_kernel_send_request(struct virtio_user_dev *dev,
> 
>  	req_kernel = vhost_req_user_to_kernel[req];
> 
> -	if (req_kernel == VHOST_SET_MEM_TABLE) {
> -		vm = prepare_vhost_memory_kernel();
> -		if (!vm)
> -			return -1;
> -		arg = (void *)vm;
> -	}
> -
>  	switch (req_kernel) {
>  	case VHOST_SET_VRING_NUM:
>  	case VHOST_SET_VRING_ADDR:
> @@ -271,9 +273,6 @@ vhost_kernel_send_request(struct virtio_user_dev *dev,
>  		ret = ioctl(vhostfd, req_kernel, arg);
>  	}
> 
> -	if (vm)
> -		free(vm);
> -
>  	if (ret < 0)
>  		PMD_DRV_LOG(ERR, "%s failed: %s",
>  			    vhost_msg_strings[req], strerror(errno));
> @@ -403,6 +402,7 @@ struct virtio_user_backend_ops virtio_ops_kernel = {
>  	.set_owner = vhost_kernel_set_owner,
>  	.get_features = vhost_kernel_get_features,
>  	.set_features = vhost_kernel_set_features,
> +	.set_memory_table = vhost_kernel_set_memory_table,
>  	.send_request = vhost_kernel_send_request,
>  	.enable_qp = vhost_kernel_enable_queue_pair
>  };
> diff --git a/drivers/net/virtio/virtio_user/vhost_user.c
> b/drivers/net/virtio/virtio_user/vhost_user.c
> index 4877574f72..94533e31ce 100644
> --- a/drivers/net/virtio/virtio_user/vhost_user.c
> +++ b/drivers/net/virtio/virtio_user/vhost_user.c
> @@ -81,6 +81,9 @@ vhost_user_write(int fd, struct vhost_user_msg *msg, int
> *fds, int fd_num)
>  		r = sendmsg(fd, &msgh, 0);
>  	} while (r < 0 && errno == EINTR);
> 
> +	if (r < 0)
> +		PMD_DRV_LOG(ERR, "Failed to send msg: %s", strerror(errno));
> +
>  	return r;
>  }
> 
> @@ -125,6 +128,39 @@ vhost_user_read(int fd, struct vhost_user_msg *msg)
>  	return -1;
>  }
> 
> +static int
> +vhost_user_check_reply_ack(struct virtio_user_dev *dev, struct vhost_user_msg
> *msg)
> +{
> +	enum vhost_user_request req = msg->request;
> +	int ret;
> +
> +	if (!(msg->flags & VHOST_USER_NEED_REPLY_MASK))
> +		return 0;
> +
> +	ret = vhost_user_read(dev->vhostfd, msg);
> +	if (ret < 0) {
> +		PMD_DRV_LOG(ERR, "Failed to read reply-ack");
> +		return -1;
> +	}
> +
> +	if (req != msg->request) {
> +		PMD_DRV_LOG(ERR, "Unexpected reply-ack request type (%d)", msg-
> >request);
> +		return -1;
> +	}
> +
> +	if (msg->size != sizeof(msg->payload.u64)) {
> +		PMD_DRV_LOG(ERR, "Unexpected reply-ack payload size (%d)", msg-
> >size);

Better to use '%u'?

> +		return -1;
> +	}
> +
> +	if (msg->payload.u64) {
> +		PMD_DRV_LOG(ERR, "Slave replied NACK to request type %d", msg-
> >request);

Replace '%d' with '(%d)' to align with the above style? :P

Thanks,
Chenbo

> +		return -1;
> +	}
> +
> +	return 0;
> +}
> +
>  static int
>  vhost_user_set_owner(struct virtio_user_dev *dev)
>  {
> @@ -338,25 +374,47 @@ update_memory_region(const struct rte_memseg_list *msl
> __rte_unused,
>  }
> 
>  static int
> -prepare_vhost_memory_user(struct vhost_user_msg *msg, int fds[])
> +vhost_user_set_memory_table(struct virtio_user_dev *dev)
>  {
>  	struct walk_arg wa;
> +	int fds[VHOST_MEMORY_MAX_NREGIONS];
> +	int ret, fd_num;
> +	struct vhost_user_msg msg = {
> +		.request = VHOST_USER_SET_MEM_TABLE,
> +		.flags = VHOST_USER_VERSION,
> +	};
> +
> +	if (dev->protocol_features & (1ULL << VHOST_USER_PROTOCOL_F_REPLY_ACK))
> +		msg.flags |= VHOST_USER_NEED_REPLY_MASK;
> 
>  	wa.region_nr = 0;
> -	wa.vm = &msg->payload.memory;
> +	wa.vm = &msg.payload.memory;
>  	wa.fds = fds;
> 
>  	/*
>  	 * The memory lock has already been taken by memory subsystem
>  	 * or virtio_user_start_device().
>  	 */
> -	if (rte_memseg_walk_thread_unsafe(update_memory_region, &wa) < 0)
> -		return -1;
> +	ret = rte_memseg_walk_thread_unsafe(update_memory_region, &wa);
> +	if (ret < 0)
> +		goto err;
> 
> -	msg->payload.memory.nregions = wa.region_nr;
> -	msg->payload.memory.padding = 0;
> +	fd_num = wa.region_nr;
> +	msg.payload.memory.nregions = wa.region_nr;
> +	msg.payload.memory.padding = 0;
> 
> -	return 0;
> +	msg.size = sizeof(msg.payload.memory.nregions);
> +	msg.size += sizeof(msg.payload.memory.padding);
> +	msg.size += fd_num * sizeof(struct vhost_memory_region);
> +
> +	ret = vhost_user_write(dev->vhostfd, &msg, fds, fd_num);
> +	if (ret < 0)
> +		goto err;
> +
> +	return vhost_user_check_reply_ack(dev, &msg);
> +err:
> +	PMD_DRV_LOG(ERR, "Failed to set memory table");
> +	return -1;
>  }
> 
>  static struct vhost_user_msg m;
> @@ -369,7 +427,6 @@ const char * const vhost_msg_strings[] = {
>  	[VHOST_USER_GET_VRING_BASE] = "VHOST_GET_VRING_BASE",
>  	[VHOST_USER_SET_VRING_ADDR] = "VHOST_SET_VRING_ADDR",
>  	[VHOST_USER_SET_VRING_KICK] = "VHOST_SET_VRING_KICK",
> -	[VHOST_USER_SET_MEM_TABLE] = "VHOST_SET_MEM_TABLE",
>  	[VHOST_USER_SET_VRING_ENABLE] = "VHOST_SET_VRING_ENABLE",
>  	[VHOST_USER_SET_STATUS] = "VHOST_SET_STATUS",
>  	[VHOST_USER_GET_STATUS] = "VHOST_GET_STATUS",
> @@ -434,18 +491,6 @@ vhost_user_sock(struct virtio_user_dev *dev,
>  	case VHOST_USER_RESET_OWNER:
>  		break;
> 
> -	case VHOST_USER_SET_MEM_TABLE:
> -		if (prepare_vhost_memory_user(&msg, fds) < 0)
> -			return -1;
> -		fd_num = msg.payload.memory.nregions;
> -		msg.size = sizeof(m.payload.memory.nregions);
> -		msg.size += sizeof(m.payload.memory.padding);
> -		msg.size += fd_num * sizeof(struct vhost_memory_region);
> -
> -		if (has_reply_ack)
> -			msg.flags |= VHOST_USER_NEED_REPLY_MASK;
> -		break;
> -
>  	case VHOST_USER_SET_LOG_FD:
>  		fds[fd_num++] = *((int *)arg);
>  		break;
> @@ -644,6 +689,7 @@ struct virtio_user_backend_ops virtio_ops_user = {
>  	.set_features = vhost_user_set_features,
>  	.get_protocol_features = vhost_user_get_protocol_features,
>  	.set_protocol_features = vhost_user_set_protocol_features,
> +	.set_memory_table = vhost_user_set_memory_table,
>  	.send_request = vhost_user_sock,
>  	.enable_qp = vhost_user_enable_queue_pair
>  };
> diff --git a/drivers/net/virtio/virtio_user/vhost_vdpa.c
> b/drivers/net/virtio/virtio_user/vhost_vdpa.c
> index f627afbcfc..bd7daebf0c 100644
> --- a/drivers/net/virtio/virtio_user/vhost_vdpa.c
> +++ b/drivers/net/virtio/virtio_user/vhost_vdpa.c
> @@ -19,7 +19,6 @@
>  #define VHOST_SET_FEATURES _IOW(VHOST_VIRTIO, 0x00, __u64)
>  #define VHOST_SET_OWNER _IO(VHOST_VIRTIO, 0x01)
>  #define VHOST_RESET_OWNER _IO(VHOST_VIRTIO, 0x02)
> -#define VHOST_SET_MEM_TABLE _IOW(VHOST_VIRTIO, 0x03, void *)
>  #define VHOST_SET_LOG_BASE _IOW(VHOST_VIRTIO, 0x04, __u64)
>  #define VHOST_SET_LOG_FD _IOW(VHOST_VIRTIO, 0x07, int)
>  #define VHOST_SET_VRING_NUM _IOW(VHOST_VIRTIO, 0x10, struct vhost_vring_state)
> @@ -46,7 +45,6 @@ static uint64_t vhost_req_user_to_vdpa[] = {
>  	[VHOST_USER_GET_VRING_BASE] = VHOST_GET_VRING_BASE,
>  	[VHOST_USER_SET_VRING_ADDR] = VHOST_SET_VRING_ADDR,
>  	[VHOST_USER_SET_VRING_KICK] = VHOST_SET_VRING_KICK,
> -	[VHOST_USER_SET_MEM_TABLE] = VHOST_SET_MEM_TABLE,
>  	[VHOST_USER_SET_STATUS] = VHOST_VDPA_SET_STATUS,
>  	[VHOST_USER_GET_STATUS] = VHOST_VDPA_GET_STATUS,
>  	[VHOST_USER_SET_VRING_ENABLE] = VHOST_VDPA_SET_VRING_ENABLE,
> @@ -319,7 +317,7 @@ vhost_vdpa_map(const struct rte_memseg_list *msl, const
> struct rte_memseg *ms,
>  }
> 
>  static int
> -vhost_vdpa_dma_map_all(struct virtio_user_dev *dev)
> +vhost_vdpa_set_memory_table(struct virtio_user_dev *dev)
>  {
>  	int ret;
> 
> @@ -376,9 +374,6 @@ vhost_vdpa_send_request(struct virtio_user_dev *dev,
> 
>  	req_vdpa = vhost_req_user_to_vdpa[req];
> 
> -	if (req_vdpa == VHOST_SET_MEM_TABLE)
> -		return vhost_vdpa_dma_map_all(dev);
> -
>  	switch (req_vdpa) {
>  	case VHOST_SET_VRING_NUM:
>  	case VHOST_SET_VRING_ADDR:
> @@ -461,6 +456,7 @@ struct virtio_user_backend_ops virtio_ops_vdpa = {
>  	.set_features = vhost_vdpa_set_features,
>  	.get_protocol_features = vhost_vdpa_get_backend_features,
>  	.set_protocol_features = vhost_vdpa_set_backend_features,
> +	.set_memory_table = vhost_vdpa_set_memory_table,
>  	.send_request = vhost_vdpa_send_request,
>  	.enable_qp = vhost_vdpa_enable_queue_pair,
>  	.dma_map = vhost_vdpa_dma_map_batch,
> diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.c
> b/drivers/net/virtio/virtio_user/virtio_user_dev.c
> index 45417bbc5d..cb8f8a872c 100644
> --- a/drivers/net/virtio/virtio_user/virtio_user_dev.c
> +++ b/drivers/net/virtio/virtio_user/virtio_user_dev.c
> @@ -177,7 +177,7 @@ virtio_user_start_device(struct virtio_user_dev *dev)
>  		goto error;
> 
>  	/* Step 2: share memory regions */
> -	ret = dev->ops->send_request(dev, VHOST_USER_SET_MEM_TABLE, NULL);
> +	ret = dev->ops->set_memory_table(dev);
>  	if (ret < 0)
>  		goto error;
> 
> @@ -352,7 +352,7 @@ virtio_user_mem_event_cb(enum rte_mem_event type
> __rte_unused,
>  		dev->ops->enable_qp(dev, i, 0);
> 
>  	/* Step 2: update memory regions */
> -	dev->ops->send_request(dev, VHOST_USER_SET_MEM_TABLE, NULL);
> +	dev->ops->set_memory_table(dev);
> 
>  	/* Step 3: resume the active queues */
>  	for (i = 0; i < dev->queue_pairs; i++)
> --
> 2.29.2


  reply	other threads:[~2021-01-22  7:34 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-19 21:24 [dpdk-dev] [PATCH v2 00/44] net/virtio: Virtio PMD rework Maxime Coquelin
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 01/44] bus/vdev: add helper to get vdev from eth dev Maxime Coquelin
2021-01-20  0:56   ` Thomas Monjalon
2021-01-25 10:53     ` Maxime Coquelin
2021-01-25 11:04       ` Thomas Monjalon
2021-01-21  8:58   ` Xia, Chenbo
2021-01-25 14:51     ` Maxime Coquelin
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 02/44] bus/vdev: add driver IOVA VA mode requirement Maxime Coquelin
2021-01-20 15:32   ` David Marchand
2021-01-20 17:47     ` Maxime Coquelin
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 03/44] net/virtio: fix getting old status on reconnect Maxime Coquelin
2021-01-21  7:12   ` Xia, Chenbo
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 04/44] net/virtio: introduce Virtio bus type Maxime Coquelin
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 05/44] net/virtio: refactor virtio-user device Maxime Coquelin
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 06/44] net/virtio: introduce PCI device metadata Maxime Coquelin
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 07/44] net/virtio: move PCI device init in dedicated file Maxime Coquelin
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 08/44] net/virtio: move PCI specific dev init to PCI ethdev init Maxime Coquelin
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 09/44] net/virtio: move MSIX detection to PCI ethdev Maxime Coquelin
2021-01-21  7:12   ` Xia, Chenbo
2021-01-25 12:41     ` Maxime Coquelin
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 10/44] net/virtio: force IOVA as VA mode for Virtio-user Maxime Coquelin
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 11/44] net/virtio: store PCI type in Virtio device metadata Maxime Coquelin
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 12/44] net/virtio: add callback for device closing Maxime Coquelin
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 13/44] net/virtio: validate features at bus level Maxime Coquelin
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 14/44] net/virtio: remove bus type enum Maxime Coquelin
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 15/44] net/virtio: move PCI-specific fields to PCI device Maxime Coquelin
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 16/44] net/virtio: pack virtio HW struct Maxime Coquelin
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 17/44] net/virtio: move legacy IO to Virtio PCI Maxime Coquelin
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 18/44] net/virtio: introduce generic virtio header Maxime Coquelin
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 19/44] net/virtio: move features definition to generic header Maxime Coquelin
2021-01-21  6:47   ` Xia, Chenbo
2021-01-25 12:35     ` Maxime Coquelin
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 20/44] net/virtio: move virtqueue defines in " Maxime Coquelin
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 21/44] net/virtio: move config definitions to " Maxime Coquelin
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 22/44] net/virtio: make interrupt handling more generic Maxime Coquelin
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 23/44] net/virtio: move vring alignment to generic header Maxime Coquelin
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 24/44] net/virtio: remove last PCI refs in non-PCI code Maxime Coquelin
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 25/44] net/virtio: make Vhost-user req sender consistent Maxime Coquelin
2021-01-21  8:50   ` Xia, Chenbo
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 26/44] net/virtio: add Virtio-user ops to set owner Maxime Coquelin
2021-01-22  3:27   ` Xia, Chenbo
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 27/44] net/virtio: add Virtio-user features ops Maxime Coquelin
2021-01-22  7:25   ` Xia, Chenbo
2021-01-25 14:53     ` Maxime Coquelin
2021-01-22  8:46   ` Xia, Chenbo
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 28/44] net/virtio: add Virtio-user protocol " Maxime Coquelin
2021-01-22  7:27   ` Xia, Chenbo
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 29/44] net/virtio: add Virtio-user memory tables ops Maxime Coquelin
2021-01-22  7:34   ` Xia, Chenbo [this message]
2021-01-25 14:56     ` Maxime Coquelin
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 30/44] net/virtio: add Virtio-user vring setting ops Maxime Coquelin
2021-01-22  7:49   ` Xia, Chenbo
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 31/44] net/virtio: add Virtio-user vring file ops Maxime Coquelin
2021-01-22  8:01   ` Xia, Chenbo
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 32/44] net/virtio: add Virtio-user vring address ops Maxime Coquelin
2021-01-22  8:02   ` Xia, Chenbo
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 33/44] net/virtio: add Virtio-user status ops Maxime Coquelin
2021-01-22  8:02   ` Xia, Chenbo
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 34/44] net/virtio: remove useless request ops Maxime Coquelin
2021-01-22  8:10   ` Xia, Chenbo
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 35/44] net/virtio: improve Virtio-user errors handling Maxime Coquelin
2021-01-22  8:10   ` Xia, Chenbo
2021-01-19 21:24 ` [dpdk-dev] [PATCH v2 36/44] net/virtio: move Vhost-user reqs to Vhost-user backend Maxime Coquelin
2021-01-21  8:56   ` Xia, Chenbo
2021-01-25 14:50     ` Maxime Coquelin
2021-01-19 21:25 ` [dpdk-dev] [PATCH v2 37/44] net/virtio: make server mode blocking Maxime Coquelin
2021-01-22  8:19   ` Xia, Chenbo
2021-01-19 21:25 ` [dpdk-dev] [PATCH v2 38/44] net/virtio: move protocol features to Vhost-user Maxime Coquelin
2021-01-22  8:20   ` Xia, Chenbo
2021-01-19 21:25 ` [dpdk-dev] [PATCH v2 39/44] net/virtio: introduce backend data Maxime Coquelin
2021-01-22  8:26   ` Xia, Chenbo
2021-01-19 21:25 ` [dpdk-dev] [PATCH v2 40/44] net/virtio: move Vhost-user specifics to its backend Maxime Coquelin
2021-01-22  8:49   ` Xia, Chenbo
2021-01-19 21:25 ` [dpdk-dev] [PATCH v2 41/44] net/virtio: move Vhost-kernel data " Maxime Coquelin
2021-01-22  8:55   ` Xia, Chenbo
2021-01-25 14:59     ` Maxime Coquelin
2021-01-19 21:25 ` [dpdk-dev] [PATCH v2 42/44] net/virtio: move Vhost-vDPA " Maxime Coquelin
2021-01-22  9:06   ` Xia, Chenbo
2021-01-25 15:02     ` Maxime Coquelin
2021-01-19 21:25 ` [dpdk-dev] [PATCH v2 43/44] net/virtio: improve Vhost-user error logging Maxime Coquelin
2021-01-22  9:11   ` Xia, Chenbo
2021-01-25 15:04     ` Maxime Coquelin
2021-01-26  6:10       ` Xia, Chenbo
2021-01-19 21:25 ` [dpdk-dev] [PATCH v2 44/44] net/virtio: handle Virtio-user setup failure properly Maxime Coquelin
2021-01-22  9:24   ` Xia, Chenbo
2021-01-25 16:16     ` 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=MN2PR11MB4063E695B81BCFE4498DBEAE9CA00@MN2PR11MB4063.namprd11.prod.outlook.com \
    --to=chenbo.xia@intel.com \
    --cc=amorenoz@redhat.com \
    --cc=david.marchand@redhat.com \
    --cc=dev@dpdk.org \
    --cc=maxime.coquelin@redhat.com \
    --cc=olivier.matz@6wind.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.