DPDK patches and discussions
 help / color / mirror / Atom feed
From: Ouyang Changchun <changchun.ouyang@intel.com>
To: dev@dpdk.org
Subject: [dpdk-dev] [PATCH v4 17/26] virtio: Use port IO to get PCI resource.
Date: Mon,  9 Feb 2015 09:14:06 +0800	[thread overview]
Message-ID: <1423444455-11330-18-git-send-email-changchun.ouyang@intel.com> (raw)
In-Reply-To: <1423444455-11330-1-git-send-email-changchun.ouyang@intel.com>

Make virtio not require UIO for some security reasons, this is to match 6Wind's virtio-net-pmd.

Signed-off-by: Changchun Ouyang <changchun.ouyang@intel.com>
---
changes in v3:
  Remove macro RTE_EAL_PORT_IO;
  virtio pmd could support uio and ioports method to get the address;  

 lib/librte_pmd_virtio/Makefile        |   2 +
 lib/librte_pmd_virtio/virtio_ethdev.c | 136 +++++++++++++++++++++++++++++-----
 2 files changed, 121 insertions(+), 17 deletions(-)

diff --git a/lib/librte_pmd_virtio/Makefile b/lib/librte_pmd_virtio/Makefile
index 456095b..08fa27a 100644
--- a/lib/librte_pmd_virtio/Makefile
+++ b/lib/librte_pmd_virtio/Makefile
@@ -54,4 +54,6 @@ DEPDIRS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += lib/librte_eal lib/librte_ether
 DEPDIRS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += lib/librte_mempool lib/librte_mbuf
 DEPDIRS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += lib/librte_net lib/librte_malloc
 
+CFLAGS_virtio_ethdev.o += -Wno-cast-qual
+
 include $(RTE_SDK)/mk/rte.lib.mk
diff --git a/lib/librte_pmd_virtio/virtio_ethdev.c b/lib/librte_pmd_virtio/virtio_ethdev.c
index 8cd2d51..1163d42 100644
--- a/lib/librte_pmd_virtio/virtio_ethdev.c
+++ b/lib/librte_pmd_virtio/virtio_ethdev.c
@@ -38,6 +38,7 @@
 #include <unistd.h>
 #ifdef RTE_EXEC_ENV_LINUXAPP
 #include <dirent.h>
+#include <fcntl.h>
 #endif
 
 #include <rte_ethdev.h>
@@ -408,11 +409,13 @@ static void
 virtio_dev_close(struct rte_eth_dev *dev)
 {
 	struct virtio_hw *hw = dev->data->dev_private;
+	struct rte_pci_device *pci_dev = dev->pci_dev;
 
 	PMD_INIT_LOG(DEBUG, "virtio_dev_close");
 
 	/* reset the NIC */
-	vtpci_irq_config(hw, VIRTIO_MSI_NO_VECTOR);
+	if (pci_dev->driver->drv_flags & RTE_PCI_DRV_INTR_LSC)
+		vtpci_irq_config(hw, VIRTIO_MSI_NO_VECTOR);
 	vtpci_reset(hw);
 	virtio_dev_free_mbufs(dev);
 }
@@ -845,9 +848,9 @@ parse_sysfs_value(const char *filename, unsigned long *val)
 	return 0;
 }
 
-static int get_uio_dev(struct rte_pci_addr *loc, char *buf, unsigned int buflen)
+static int get_uio_dev(struct rte_pci_addr *loc, char *buf, unsigned int buflen,
+			unsigned int *uio_num)
 {
-	unsigned int uio_num;
 	struct dirent *e;
 	DIR *dir;
 	char dirname[PATH_MAX];
@@ -884,18 +887,18 @@ static int get_uio_dev(struct rte_pci_addr *loc, char *buf, unsigned int buflen)
 
 		/* first try uio%d */
 		errno = 0;
-		uio_num = strtoull(e->d_name + shortprefix_len, &endptr, 10);
+		*uio_num = strtoull(e->d_name + shortprefix_len, &endptr, 10);
 		if (errno == 0 && endptr != (e->d_name + shortprefix_len)) {
-			snprintf(buf, buflen, "%s/uio%u", dirname, uio_num);
+			snprintf(buf, buflen, "%s/uio%u", dirname, *uio_num);
 			break;
 		}
 
 		/* then try uio:uio%d */
 		errno = 0;
-		uio_num = strtoull(e->d_name + longprefix_len, &endptr, 10);
+		*uio_num = strtoull(e->d_name + longprefix_len, &endptr, 10);
 		if (errno == 0 && endptr != (e->d_name + longprefix_len)) {
 			snprintf(buf, buflen, "%s/uio:uio%u", dirname,
-				     uio_num);
+				     *uio_num);
 			break;
 		}
 	}
