All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tetsuya Mukawa <mukawa@igel.co.jp>
To: Stephen Hemminger <stephen@networkplumber.org>
Cc: dev@dpdk.org, ann.zhuangyanying@huawei.com
Subject: Re: [PATCH 3/3] vhost: Add VHOST PMD
Date: Tue, 10 Nov 2015 12:27:28 +0900	[thread overview]
Message-ID: <56416420.90601@igel.co.jp> (raw)
In-Reply-To: <20151109142505.2bdf56e2@xeon-e3>

On 2015/11/10 7:25, Stephen Hemminger wrote:
> On Tue, 27 Oct 2015 15:12:55 +0900
> Tetsuya Mukawa <mukawa@igel.co.jp> wrote:
>
>> The patch introduces a new PMD. This PMD is implemented as thin wrapper
>> of librte_vhost. It means librte_vhost is also needed to compile the PMD.
>> The vhost messages will be handled only when a port is started. So start
>> a port first, then invoke QEMU.
>>
>> The PMD has 2 parameters.
>>  - iface:  The parameter is used to specify a path to connect to a
>>            virtio-net device.
>>  - queues: The parameter is used to specify the number of the queues
>>            virtio-net device has.
>>            (Default: 1)
>>
>> Here is an example.
>> $ ./testpmd -c f -n 4 --vdev 'eth_vhost0,iface=/tmp/sock0,queues=1' -- -i
>>
>> To connect above testpmd, here is qemu command example.
>>
>> $ qemu-system-x86_64 \
>>         <snip>
>>         -chardev socket,id=chr0,path=/tmp/sock0 \
>>         -netdev vhost-user,id=net0,chardev=chr0,vhostforce,queues=1 \
>>         -device virtio-net-pci,netdev=net0
>>
>> Signed-off-by: Tetsuya Mukawa <mukawa@igel.co.jp>
> Brocade developed a much simpler vhost PMD, without all the atomics and
> locking.
>

Hi Stephen,

With your PMD, it seems we need to call some vhost library APIs before
start sending and receiving.
It means we need to manage virtio-net device connections in DPDK
application anyway.

Also, I guess all PMDs should provide feature to be replaced by one of
other PMD without heavy modification for DPDK application.
This is because I tried to manage virtio-net device connections in vhost
PMD.

Thanks,
Tetsuya