@@ -928,13 +931,16 @@ virtio_has_msix(const struct rte_pci_addr *loc)
 }
 
 /* Extract I/O port numbers from sysfs */
-static int virtio_resource_init(struct rte_pci_device *pci_dev)
+static int virtio_resource_init_by_uio(struct rte_pci_device *pci_dev)
 {
 	char dirname[PATH_MAX];
 	char filename[PATH_MAX];
 	unsigned long start, size;
+	unsigned int uio_num;
+	struct rte_pci_driver *pci_drv =
+			(struct rte_pci_driver *)pci_dev->driver;
 
-	if (get_uio_dev(&pci_dev->addr, dirname, sizeof(dirname)) < 0)
+	if (get_uio_dev(&pci_dev->addr, dirname, sizeof(dirname), &uio_num) < 0)
 		return -1;
 
 	/* get portio size */
@@ -959,8 +965,100 @@ static int virtio_resource_init(struct rte_pci_device *pci_dev)
 	PMD_INIT_LOG(DEBUG,
 		     "PCI Port IO found start=0x%lx with size=0x%lx",
 		     start, size);
+
+	/* save fd */
+	memset(dirname, 0, sizeof(dirname));
+	snprintf(dirname, sizeof(dirname), "/dev/uio%u", uio_num);
+	pci_dev->intr_handle.fd = open(dirname, O_RDWR);
+	if (pci_dev->intr_handle.fd < 0) {
+		PMD_INIT_LOG(ERR, "Cannot open %s: %s\n",
+			devname, strerror(errno));
+		return -1;
+	}
+
+	pci_dev->intr_handle.type = RTE_INTR_HANDLE_UIO;
+	pci_drv->drv_flags |= RTE_PCI_DRV_INTR_LSC;
+
 	return 0;
 }
+
+/* Extract port I/O numbers from proc/ioports */
+static int virtio_resource_init_by_ioports(struct rte_pci_device *pci_dev)
+{
+	uint16_t start, end;
+	int size;
+	FILE *fp;
+	char *line = NULL;
+	char pci_id[16];
+	int found = 0;
+	size_t linesz;
+	struct rte_pci_driver *pci_drv =
+			(struct rte_pci_driver *)pci_dev->driver;
+
+	snprintf(pci_id, sizeof(pci_id), PCI_PRI_FMT,
+		 pci_dev->addr.domain,
+		 pci_dev->addr.bus,
+		 pci_dev->addr.devid,
+		 pci_dev->addr.function);
+
+	fp = fopen("/proc/ioports", "r");
+	if (fp == NULL) {
+		PMD_INIT_LOG(ERR, "%s(): can't open ioports", __func__);
+		return -1;
+	}
+
+	while (getdelim(&line, &linesz, '\n', fp) > 0) {
+		char *ptr = line;
+		char *left;
+		int n;
+
+		n = strcspn(ptr, ":");
+		ptr[n] = 0;
+		left = &ptr[n+1];
+
+		while (*left && isspace(*left))
+			left++;
+
+		if (!strncmp(left, pci_id, strlen(pci_id))) {
+			found = 1;
+
+			while (*ptr && isspace(*ptr))
+				ptr++;
+
+			sscanf(ptr, "%04hx-%04hx", &start, &end);
+			size = end - start + 1;
+
+			break;
+		}
+	}
+
+	free(line);
+	fclose(fp);
+
+	if (!found)
+		return -1;
+
+	pci_dev->mem_resource[0].addr = (void *)(uintptr_t)(uint32_t)start;
+	pci_dev->mem_resource[0].len =  (uint64_t)size;
+	PMD_INIT_LOG(DEBUG,
+		"PCI Port IO found start=0x%x with size=0x%x",
+		start, size);
+
+	/* can't support lsc interrupt without uio */
+	pci_drv->drv_flags &= ~RTE_PCI_DRV_INTR_LSC;
+
+	return 0;
+}
+
+/* Extract I/O port numbers from sysfs */
+static int virtio_resource_init(struct rte_pci_device *pci_dev)
+{
+	if (virtio_resource_init_by_uio(pci_dev) == 0)
+		return 0;
+	else
+		return virtio_resource_init_by_ioports(pci_dev);
+}
+
 #else
 static int
 virtio_has_msix(const struct rte_pci_addr *loc __rte_unused)