> /*-
>  *   BSD LICENSE
>  *
>  *   Copyright (C) Brocade Communications Systems, Inc.
>  *   All rights reserved.
>  *
>  *   Redistribution and use in source and binary forms, with or without
>  *   modification, are permitted provided that the following conditions
>  *   are met:
>  *
>  *     * Redistributions of source code must retain the above copyright
>  *       notice, this list of conditions and the following disclaimer.
>  *     * Redistributions in binary form must reproduce the above copyright
>  *       notice, this list of conditions and the following disclaimer in
>  *       the documentation and/or other materials provided with the
>  *       distribution.
>  *     * Neither the name of Brocade Communications Systems, Inc.
>  *       nor the names of its contributors may be used to endorse
>  *       or promote products derived from this software without specific
>  *       prior written permission.
>  *
>  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
>  *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
>  *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
>  *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
>  *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
>  *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
>  *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
>  *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
>  *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
>  *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
>  *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>  */
>
> #include <rte_mbuf.h>
> #include <rte_ether.h>
> #include <rte_ethdev.h>
> #include <rte_malloc.h>
> #include <rte_memcpy.h>
> #include <rte_dev.h>
> #include <rte_log.h>
>
> #include "../librte_vhost/rte_virtio_net.h"
> #include "../librte_vhost/virtio-net.h"
>
> struct pmd_internals;
>
> struct vhost_queue {
> 	struct pmd_internals *internals;
>
> 	struct rte_mempool *mb_pool;
>
> 	uint64_t	pkts;
> 	uint64_t	bytes;
> };
>
> struct pmd_internals {
> 	struct virtio_net *dev;
> 	unsigned numa_node;
> 	struct eth_driver *eth_drv;
>
> 	unsigned nb_rx_queues;
> 	unsigned nb_tx_queues;
>
> 	struct vhost_queue rx_queues[1];
> 	struct vhost_queue tx_queues[1];
> 	uint8_t port_id;
> };
>
>
> static const char *drivername = "Vhost PMD";
>
> static struct rte_eth_link pmd_link = {
> 	.link_speed = 10000,
> 	.link_duplex = ETH_LINK_FULL_DUPLEX,
> 	.link_status = 0
> };
>
> static uint16_t
> eth_vhost_rx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs)
> {
> 	int ret, i;
> 	struct vhost_queue *h = q;
>
> 	ret = rte_vhost_dequeue_burst(h->internals->dev,
> 		VIRTIO_TXQ, h->mb_pool, bufs, nb_bufs);
>
> 	for (i = 0; i < ret ; i++) {
> 		struct rte_mbuf *m = bufs[i];
>
> 		m->port = h->internals->port_id;
> 		++h->pkts;
> 		h->bytes += rte_pktmbuf_pkt_len(m);
> 	}
> 	return ret;
> }
>
> static uint16_t
> eth_vhost_tx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs)
> {
> 	int ret, i;
> 	struct vhost_queue *h = q;
>
> 	ret = rte_vhost_enqueue_burst(h->internals->dev,
> 		VIRTIO_RXQ, bufs, nb_bufs);
>
> 	for (i = 0; i < ret; i++) {
> 		struct rte_mbuf *m = bufs[i];
>
> 		++h->pkts;
> 		h->bytes += rte_pktmbuf_pkt_len(m);
> 		rte_pktmbuf_free(m);
> 	}
>
> 	return ret;
> }
>
> static int
> eth_dev_configure(struct rte_eth_dev *dev __rte_unused)
> {
> 	return 0;
> }
>
> static int
> eth_dev_start(struct rte_eth_dev *dev)
> {
> 	struct pmd_internals *internals = dev->data->dev_private;
>
> 	dev->data->dev_link.link_status = 1;
> 	RTE_LOG(INFO, PMD, "vhost(%s): link up\n", internals->dev->ifname);
> 	return 0;
> }
>
> static void
> eth_dev_stop(struct rte_eth_dev *dev)
> {
> 	struct pmd_internals *internals = dev->data->dev_private;
>
> 	dev->data->dev_link.link_status = 0;
> 	RTE_LOG(INFO, PMD, "vhost(%s): link down\n", internals->dev->ifname);
> }
>
> static int
> eth_rx_queue_setup(struct rte_eth_dev *dev, uint16_t rx_queue_id,
> 		uint16_t nb_rx_desc __rte_unused,
> 		unsigned int socket_id __rte_unused,
> 		const struct rte_eth_rxconf *rx_conf __rte_unused,
> 		struct rte_mempool *mb_pool)
> {
> 	struct pmd_internals *internals = dev->data->dev_private;
>
> 	internals->rx_queues[rx_queue_id].mb_pool = mb_pool;
> 	dev->data->rx_queues[rx_queue_id] =
> 		&internals->rx_queues[rx_queue_id];
> 	internals->rx_queues[rx_queue_id].internals = internals;
>
> 	return 0;
> }
>
> static int
> eth_tx_queue_setup(struct rte_eth_dev *dev, uint16_t tx_queue_id,
> 		uint16_t nb_tx_desc __rte_unused,
> 		unsigned int socket_id __rte_unused,
> 		const struct rte_eth_txconf *tx_conf __rte_unused)
> {
> 	struct pmd_internals *internals = dev->data->dev_private;
>
> 	dev->data->tx_queues[tx_queue_id] =
> 		&internals->tx_queues[tx_queue_id];
> 	internals->tx_queues[tx_queue_id].internals = internals;
>
> 	return 0;
> }
>
>
> static void
> eth_dev_info(struct rte_eth_dev *dev,
> 		struct rte_eth_dev_info *dev_info)
> {
> 	struct pmd_internals *internals = dev->data->dev_private;
>
> 	dev_info->driver_name = drivername;
> 	dev_info->max_mac_addrs = 1;
> 	dev_info->max_rx_pktlen = -1;
> 	dev_info->max_rx_queues = (uint16_t)internals->nb_rx_queues;
> 	dev_info->max_tx_queues = (uint16_t)internals->nb_tx_queues;
> 	dev_info->min_rx_bufsize = 0;
> 	dev_info->pci_dev = NULL;
> }
>
> static void
> eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
> {
> 	const struct pmd_internals *internal = dev->data->dev_private;
> 	unsigned i;
>
> 	for (i = 0; i < internal->nb_rx_queues; i++) {
> 		const struct vhost_queue *h = &internal->rx_queues[i];
>
> 		stats->ipackets += h->pkts;
> 		stats->ibytes += h->bytes;
>
> 		if (i < RTE_ETHDEV_QUEUE_STAT_CNTRS) {
> 			stats->q_ibytes[i] = h->bytes;
> 			stats->q_ipackets[i] = h->pkts;
> 		}
> 	}
>
> 	for (i = 0; i < internal->nb_tx_queues; i++) {
> 		const struct vhost_queue *h = &internal->tx_queues[i];
>
> 		stats->opackets += h->pkts;
> 		stats->obytes += h->bytes;
>
> 		if (i < RTE_ETHDEV_QUEUE_STAT_CNTRS) {
> 			stats->q_obytes[i] = h->bytes;
> 			stats->q_opackets[i] = h->pkts;
> 		}
> 	}
> }
>
> static void
> eth_stats_reset(struct rte_eth_dev *dev)
> {
> 	unsigned i;
> 	struct pmd_internals *internal = dev->data->dev_private;
>
> 	for (i = 0; i < internal->nb_rx_queues; i++) {
> 		internal->rx_queues[i].pkts = 0;
> 		internal->rx_queues[i].bytes = 0;
> 	}
>
> 	for (i = 0; i < internal->nb_tx_queues; i++) {
> 		internal->tx_queues[i].pkts = 0;
> 		internal->tx_queues[i].bytes = 0;
> 	}
> }
>
> static struct eth_driver rte_vhost_pmd = {
> 	.pci_drv = {
> 		.name = "rte_vhost_pmd",
> 		.drv_flags = RTE_PCI_DRV_DETACHABLE,
> 	},
> };
>
> static void
> eth_queue_release(void *q __rte_unused)
> {
> }
>
> static int
> eth_link_update(struct rte_eth_dev *dev __rte_unused,
> 		int wait_to_complete __rte_unused)
> {
> 	return 0;
> }
>
> static struct eth_dev_ops eth_ops = {
> 	.dev_start = eth_dev_start,
> 	.dev_stop = eth_dev_stop,
> 	.dev_configure = eth_dev_configure,
> 	.dev_infos_get = eth_dev_info,
> 	.rx_queue_setup = eth_rx_queue_setup,
> 	.tx_queue_setup = eth_tx_queue_setup,
> 	.rx_queue_release = eth_queue_release,
> 	.tx_queue_release = eth_queue_release,
> 	.link_update = eth_link_update,
> 	.stats_get = eth_stats_get,
> 	.stats_reset = eth_stats_reset,
> };
>
> static int
> eth_dev_vhost_create(const char *name, const unsigned numa_node)
> {
> 	const unsigned nb_rx_queues = 1;
> 	const unsigned nb_tx_queues = 1;
> 	struct rte_eth_dev_data *data = NULL;
> 	struct rte_pci_device *pci_dev = NULL;
> 	struct pmd_internals *internals = NULL;
> 	struct rte_eth_dev *eth_dev = NULL;
> 	struct virtio_net *vhost_dev = NULL;
> 	struct eth_driver *eth_drv = NULL;
> 	struct rte_pci_id *id_table = NULL;
> 	struct ether_addr *eth_addr = NULL;
>
> 	if (name == NULL)
> 		return -EINVAL;
>
> 	vhost_dev = get_device_by_name(name);
>
> 	if (vhost_dev == NULL)
> 		return -EINVAL;
>
> 	RTE_LOG(INFO, PMD, "Creating vhost ethdev on numa socket %u\n",
> 			numa_node);
>
> 	data = rte_zmalloc_socket(name, sizeof(*data), 0, numa_node);
> 	if (data == NULL)
> 		goto error;
>
> 	pci_dev = rte_zmalloc_socket(name, sizeof(*pci_dev), 0, numa_node);
> 	if (pci_dev == NULL)
> 		goto error;
>
> 	id_table = rte_zmalloc_socket(name, sizeof(*id_table), 0, numa_node);
> 	if (id_table == NULL)
> 		goto error;
>
> 	internals = rte_zmalloc_socket(name, sizeof(*internals), 0, numa_node);
> 	if (internals == NULL)
> 		goto error;
>
> 	eth_addr = rte_zmalloc_socket(name, sizeof(*eth_addr), 0, numa_node);
> 	if (internals == NULL)
> 		goto error;
>
> 	eth_dev = rte_eth_dev_allocate(name, RTE_ETH_DEV_VIRTUAL);
> 	if (eth_dev == NULL)
> 		goto error;
>
> 	eth_drv = rte_zmalloc_socket(name, sizeof(*eth_drv), 0, numa_node);
> 	if (eth_drv == NULL)
> 		goto error;
>
> 	internals->nb_rx_queues = nb_rx_queues;
> 	internals->nb_tx_queues = nb_tx_queues;
> 	internals->numa_node = numa_node;
> 	internals->dev = vhost_dev;
>
> 	internals->port_id = eth_dev->data->port_id;
>
> 	eth_drv->pci_drv.name = drivername;
> 	eth_drv->pci_drv.id_table = id_table;
> 	internals->eth_drv = eth_drv;
>
> 	pci_dev->numa_node = numa_node;
> 	pci_dev->driver = &eth_drv->pci_drv;
>
> 	data->dev_private = internals;
> 	data->port_id = eth_dev->data->port_id;
> 	data->nb_rx_queues = (uint16_t)nb_rx_queues;
> 	data->nb_tx_queues = (uint16_t)nb_tx_queues;
> 	data->dev_link = pmd_link;
> 	eth_random_addr(&eth_addr->addr_bytes[0]);
> 	data->mac_addrs = eth_addr;
> 	strncpy(data->name, eth_dev->data->name, strlen(eth_dev->data->name));
>
> 	eth_dev->data = data;
> 	eth_dev->dev_ops = &eth_ops;
> 	eth_dev->pci_dev = pci_dev;
> 	eth_dev->driver = &rte_vhost_pmd;
> 	eth_dev->rx_pkt_burst = eth_vhost_rx;
> 	eth_dev->tx_pkt_burst = eth_vhost_tx;
> 	TAILQ_INIT(&(eth_dev->link_intr_cbs));
>
> 	return 0;
>
> error:
> 	rte_free(data);
> 	rte_free(pci_dev);
> 	rte_free(id_table);
> 	rte_free(eth_drv);
> 	rte_free(eth_addr);
> 	rte_free(internals);
>
> 	return -1;
> }
>
> static int
> rte_pmd_vhost_devinit(const char *name,
> 		      const char *params __attribute__((unused)))
> {
> 	unsigned numa_node;
>
> 	if (name == NULL)
> 		return -EINVAL;
>
> 	RTE_LOG(DEBUG, PMD, "Initializing pmd_vhost for %s\n", name);
>
> 	numa_node = rte_socket_id();
>
> 	return eth_dev_vhost_create(name, numa_node);
> }
>
> static int
> rte_pmd_vhost_devuninit(const char *name)
> {
> 	struct rte_eth_dev *eth_dev = NULL;
> 	struct pmd_internals *internals = NULL;
>
> 	if (name == NULL)
> 		return -EINVAL;
>
> 	RTE_LOG(DEBUG, PMD, "Closing vhost ethdev on numa socket %u\n",
> 			rte_socket_id());
>
> 	/* reserve an ethdev entry */
> 	eth_dev = rte_eth_dev_allocated(name);
> 	if (eth_dev == NULL)
> 		return -1;
>
> 	internals = (struct pmd_internals *)eth_dev->data->dev_private;
> 	rte_free(internals->eth_drv->pci_drv.id_table);
> 	rte_free(internals->eth_drv);
> 	rte_free(eth_dev->data->dev_private);
> 	rte_free(eth_dev->data->mac_addrs);
> 	rte_free(eth_dev->data);
> 	rte_free(eth_dev->pci_dev);
>
> 	rte_eth_dev_release_port(eth_dev);
>
> 	return 0;
> }
>
> static struct rte_driver pmd_vhost_drv = {
> 	.name = "vhost",
> 	.type = PMD_VDEV,
> 	.init = rte_pmd_vhost_devinit,
> 	.uninit = rte_pmd_vhost_devuninit,
> };
>
> PMD_REGISTER_DRIVER(pmd_vhost_drv);

  reply	other threads:[~2015-11-10  3:27 UTC|newest]

Thread overview: 200+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-31  3:55 [RFC PATCH v2] Add VHOST PMD Tetsuya Mukawa
2015-08-31  3:55 ` [RFC PATCH v2] vhost: " Tetsuya Mukawa
2015-09-23 17:47   ` Loftus, Ciara
2015-10-16  8:40     ` Tetsuya Mukawa
2015-10-20 14:13       ` Loftus, Ciara
2015-10-21  4:30         ` Tetsuya Mukawa
2015-10-21 10:09           ` Bruce Richardson
2015-10-16 12:52   ` Bruce Richardson
2015-10-19  1:51     ` Tetsuya Mukawa
2015-10-19  9:32       ` Loftus, Ciara
2015-10-19  9:45         ` Bruce Richardson
2015-10-19 10:50           ` Tetsuya Mukawa
2015-10-19 13:26             ` Panu Matilainen
2015-10-19 13:27               ` Richardson, Bruce
2015-10-21  4:35                 ` Tetsuya Mukawa
2015-10-21  6:25                   ` Panu Matilainen
2015-10-21 10:22                     ` Bruce Richardson
2015-10-22  9:50                       ` Tetsuya Mukawa
2015-10-27 13:44                         ` Traynor, Kevin
2015-10-28  2:24                           ` Tetsuya Mukawa
2015-10-22  9:45   ` [RFC PATCH v3 0/2] " Tetsuya Mukawa
2015-10-22  9:45     ` [RFC PATCH v3 1/2] vhost: Add callback and private data for vhost PMD Tetsuya Mukawa
2015-10-27  6:12       ` [PATCH 0/3] Add VHOST PMD Tetsuya Mukawa
2015-10-27  6:12         ` [PATCH 1/3] vhost: Fix wrong handling of virtqueue array index Tetsuya Mukawa
2015-10-27  6:29           ` Yuanhan Liu
2015-10-27  6:33             ` Yuanhan Liu
2015-10-27  6:47           ` Yuanhan Liu
2015-10-27  7:28             ` Tetsuya Mukawa
2015-10-27  7:34               ` Yuanhan Liu
2015-10-27  6:12         ` [PATCH 2/3] vhost: Add callback and private data for vhost PMD Tetsuya Mukawa
2015-10-30 17:49           ` Loftus, Ciara
2015-11-02  3:15             ` Tetsuya Mukawa
2015-10-27  6:12         ` [PATCH 3/3] vhost: Add VHOST PMD Tetsuya Mukawa
2015-11-02  3:58           ` [PATCH v2 0/2] " Tetsuya Mukawa
2015-11-02  3:58             ` [PATCH v2 1/2] vhost: Add callback and private data for vhost PMD Tetsuya Mukawa
2015-11-09  5:16               ` [PATCH v3 0/2] Add VHOST PMD Tetsuya Mukawa
2015-11-09  5:17                 ` [PATCH v3 1/2] vhost: Add callback and private data for vhost PMD Tetsuya Mukawa
2015-11-09 18:16                   ` Aaron Conole
2015-11-10  3:13                     ` Tetsuya Mukawa
2015-11-10  7:16                       ` Panu Matilainen
2015-11-10  9:48                         ` Tetsuya Mukawa
2015-11-10 10:05                           ` Panu Matilainen
2015-11-10 10:15                             ` Tetsuya Mukawa
2015-11-09  5:17                 ` [PATCH v3 2/2] vhost: Add VHOST PMD Tetsuya Mukawa
2015-11-09  6:21                   ` Yuanhan Liu
2015-11-09  6:27                     ` Tetsuya Mukawa
2015-11-09 22:22                   ` Stephen Hemminger
2015-11-10  3:14                     ` Tetsuya Mukawa
2015-11-12 12:52                   ` Wang, Zhihong
2015-11-13  3:09                     ` Tetsuya Mukawa
2015-11-13  3:50                       ` Wang, Zhihong
2015-11-13  4:03                   ` Rich Lane
2015-11-13  4:29                     ` Tetsuya Mukawa
2015-11-13  5:20                   ` [PATCH v4 0/2] " Tetsuya Mukawa
2015-11-13  5:20                     ` [PATCH v4 1/2] vhost: Add callback and private data for vhost PMD Tetsuya Mukawa
2015-11-17 13:29                       ` Yuanhan Liu
2015-11-19  2:03                         ` Tetsuya Mukawa
2015-11-19  2:18                           ` Yuanhan Liu
2015-11-19  3:13                             ` Tetsuya Mukawa
2015-11-19  3:33                               ` Yuanhan Liu
2015-11-19  5:14                                 ` Tetsuya Mukawa
2015-11-19  5:45                                   ` Yuanhan Liu
2015-11-19  5:58                                     ` Tetsuya Mukawa
2015-11-19  6:31                                       ` Yuanhan Liu
2015-11-19  6:37                                         ` Tetsuya Mukawa
2015-11-13  5:20                     ` [PATCH v4 2/2] vhost: Add VHOST PMD Tetsuya Mukawa
2015-11-16  1:57                       ` Wang, Zhihong
2015-11-20 11:43                       ` Yuanhan Liu
2015-11-24  2:48                         ` Tetsuya Mukawa
2015-11-24  3:40                           ` Yuanhan Liu
2015-11-24  3:44                             ` Tetsuya Mukawa
2015-11-21  0:15                       ` Rich Lane
2015-11-24  4:41                         ` Tetsuya Mukawa
2015-11-24  9:00                       ` [PATCH v5 0/3] " Tetsuya Mukawa
2015-11-24  9:00                         ` [PATCH v5 1/3] vhost: Add callback and private data for vhost PMD Tetsuya Mukawa
2015-12-17 11:42                           ` Yuanhan Liu
2015-12-18  3:15                             ` Tetsuya Mukawa
2015-12-18  3:36                               ` Tetsuya Mukawa
2015-12-18  4:15                               ` Yuanhan Liu
2015-12-18  4:28                                 ` Tetsuya Mukawa
2015-12-18 18:01                                   ` Rich Lane
2015-12-21  2:10                                     ` Tetsuya Mukawa
2015-12-22  4:36                                       ` Yuanhan Liu
2015-12-22  3:41                                     ` Yuanhan Liu
2015-12-22  4:47                                       ` Rich Lane
2015-12-22  5:47                                         ` Yuanhan Liu
2015-12-22  9:38                                           ` Rich Lane
2015-12-23  2:44                                             ` Yuanhan Liu
2015-12-23 22:00                                               ` Thomas Monjalon
2015-12-24  3:51                                                 ` Yuanhan Liu
2015-12-24  4:07                                                   ` Tetsuya Mukawa
2015-12-24  3:09                                         ` Tetsuya Mukawa
2015-12-24  3:54                                           ` Tetsuya Mukawa
2015-12-24  4:00                                           ` Yuanhan Liu
2015-12-24  4:23                                             ` Tetsuya Mukawa
2015-12-24  5:37                                           ` Rich Lane
2015-12-24  7:58                                             ` Tetsuya Mukawa
2015-12-28 21:59                                               ` Rich Lane
2016-01-06  3:56                                                 ` Tetsuya Mukawa
2016-01-06  7:38                                                   ` Yuanhan Liu
2015-12-18 10:03                                 ` Xie, Huawei
2015-12-21  2:10                                   ` Tetsuya Mukawa
2016-02-02 11:18                           ` [PATCH v6 0/2] Add VHOST PMD Tetsuya Mukawa
2016-02-02 19:52                             ` Rich Lane
2016-02-02 11:18                           ` [PATCH v6 1/2] ethdev: Add a new event type to notify a queue state changed event Tetsuya Mukawa
2016-02-02 11:18                           ` [PATCH v6 2/2] vhost: Add VHOST PMD Tetsuya Mukawa
2016-02-02 23:43                             ` Ferruh Yigit
2016-02-03  2:13                               ` Tetsuya Mukawa
2016-02-03  7:48                               ` Tetsuya Mukawa
2016-02-03  9:24                                 ` Ferruh Yigit
2016-02-03  9:35                                   ` Tetsuya Mukawa
2016-02-04  7:26                           ` [PATCH v7 0/2] " Tetsuya Mukawa
2016-02-04  7:26                           ` [PATCH v7 1/2] ethdev: Add a new event type to notify a queue state changed event Tetsuya Mukawa
2016-02-04  7:26                           ` [PATCH v7 2/2] vhost: Add VHOST PMD Tetsuya Mukawa
2016-02-04 11:17                             ` Ferruh Yigit
2016-02-05  6:28                               ` Tetsuya Mukawa
2016-02-05  6:35                                 ` Yuanhan Liu
2016-02-05  7:10                                   ` Tetsuya Mukawa
2016-02-08  9:42                                 ` Ferruh Yigit
2016-02-09  1:54                                   ` Tetsuya Mukawa
2016-02-05 11:28                             ` [PATCH v8 0/2] " Tetsuya Mukawa
2016-02-05 11:28                             ` [PATCH v8 1/2] ethdev: Add a new event type to notify a queue state changed event Tetsuya Mukawa
2016-02-06  4:57                               ` Yuanhan Liu
2016-02-05 11:28                             ` [PATCH v8 2/2] vhost: Add VHOST PMD Tetsuya Mukawa
2016-02-06  5:12                               ` Yuanhan Liu
2016-02-09  9:38                               ` [PATCH v9 0/2] " Tetsuya Mukawa
2016-02-24  2:45                                 ` Qiu, Michael
2016-02-24  5:09                                   ` Tetsuya Mukawa
2016-02-25  7:51                                     ` Qiu, Michael
2016-02-26  4:29                                       ` Tetsuya Mukawa
2016-02-26  8:35                                         ` Tetsuya Mukawa
2016-03-01  2:00                                           ` Qiu, Michael
2016-03-01  2:19                                             ` Tetsuya Mukawa
2016-03-02  2:24                                               ` Qiu, Michael
2016-03-04  1:12                                                 ` Tetsuya Mukawa
2016-02-09  9:38                               ` [PATCH v9 1/2] ethdev: Add a new event type to notify a queue state changed event Tetsuya Mukawa
2016-03-04  4:17                                 ` [PATCH v10 0/2] Add VHOST PMD Tetsuya Mukawa
2016-03-04  4:17                                 ` [PATCH v10 1/2] ethdev: Add a new event type to notify a queue state changed event Tetsuya Mukawa
2016-03-04  4:17                                 ` [PATCH v10 2/2] vhost: Add VHOST PMD Tetsuya Mukawa
2016-03-04  8:39                                   ` Yuanhan Liu
2016-03-04  9:58                                     ` Tetsuya Mukawa
2016-03-07  2:07                                   ` [PATCH v11 0/2] " Tetsuya Mukawa
2016-03-07  2:07                                   ` [PATCH v11 1/2] ethdev: Add a new event type to notify a queue state changed event Tetsuya Mukawa
2016-03-07  2:07                                   ` [PATCH v11 2/2] vhost: Add VHOST PMD Tetsuya Mukawa
2016-03-14 12:02                                     ` Bruce Richardson
2016-03-15  5:35                                       ` Tetsuya Mukawa
2016-03-15  8:31                                     ` [PATCH v12 0/2] " Tetsuya Mukawa
2016-03-15  8:31                                     ` [PATCH v12 1/2] ethdev: Add a new event type to notify a queue state changed event Tetsuya Mukawa
2016-03-18 13:54                                       ` Thomas Monjalon
2016-03-15  8:31                                     ` [PATCH v12 2/2] vhost: Add VHOST PMD Tetsuya Mukawa
2016-03-18 12:27                                       ` Bruce Richardson
2016-03-18 13:41                                         ` Tetsuya Mukawa
2016-03-18 13:52                                           ` Thomas Monjalon
2016-03-18 14:03                                             ` Tetsuya Mukawa
2016-03-18 14:13                                               ` Bruce Richardson
2016-03-18 14:21                                                 ` Tetsuya Mukawa
2016-03-21  5:41                                         ` Tetsuya Mukawa
2016-03-21  5:45                                       ` [PATCH v13 0/2] " Tetsuya Mukawa
2016-03-21 12:42                                         ` Bruce Richardson
2016-03-21  5:45                                       ` [PATCH v13 1/2] ethdev: Add a new event type to notify a queue state changed event Tetsuya Mukawa
2016-03-21  8:37                                         ` Thomas Monjalon
2016-03-21  9:24                                           ` Tetsuya Mukawa
2016-03-21 11:05                                             ` Bruce Richardson
2016-03-21 13:51                                               ` Tetsuya Mukawa
2016-03-21  5:45                                       ` [PATCH v13 2/2] vhost: Add VHOST PMD Tetsuya Mukawa
2016-03-21 15:40                                         ` Loftus, Ciara
2016-03-22  1:55                                           ` Tetsuya Mukawa
2016-03-22  2:50                                             ` Tetsuya Mukawa
2016-03-22 10:33                                               ` Loftus, Ciara
2016-02-09  9:38                               ` [PATCH v9 " Tetsuya Mukawa
2015-11-24  9:00                         ` [PATCH v5 2/3] " Tetsuya Mukawa
2015-12-18  7:45                           ` Yuanhan Liu
2015-12-18  9:25                             ` Tetsuya Mukawa
2015-11-24  9:00                         ` [PATCH v5 3/3] vhost: Add helper function to convert port id to virtio device pointer Tetsuya Mukawa
2015-12-17 11:47                           ` Yuanhan Liu
2015-12-18  3:15                             ` Tetsuya Mukawa
2015-12-18  4:19                               ` Yuanhan Liu
2015-12-08  1:12                         ` [PATCH v5 0/3] Add VHOST PMD Tetsuya Mukawa
2015-12-08  2:03                           ` Yuanhan Liu
2015-12-08  2:10                             ` Tetsuya Mukawa
2015-11-13  5:32                     ` [PATCH v4 0/2] " Yuanhan Liu
2015-11-13  5:37                       ` Tetsuya Mukawa
2015-11-13  6:50                       ` Tetsuya Mukawa
2015-11-17 13:26                         ` Yuanhan Liu
2015-11-19  1:20                           ` Tetsuya Mukawa
2015-11-09  5:42                 ` [PATCH v3 " Yuanhan Liu
2015-11-02  3:58             ` [PATCH v2 2/2] vhost: " Tetsuya Mukawa
2015-11-06  2:22               ` Yuanhan Liu
2015-11-06  3:54                 ` Tetsuya Mukawa
2015-11-05  2:17             ` [PATCH v2 0/2] " Tetsuya Mukawa
2015-11-09 22:25           ` [PATCH 3/3] vhost: " Stephen Hemminger
2015-11-10  3:27             ` Tetsuya Mukawa [this message]
2015-10-27  7:54         ` [PATCH 0/3] " Tetsuya Mukawa
2015-10-30 18:30           ` Thomas Monjalon
2015-11-02  3:15             ` Tetsuya Mukawa
2015-10-22  9:45     ` [RFC PATCH v3 2/2] vhost: " Tetsuya Mukawa
2015-10-22 12:49       ` Bruce Richardson
2015-10-23  3:48         ` Tetsuya Mukawa
2015-10-29 14:25       ` Xie, Huawei
2015-10-30  1:18         ` Tetsuya Mukawa

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=56416420.90601@igel.co.jp \
    --to=mukawa@igel.co.jp \
    --cc=ann.zhuangyanying@huawei.com \
    --cc=dev@dpdk.org \
    --cc=stephen@networkplumber.org \
    /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.