@@ -969,7 +1067,7 @@ virtio_has_msix(const struct rte_pci_addr *loc __rte_unused)
 	return 0;
 }
 
-static int virtio_resource_init(struct rte_pci_device *pci_dev __rte_unused)
+static int virtio_resource_init(struct rte_pci_device *pci_dev)
 {
 	/* no setup required */
 	return 0;
@@ -1124,7 +1222,8 @@ eth_virtio_dev_init(__rte_unused struct eth_driver *eth_drv,
 			pci_dev->id.device_id);
 
 	/* Setup interrupt callback  */
-	rte_intr_callback_register(&pci_dev->intr_handle,
+	if (pci_dev->driver->drv_flags & RTE_PCI_DRV_INTR_LSC)
+		rte_intr_callback_register(&pci_dev->intr_handle,
 				   virtio_interrupt_handler, eth_dev);
 
 	virtio_dev_cq_start(eth_dev);
@@ -1136,7 +1235,6 @@ static struct eth_driver rte_virtio_pmd = {
 	{
 		.name = "rte_virtio_pmd",
 		.id_table = pci_id_virtio_map,
-		.drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC,
 	},
 	.eth_dev_init = eth_virtio_dev_init,
 	.dev_private_size = sizeof(struct virtio_hw),
@@ -1183,6 +1281,7 @@ virtio_dev_configure(struct rte_eth_dev *dev)
 {
 	const struct rte_eth_rxmode *rxmode = &dev->data->dev_conf.rxmode;
 	struct virtio_hw *hw = dev->data->dev_private;
+	struct rte_pci_device *pci_dev = dev->pci_dev;
 
 	PMD_INIT_LOG(DEBUG, "configure");
 
@@ -1200,10 +1299,11 @@ virtio_dev_configure(struct rte_eth_dev *dev)
 		return -ENOTSUP;
 	}
 
-	if (vtpci_irq_config(hw, 0) == VIRTIO_MSI_NO_VECTOR) {
-		PMD_DRV_LOG(ERR, "failed to set config vector");
-		return -EBUSY;
-	}
+	if (pci_dev->driver->drv_flags & RTE_PCI_DRV_INTR_LSC)
+		if (vtpci_irq_config(hw, 0) == VIRTIO_MSI_NO_VECTOR) {
+			PMD_DRV_LOG(ERR, "failed to set config vector");
+			return -EBUSY;
+		}
 
 	return 0;
 }
@@ -1214,9 +1314,11 @@ virtio_dev_start(struct rte_eth_dev *dev)
 {
 	uint16_t nb_queues, i;
 	struct virtio_hw *hw = dev->data->dev_private;
+	struct rte_pci_device *pci_dev = dev->pci_dev;
 
 	/* check if lsc interrupt feature is enabled */
-	if (dev->data->dev_conf.intr_conf.lsc) {
+	if ((dev->data->dev_conf.intr_conf.lsc) &&
+		(pci_dev->driver->drv_flags & RTE_PCI_DRV_INTR_LSC)) {
 		if (!vtpci_with_feature(hw, VIRTIO_NET_F_STATUS)) {
 			PMD_DRV_LOG(ERR, "link status not supported by host");
 			return -ENOTSUP;
-- 
1.8.4.2

  parent reply	other threads:[~2015-02-09  1:15 UTC|newest]

Thread overview: 132+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-15  5:15 [dpdk-dev] [PATCH 00/22] Single virtio implementation Ouyang Changchun
2015-01-15  5:15 ` [dpdk-dev] [PATCH 01/22] virtio: Rearrange resource initialization Ouyang Changchun
2015-01-15  5:15 ` [dpdk-dev] [PATCH 02/22] virtio: Use weaker barriers Ouyang Changchun
2015-01-15  5:15 ` [dpdk-dev] [PATCH 03/22] virtio: Allow starting with link down Ouyang Changchun
2015-01-15  5:15 ` [dpdk-dev] [PATCH 04/22] virtio: Add support for Link State interrupt Ouyang Changchun
2015-01-15  5:15 ` [dpdk-dev] [PATCH 05/22] ether: Add soft vlan encap/decap functions Ouyang Changchun
2015-01-15  5:15 ` [dpdk-dev] [PATCH 06/22] virtio: Use software vlan stripping Ouyang Changchun
2015-01-15  5:15 ` [dpdk-dev] [PATCH 07/22] virtio: Remove unnecessary adapter structure Ouyang Changchun
2015-01-15  5:15 ` [dpdk-dev] [PATCH 08/22] virtio: Remove redundant vq_alignment Ouyang Changchun
2015-01-15  5:15 ` [dpdk-dev] [PATCH 09/22] virtio: Fix how states are handled during initialization Ouyang Changchun
2015-01-15  5:15 ` [dpdk-dev] [PATCH 10/22] virtio: Make vtpci_get_status local Ouyang Changchun
2015-01-15  5:15 ` [dpdk-dev] [PATCH 11/22] virtio: Check for packet headroom at compile time Ouyang Changchun
2015-01-15  5:15 ` [dpdk-dev] [PATCH 12/22] virtio: Move allocation before initialization Ouyang Changchun
2015-01-15  5:15 ` [dpdk-dev] [PATCH 13/22] virtio: Add support for vlan filtering Ouyang Changchun
2015-01-15  5:15 ` [dpdk-dev] [PATCH 14/22] virtio: Add suport for multiple mac addresses Ouyang Changchun
2015-01-15  5:15 ` [dpdk-dev] [PATCH 15/22] virtio: Add ability to set MAC address Ouyang Changchun
2015-01-15  5:15 ` [dpdk-dev] [PATCH 16/22] virtio: Free mbuf's with threshold Ouyang Changchun
2015-01-15  5:15 ` [dpdk-dev] [PATCH 17/22] virtio: Use port IO to get PCI resource Ouyang Changchun
2015-01-15  5:15 ` [dpdk-dev] [PATCH 18/22] virtio: Fix descriptor index issue Ouyang Changchun
2015-01-15 16:54   ` Stephen Hemminger
2015-01-16  0:55     ` Ouyang, Changchun
2015-01-15  5:15 ` [dpdk-dev] [PATCH 19/22] ether: Fix vlan strip/insert issue Ouyang Changchun
2015-01-15  5:15 ` [dpdk-dev] [PATCH 20/22] example/vhost: Avoid inserting vlan twice Ouyang Changchun
2015-01-15  5:15 ` [dpdk-dev] [PATCH 21/22] example/vhost: Add vlan-strip cmd line option Ouyang Changchun
2015-01-15  5:15 ` [dpdk-dev] [PATCH 22/22] virtio: Use soft vlan strip in mergeable Rx path Ouyang Changchun
2015-01-15 16:55   ` Stephen Hemminger
2015-01-16  0:56     ` Ouyang, Changchun
2015-01-27  2:35 ` [dpdk-dev] [PATCH v2 00/24] Single virtio implementation Ouyang Changchun
2015-01-27  2:35   ` [dpdk-dev] [PATCH v2 01/24] virtio: Rearrange resource initialization Ouyang Changchun
2015-01-27  2:35   ` [dpdk-dev] [PATCH v2 02/24] virtio: Use weaker barriers Ouyang Changchun
2015-01-27  7:03     ` Xie, Huawei
2015-01-27  9:58       ` Stephen Hemminger
2015-01-27 16:16         ` Xie, Huawei
2015-01-28  6:12           ` Ouyang, Changchun
2015-01-27  7:56     ` Xie, Huawei
2015-01-27  8:04       ` Ouyang, Changchun
2015-01-27  2:35   ` [dpdk-dev] [PATCH v2 03/24] virtio: Allow starting with link down Ouyang Changchun
2015-01-27  2:35   ` [dpdk-dev] [PATCH v2 04/24] virtio: Add support for Link State interrupt Ouyang Changchun
2015-01-27  9:04     ` Xie, Huawei
2015-01-27 10:00       ` Stephen Hemminger
2015-01-28  3:03         ` Ouyang, Changchun
2015-01-28 15:11           ` Stephen Hemminger
2015-01-27  2:35   ` [dpdk-dev] [PATCH v2 05/24] ether: Add soft vlan encap/decap functions Ouyang Changchun
2015-01-27  2:35   ` [dpdk-dev] [PATCH v2 06/24] virtio: Use software vlan stripping Ouyang Changchun
2015-01-27  2:35   ` [dpdk-dev] [PATCH v2 07/24] virtio: Remove unnecessary adapter structure Ouyang Changchun
2015-01-27  2:35   ` [dpdk-dev] [PATCH v2 08/24] virtio: Remove redundant vq_alignment Ouyang Changchun
2015-01-27  2:35   ` [dpdk-dev] [PATCH v2 09/24] virtio: Fix how states are handled during initialization Ouyang Changchun
2015-01-27  2:35   ` [dpdk-dev] [PATCH v2 10/24] virtio: Make vtpci_get_status local Ouyang Changchun
2015-01-27  2:35   ` [dpdk-dev] [PATCH v2 11/24] virtio: Check for packet headroom at compile time Ouyang Changchun
2015-01-27  2:35   ` [dpdk-dev] [PATCH v2 12/24] virtio: Move allocation before initialization Ouyang Changchun
2015-01-27  2:35   ` [dpdk-dev] [PATCH v2 13/24] virtio: Add support for vlan filtering Ouyang Changchun
2015-01-27  2:35   ` [dpdk-dev] [PATCH v2 14/24] virtio: Add suport for multiple mac addresses Ouyang Changchun
2015-01-27  2:35   ` [dpdk-dev] [PATCH v2 15/24] virtio: Add ability to set MAC address Ouyang Changchun
2015-01-27  2:35   ` [dpdk-dev] [PATCH v2 16/24] virtio: Free mbuf's with threshold Ouyang Changchun
2015-01-27  2:35   ` [dpdk-dev] [PATCH v2 17/24] virtio: Use port IO to get PCI resource Ouyang Changchun
2015-01-27  2:35   ` [dpdk-dev] [PATCH v2 18/24] virtio: Fix descriptor index issue Ouyang Changchun
2015-01-27  2:35   ` [dpdk-dev] [PATCH v2 19/24] ether: Fix vlan strip/insert issue Ouyang Changchun
2015-01-27  2:36   ` [dpdk-dev] [PATCH v2 20/24] example/vhost: Avoid inserting vlan twice Ouyang Changchun
2015-01-27  2:36   ` [dpdk-dev] [PATCH v2 21/24] example/vhost: Add vlan-strip cmd line option Ouyang Changchun
2015-01-27  2:36   ` [dpdk-dev] [PATCH v2 22/24] virtio: Use soft vlan strip in mergeable Rx path Ouyang Changchun
2015-01-27  2:36   ` [dpdk-dev] [PATCH v2 23/24] virtio: Fix zero copy break issue Ouyang Changchun
2015-01-27  2:36   ` [dpdk-dev] [PATCH v2 24/24] virtio: Remove hotspots Ouyang Changchun
2015-01-27  3:06   ` [dpdk-dev] [PATCH v2 00/24] Single virtio implementation Matthew Hall
2015-01-27  3:42     ` Wiles, Keith
2015-01-27  9:41       ` Matthew Hall
2015-01-27 10:02     ` Stephen Hemminger
2015-01-27 18:59       ` Matthew Hall
2015-01-29  7:23   ` [dpdk-dev] [PATCH v3 00/25] " Ouyang Changchun
2015-01-29  7:23     ` [dpdk-dev] [PATCH v3 01/25] virtio: Rearrange resource initialization Ouyang Changchun
2015-01-29  7:23     ` [dpdk-dev] [PATCH v3 02/25] virtio: Use weaker barriers Ouyang Changchun
2015-01-29  7:23     ` [dpdk-dev] [PATCH v3 03/25] virtio: Allow starting with link down Ouyang Changchun
2015-01-29  7:23     ` [dpdk-dev] [PATCH v3 04/25] virtio: Add support for Link State interrupt Ouyang Changchun
2015-01-29  7:23     ` [dpdk-dev] [PATCH v3 05/25] ether: Add soft vlan encap/decap functions Ouyang Changchun
2015-01-29  7:23     ` [dpdk-dev] [PATCH v3 06/25] virtio: Use software vlan stripping Ouyang Changchun
2015-01-29  7:23     ` [dpdk-dev] [PATCH v3 07/25] virtio: Remove unnecessary adapter structure Ouyang Changchun
2015-01-29  7:23     ` [dpdk-dev] [PATCH v3 08/25] virtio: Remove redundant vq_alignment Ouyang Changchun
2015-01-29  7:23     ` [dpdk-dev] [PATCH v3 09/25] virtio: Fix how states are handled during initialization Ouyang Changchun
2015-01-29  7:23     ` [dpdk-dev] [PATCH v3 10/25] virtio: Make vtpci_get_status local Ouyang Changchun
2015-01-29  7:23     ` [dpdk-dev] [PATCH v3 11/25] virtio: Check for packet headroom at compile time Ouyang Changchun
2015-01-29  7:23     ` [dpdk-dev] [PATCH v3 12/25] virtio: Move allocation before initialization Ouyang Changchun
2015-01-29  7:23     ` [dpdk-dev] [PATCH v3 13/25] virtio: Add support for vlan filtering Ouyang Changchun
2015-01-29  7:23     ` [dpdk-dev] [PATCH v3 14/25] virtio: Add suport for multiple mac addresses Ouyang Changchun
2015-01-29  7:23     ` [dpdk-dev] [PATCH v3 15/25] virtio: Add ability to set MAC address Ouyang Changchun
2015-01-29  7:24     ` [dpdk-dev] [PATCH v3 16/25] virtio: Free mbuf's with threshold Ouyang Changchun
2015-01-29  7:24     ` [dpdk-dev] [PATCH v3 17/25] virtio: Use port IO to get PCI resource Ouyang Changchun
2015-01-29 23:14       ` Thomas Monjalon
2015-02-04  1:31         ` Ouyang, Changchun
2015-01-29  7:24     ` [dpdk-dev] [PATCH v3 18/25] virtio: Fix descriptor index issue Ouyang Changchun
2015-01-29  7:24     ` [dpdk-dev] [PATCH v3 19/25] ether: Fix vlan strip/insert issue Ouyang Changchun
2015-02-04 10:54       ` Xie, Huawei
2015-02-05  0:54         ` Ouyang, Changchun
2015-01-29  7:24     ` [dpdk-dev] [PATCH v3 20/25] example/vhost: Avoid inserting vlan twice Ouyang Changchun
2015-01-29  7:24     ` [dpdk-dev] [PATCH v3 21/25] example/vhost: Add vlan-strip cmd line option Ouyang Changchun
2015-01-29  7:24     ` [dpdk-dev] [PATCH v3 22/25] virtio: Use soft vlan strip in mergeable Rx path Ouyang Changchun
2015-01-29  7:24     ` [dpdk-dev] [PATCH v3 23/25] virtio: Fix zero copy break issue Ouyang Changchun
2015-01-29  7:24     ` [dpdk-dev] [PATCH v3 24/25] virtio: Remove hotspots Ouyang Changchun
2015-01-29  7:24     ` [dpdk-dev] [PATCH v3 25/25] virtio: Fix wmb issue Ouyang Changchun
2015-02-09  1:13     ` [dpdk-dev] [PATCH v4 00/26] Single virtio implementation Ouyang Changchun
2015-02-09  1:13       ` [dpdk-dev] [PATCH v4 01/26] virtio: Rearrange resource initialization Ouyang Changchun
2015-02-09  1:13       ` [dpdk-dev] [PATCH v4 02/26] virtio: Use weaker barriers Ouyang Changchun
2015-02-09  1:13       ` [dpdk-dev] [PATCH v4 03/26] virtio: Allow starting with link down Ouyang Changchun
2015-02-09  1:13       ` [dpdk-dev] [PATCH v4 04/26] virtio: Add support for Link State interrupt Ouyang Changchun
2015-02-09  1:13       ` [dpdk-dev] [PATCH v4 05/26] ether: Add soft vlan encap/decap functions Ouyang Changchun
2015-02-09  1:13       ` [dpdk-dev] [PATCH v4 06/26] virtio: Use software vlan stripping Ouyang Changchun
2015-02-09  1:13       ` [dpdk-dev] [PATCH v4 07/26] virtio: Remove unnecessary adapter structure Ouyang Changchun
2015-02-09  1:13       ` [dpdk-dev] [PATCH v4 08/26] virtio: Remove redundant vq_alignment Ouyang Changchun
2015-02-09  1:13       ` [dpdk-dev] [PATCH v4 09/26] virtio: Fix how states are handled during initialization Ouyang Changchun
2015-02-09  1:13       ` [dpdk-dev] [PATCH v4 10/26] virtio: Make vtpci_get_status local Ouyang Changchun
2015-02-09  1:14       ` [dpdk-dev] [PATCH v4 11/26] virtio: Check for packet headroom at compile time Ouyang Changchun
2015-02-09  1:14       ` [dpdk-dev] [PATCH v4 12/26] virtio: Move allocation before initialization Ouyang Changchun
2015-02-09  1:14       ` [dpdk-dev] [PATCH v4 13/26] virtio: Add support for vlan filtering Ouyang Changchun
2015-02-09  1:14       ` [dpdk-dev] [PATCH v4 14/26] virtio: Add suport for multiple mac addresses Ouyang Changchun
2015-02-09  1:14       ` [dpdk-dev] [PATCH v4 15/26] virtio: Add ability to set MAC address Ouyang Changchun
2015-02-09  1:14       ` [dpdk-dev] [PATCH v4 16/26] virtio: Free mbuf's with threshold Ouyang Changchun
2015-02-09  1:14       ` Ouyang Changchun [this message]
2015-02-11  4:32         ` [dpdk-dev] [PATCH v4 17/26] virtio: Use port IO to get PCI resource Stephen Hemminger
2015-02-11  4:50           ` Ouyang, Changchun
2015-02-11  7:29             ` Vincent JARDIN
2015-02-11 13:50               ` Stephen Hemminger
2015-02-11 14:16                 ` Thomas Monjalon
2015-02-12  0:52                   ` Ouyang, Changchun
2015-02-09  1:14       ` [dpdk-dev] [PATCH v4 18/26] virtio: Fix descriptor index issue Ouyang Changchun
2015-02-09  1:14       ` [dpdk-dev] [PATCH v4 19/26] ether: Fix vlan strip/insert issue Ouyang Changchun
2015-02-09  1:14       ` [dpdk-dev] [PATCH v4 20/26] example/vhost: Avoid inserting vlan twice Ouyang Changchun
2015-02-09  1:14       ` [dpdk-dev] [PATCH v4 21/26] example/vhost: Add vlan-strip cmd line option Ouyang Changchun
2015-02-09  1:14       ` [dpdk-dev] [PATCH v4 22/26] virtio: Use soft vlan strip in mergeable Rx path Ouyang Changchun
2015-02-09  1:14       ` [dpdk-dev] [PATCH v4 23/26] virtio: Fix zero copy break issue Ouyang Changchun
2015-02-09  1:14       ` [dpdk-dev] [PATCH v4 24/26] virtio: Remove hotspots Ouyang Changchun
2015-02-09  1:14       ` [dpdk-dev] [PATCH v4 25/26] virtio: Fix wmb issue Ouyang Changchun
2015-02-09  1:14       ` [dpdk-dev] [PATCH v4 26/26] virtio: Fix updating vring descriptor index issue Ouyang Changchun
2015-02-17  6:04       ` [dpdk-dev] [PATCH v4 00/26] Single virtio implementation Xie, Huawei
2015-02-20 18:06         ` Thomas Monjalon

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=1423444455-11330-18-git-send-email-changchun.ouyang@intel.com \
    --to=changchun.ouyang@intel.com \
    --cc=dev@dpdk.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 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).