[meta-intel] [PATCH 2/3] meta-intel/common: Upgrade DPDK to v1.7.0

Kamble, Nitin A nitin.a.kamble at intel.com
Mon Sep 8 11:09:09 PDT 2014



On 9/5/14, 1:11 AM, "sreeju.armughanx.selvaraj at intel.com"
<sreeju.armughanx.selvaraj at intel.com> wrote:

>From: Sreeju Selvaraj <sreeju.armughanx.selvaraj at intel.com>
>
>Added support for DPDK v1.7.0
>
>Building of example apps dpdk_qat and vhost failed due to dependancy on
>qat source and fuse libraries, so created patch to exclude the
>compilation of these examples.

Hi Sreeju,

Why not add dependency recipes to get it fully functional?

Nitin

>
>Resolved the installation failure found in example app ip_pipeline
>by cherry picking the patch from dpdk.org
>
>Resolved the test failure found with example app ring_pmd_autotest
>by cherry picking the patches from dpdk.org
>
>Signed-off-by: Sreeju Selvaraj <sreeju.armughanx.selvaraj at intel.com>
>---
> ...exclude-compilation-of-dpdk_qat-and-vhost.patch |  40 +++
> ...examples-pipeline-build-with-all-examples.patch |  33 ++
> ...e-extra-devices-creation-with-vdev-option.patch |  43 +++
> .../dpdk/dpdk-1.7.0-ring-simplify-unit-tests.patch | 379
>+++++++++++++++++++++
> common/recipes-extended/dpdk/dpdk_1.7.0.bb         |  27 ++
> 5 files changed, 522 insertions(+)
> create mode 100644
>common/recipes-extended/dpdk/dpdk/dpdk-1.7.0-examples-exclude-compilation-
>of-dpdk_qat-and-vhost.patch
> create mode 100644
>common/recipes-extended/dpdk/dpdk/dpdk-1.7.0-examples-pipeline-build-with-
>all-examples.patch
> create mode 100644
>common/recipes-extended/dpdk/dpdk/dpdk-1.7.0-ring-remove-extra-devices-cre
>ation-with-vdev-option.patch
> create mode 100644
>common/recipes-extended/dpdk/dpdk/dpdk-1.7.0-ring-simplify-unit-tests.patc
>h
> create mode 100644 common/recipes-extended/dpdk/dpdk_1.7.0.bb
>
>diff --git 
>a/common/recipes-extended/dpdk/dpdk/dpdk-1.7.0-examples-exclude-compilatio
>n-of-dpdk_qat-and-vhost.patch
>b/common/recipes-extended/dpdk/dpdk/dpdk-1.7.0-examples-exclude-compilatio
>n-of-dpdk_qat-and-vhost.patch
>new file mode 100644
>index 0000000..9a9f0c0
>--- /dev/null
>+++ 
>b/common/recipes-extended/dpdk/dpdk/dpdk-1.7.0-examples-exclude-compilatio
>n-of-dpdk_qat-and-vhost.patch
>@@ -0,0 +1,40 @@
>+From f43e001c7b47226f443abaf5e7690971fbf27d10 Mon Sep 17 00:00:00 2001
>+From: Sreeju Selvaraj <sreeju.armughanx.selvaraj at intel.com>
>+Date: Fri, 5 Sep 2014 10:04:34 +0800
>+Subject: [PATCH] examples: exclude compilation of dpdk_qat and vhost
>+
>+example apps dpdk_qat and vhost have dependency on qat source
>+and fuse libraries which causes compilation error.
>+There is a new global Makefile for examples added in dpdk v1.7.0
>+So mute the compilation of these apps there.
>+
>+Signed-off-by: Sreeju Selvaraj <sreeju.armughanx.selvaraj at intel.com>
>+---
>+ examples/Makefile | 4 ----
>+ 1 file changed, 4 deletions(-)
>+
>+diff --git a/examples/Makefile b/examples/Makefile
>+index dc85cf3..2127458 100644
>+--- a/examples/Makefile
>++++ b/examples/Makefile
>+@@ -38,9 +38,6 @@ RTE_TARGET ?= x86_64-native-linuxapp-gcc
>+ include $(RTE_SDK)/mk/rte.vars.mk
>+ 
>+ DIRS-y += cmdline
>+-ifneq ($(ICP_ROOT),)
>+-DIRS-y += dpdk_qat
>+-endif
>+ DIRS-y += exception_path
>+ DIRS-y += helloworld
>+ DIRS-y += ip_pipeline
>+@@ -62,7 +59,6 @@ DIRS-$(CONFIG_RTE_LIBRTE_METER) += qos_meter
>+ DIRS-$(CONFIG_RTE_LIBRTE_SCHED) += qos_sched
>+ DIRS-y += quota_watermark
>+ DIRS-y += timer
>+-DIRS-y += vhost
>+ DIRS-$(CONFIG_RTE_LIBRTE_XEN_DOM0) += vhost_xen
>+ DIRS-y += vmdq
>+ DIRS-y += vmdq_dcb
>+-- 
>+1.9.1
>+
>diff --git 
>a/common/recipes-extended/dpdk/dpdk/dpdk-1.7.0-examples-pipeline-build-wit
>h-all-examples.patch
>b/common/recipes-extended/dpdk/dpdk/dpdk-1.7.0-examples-pipeline-build-wit
>h-all-examples.patch
>new file mode 100644
>index 0000000..234260b
>--- /dev/null
>+++ 
>b/common/recipes-extended/dpdk/dpdk/dpdk-1.7.0-examples-pipeline-build-wit
>h-all-examples.patch
>@@ -0,0 +1,33 @@
>+From 835b75b7b22d8373f6ee17cb9ff456518ea7c208 Mon Sep 17 00:00:00 2001
>+From: Thomas Monjalon <thomas.monjalon at 6wind.com>
>+Date: Thu, 17 Jul 2014 10:30:52 +0200
>+Subject: [PATCH] examples/pipeline: build with all examples
>+
>+Imported patch from: http://dpdk.org/browse/dpdk/log/
>+
>+When adding this packet framework sample (commit 77a3346),
>+it has been forgotten to add it into the global makefile for
>+"make examples".
>+
>+Signed-off-by: Thomas Monjalon <thomas.monjalon at 6wind.com>
>+(cherry picked from commit a6664a09a7caa5e63f9ae625cf1946b0eef7794e)
>+Signed-off-by: Sreeju Selvaraj <sreeju.armughanx.selvaraj at intel.com>
>+---
>+ examples/Makefile | 1 +
>+ 1 file changed, 1 insertion(+)
>+
>+diff --git a/examples/Makefile b/examples/Makefile
>+index d0624f6..dc85cf3 100644
>+--- a/examples/Makefile
>++++ b/examples/Makefile
>+@@ -43,6 +43,7 @@ DIRS-y += dpdk_qat
>+ endif
>+ DIRS-y += exception_path
>+ DIRS-y += helloworld
>++DIRS-y += ip_pipeline
>+ DIRS-y += ip_reassembly
>+ DIRS-$(CONFIG_RTE_MBUF_SCATTER_GATHER) += ip_fragmentation
>+ DIRS-$(CONFIG_RTE_MBUF_SCATTER_GATHER) += ipv4_multicast
>+-- 
>+1.9.1
>+
>diff --git 
>a/common/recipes-extended/dpdk/dpdk/dpdk-1.7.0-ring-remove-extra-devices-c
>reation-with-vdev-option.patch
>b/common/recipes-extended/dpdk/dpdk/dpdk-1.7.0-ring-remove-extra-devices-c
>reation-with-vdev-option.patch
>new file mode 100644
>index 0000000..02322b3
>--- /dev/null
>+++ 
>b/common/recipes-extended/dpdk/dpdk/dpdk-1.7.0-ring-remove-extra-devices-c
>reation-with-vdev-option.patch
>@@ -0,0 +1,43 @@
>+From 0ffb8ec6af479f98daf1bf27e4a6648f41410e90 Mon Sep 17 00:00:00 2001
>+From: Pablo de Lara <pablo.de.lara.guarch at intel.com>
>+Date: Wed, 9 Jul 2014 15:35:35 +0100
>+Subject: [PATCH] ring: remove extra devices creation with --vdev option
>+
>+Imported patch from: http://dpdk.org/browse/dpdk/log/
>+
>+When passing extra arguments in EAL option --vdev, to create
>+ring ethdevs, API was creating three ethdevs, even if there
>+was just one argument, such as CREATE.
>+
>+Signed-off-by: Pablo de Lara <pablo.de.lara.guarch at intel.com>
>+Acked-by: Neil Horman <nhorman at tuxdriver.com>
>+(cherry picked from commit 546afbc6827f9f0f7ed501d2af1fc51755e40224)
>+Signed-off-by: Sreeju Selvaraj <sreeju.armughanx.selvaraj at intel.com>
>+---
>+ lib/librte_pmd_ring/rte_eth_ring.c | 3 +--
>+ 1 file changed, 1 insertion(+), 2 deletions(-)
>+
>+diff --git a/lib/librte_pmd_ring/rte_eth_ring.c
>b/lib/librte_pmd_ring/rte_eth_ring.c
>+index 73c649e..4f1b6ed 100644
>+--- a/lib/librte_pmd_ring/rte_eth_ring.c
>++++ b/lib/librte_pmd_ring/rte_eth_ring.c
>+@@ -493,7 +493,6 @@ rte_pmd_ring_devinit(const char *name, const char
>*params)
>+ 			eth_dev_ring_create(name, rte_socket_id(), DEV_CREATE);
>+ 			return 0;
>+ 		} else {
>+-			eth_dev_ring_create(name, rte_socket_id(), DEV_CREATE);
>+ 			ret = rte_kvargs_count(kvlist, ETH_RING_NUMA_NODE_ACTION_ARG);
>+ 			info = rte_zmalloc("struct node_action_list", sizeof(struct
>node_action_list) +
>+ 					   (sizeof(struct node_action_pair) * ret), 0);
>+@@ -510,7 +509,7 @@ rte_pmd_ring_devinit(const char *name, const char
>*params)
>+ 				goto out_free;
>+ 
>+ 			for (info->count = 0; info->count < info->total; info->count++) {
>+-				eth_dev_ring_pair_create(name, info->list[info->count].node,
>++				eth_dev_ring_create(name, info->list[info->count].node,
>+ 						    info->list[info->count].action);
>+ 			}
>+ 		}
>+-- 
>+1.9.1
>+
>diff --git 
>a/common/recipes-extended/dpdk/dpdk/dpdk-1.7.0-ring-simplify-unit-tests.pa
>tch 
>b/common/recipes-extended/dpdk/dpdk/dpdk-1.7.0-ring-simplify-unit-tests.pa
>tch
>new file mode 100644
>index 0000000..78b74e6
>--- /dev/null
>+++ 
>b/common/recipes-extended/dpdk/dpdk/dpdk-1.7.0-ring-simplify-unit-tests.pa
>tch
>@@ -0,0 +1,379 @@
>+From 8a75ca59eb4a52fae85428f0d19355acc903682e Mon Sep 17 00:00:00 2001
>+From: Pablo de Lara <pablo.de.lara.guarch at intel.com>
>+Date: Wed, 9 Jul 2014 15:35:36 +0100
>+Subject: [PATCH] ring: simplify unit tests
>+
>+Imported patch from: http://dpdk.org/browse/dpdk/log/
>+
>+As this unit test does not create devices anymore,
>+and uses devices created by EAL option --vdev,
>+there were unnecesary tests that were repeated,
>+so they have been removed.
>+
>+So now there are three tests:
>+
>+1 - Test two devices that share a ring, one device
>+    with just one RX queue and the other with one
>+    TX queue.
>+
>+2 - Test a device connected to itself (loopback) by
>+    a ring, with both RX and TX queue.
>+
>+3 - Test two devices that share a ring, but both devices
>+    with RX and TX queue, so they can send packets to themselves
>+    and to the other device.
>+
>+Signed-off-by: Pablo de Lara <pablo.de.lara.guarch at intel.com>
>+Acked-by: Neil Horman <nhorman at tuxdriver.com>
>+(cherry picked from commit 572eb3cd834c5e21d7fa946432b89c1c9d63fe61)
>+Signed-off-by: Sreeju Selvaraj <sreeju.armughanx.selvaraj at intel.com>
>+---
>+ app/test/test_pmd_ring.c | 202
>+++++++++++++++++------------------------------
>+ 1 file changed, 72 insertions(+), 130 deletions(-)
>+
>+diff --git a/app/test/test_pmd_ring.c b/app/test/test_pmd_ring.c
>+index 0d3d95c..19ad0e9 100644
>+--- a/app/test/test_pmd_ring.c
>++++ b/app/test/test_pmd_ring.c
>+@@ -39,18 +39,13 @@
>+ #include <rte_eth_ring.h>
>+ #include <rte_ethdev.h>
>+ 
>+-/* two test rings, r1 is used by two ports, r2 just by one */
>+-static struct rte_ring *r1[2], *r2;
>+-
>+ static struct rte_mempool *mp;
>+-static uint8_t start_idx; /* will store the port id of the first of our
>new ports */
>+-
>+-#define TX_PORT (uint8_t)(start_idx + 1)
>+-#define RX_PORT (uint8_t)(start_idx + 2)
>+-#define RXTX_PORT (uint8_t)(start_idx + 3)
>+-#define RXTX_PORT2 (uint8_t)(start_idx + 4)
>+-#define RXTX_PORT4 (uint8_t)(start_idx + 6)
>+-#define RXTX_PORT5 (uint8_t)(start_idx + 7)
>++
>++#define TX_PORT 0
>++#define RX_PORT 1
>++#define RXTX_PORT 2
>++#define RXTX_PORT2 3
>++#define RXTX_PORT3 4
>+ #define SOCKET0 0
>+ 
>+ #define RING_SIZE 256
>+@@ -86,7 +81,7 @@ test_ethdev_configure(void)
>+ 		return -1;
>+ 	}
>+ 	if (rte_eth_dev_configure(RXTX_PORT, 1, 1, &null_conf) < 0) {
>+-		printf("Configure failed for RX port\n");
>++		printf("Configure failed for RXTX port\n");
>+ 		return -1;
>+ 	}
>+ 
>+@@ -250,197 +245,162 @@ test_stats_reset(void)
>+ }
>+ 
>+ static int
>+-test_pmd_ring_init(void)
>++test_pmd_ring_pair_create_attach(void)
>+ {
>+-	struct rte_eth_stats stats;
>++	struct rte_eth_stats stats, stats2;
>+ 	struct rte_mbuf buf, *pbuf = &buf;
>+ 	struct rte_eth_conf null_conf;
>+ 
>+-	printf("Testing ring pmd init\n");
>+-
>+-	if (RXTX_PORT2 >= RTE_MAX_ETHPORTS) {
>++	if ((RXTX_PORT2 >= RTE_MAX_ETHPORTS) || (RXTX_PORT3 >=
>RTE_MAX_ETHPORTS)) {
>+ 		printf(" TX/RX port exceed max eth ports\n");
>+ 		return -1;
>+ 	}
>+-	if (rte_eth_dev_configure(RXTX_PORT2, 1, 1, &null_conf) < 0) {
>++	if ((rte_eth_dev_configure(RXTX_PORT2, 1, 1, &null_conf) < 0)
>++		|| (rte_eth_dev_configure(RXTX_PORT3, 1, 1, &null_conf) < 0)) {
>+ 		printf("Configure failed for RXTX port\n");
>+ 		return -1;
>+ 	}
>+ 
>+-	if (rte_eth_tx_queue_setup(RXTX_PORT2, 0, RING_SIZE, SOCKET0, NULL) <
>0) {
>++	if ((rte_eth_tx_queue_setup(RXTX_PORT2, 0, RING_SIZE, SOCKET0, NULL) <
>0)
>++		|| (rte_eth_tx_queue_setup(RXTX_PORT3, 0, RING_SIZE, SOCKET0, NULL) <
>0)) {
>+ 		printf("TX queue setup failed\n");
>+ 		return -1;
>+ 	}
>+ 
>+-	if (rte_eth_rx_queue_setup(RXTX_PORT2, 0, RING_SIZE, SOCKET0,
>+-			NULL, mp) < 0) {
>++	if ((rte_eth_rx_queue_setup(RXTX_PORT2, 0, RING_SIZE, SOCKET0, NULL,
>mp) < 0)
>++		|| (rte_eth_rx_queue_setup(RXTX_PORT3, 0, RING_SIZE, SOCKET0, NULL,
>mp) < 0)) {
>+ 		printf("RX queue setup failed\n");
>+ 		return -1;
>+ 	}
>+ 
>+-	if (rte_eth_dev_start(RXTX_PORT2) < 0) {
>+-		printf("Error starting RX port\n");
>++	if ((rte_eth_dev_start(RXTX_PORT2) < 0)
>++		|| (rte_eth_dev_start(RXTX_PORT3) < 0)) {
>++		printf("Error starting RXTX port\n");
>+ 		return -1;
>+ 	}
>+ 
>+-	/* send and receive 1 packet and check for stats update */
>++	/*
>++	 * send and receive 1 packet (RXTX_PORT2 -> RXTX_PORT3)
>++	 * and check for stats update
>++	 */
>+ 	if (rte_eth_tx_burst(RXTX_PORT2, 0, &pbuf, 1) != 1) {
>+ 		printf("Error sending packet to RXTX port\n");
>+ 		return -1;
>+ 	}
>+ 
>+-	if (rte_eth_rx_burst(RXTX_PORT2, 0, &pbuf, 1) != 1) {
>++	if (rte_eth_rx_burst(RXTX_PORT3, 0, &pbuf, 1) != 1) {
>+ 		printf("Error receiving packet from RXTX port\n");
>+ 		return -1;
>+ 	}
>+ 
>+ 	rte_eth_stats_get(RXTX_PORT2, &stats);
>+-	if (stats.ipackets != 1 || stats.opackets != 1 ||
>++	rte_eth_stats_get(RXTX_PORT3, &stats2);
>++	if (stats.ipackets != 0 || stats.opackets != 1 ||
>+ 			stats.ibytes != 0 || stats.obytes != 0 ||
>+ 			stats.ierrors != 0 || stats.oerrors != 0) {
>+ 		printf("Error: RXTX port stats are not as expected\n");
>+ 		return -1;
>+ 	}
>+ 
>+-	rte_eth_dev_stop(RXTX_PORT2);
>+-
>+-	return 0;
>+-}
>+-
>+-static int
>+-test_pmd_ring_pair_create(void)
>+-{
>+-	struct rte_eth_stats stats, stats2;
>+-	struct rte_mbuf buf, *pbuf = &buf;
>+-	struct rte_eth_conf null_conf;
>+-
>+-	if ((RXTX_PORT4 >= RTE_MAX_ETHPORTS) || (RXTX_PORT5 >=
>RTE_MAX_ETHPORTS)) {
>+-		printf(" TX/RX port exceed max eth ports\n");
>+-		return -1;
>+-	}
>+-	if ((rte_eth_dev_configure(RXTX_PORT4, 1, 1, &null_conf) < 0)
>+-		|| (rte_eth_dev_configure(RXTX_PORT5, 1, 1, &null_conf) < 0)) {
>+-		printf("Configure failed for RXTX port\n");
>+-		return -1;
>+-	}
>+-
>+-	if ((rte_eth_tx_queue_setup(RXTX_PORT4, 0, RING_SIZE, SOCKET0, NULL) <
>0)
>+-		|| (rte_eth_tx_queue_setup(RXTX_PORT5, 0, RING_SIZE, SOCKET0, NULL) <
>0)) {
>+-		printf("TX queue setup failed\n");
>+-		return -1;
>+-	}
>+-
>+-	if ((rte_eth_rx_queue_setup(RXTX_PORT4, 0, RING_SIZE, SOCKET0, NULL,
>mp) < 0)
>+-		|| (rte_eth_rx_queue_setup(RXTX_PORT5, 0, RING_SIZE, SOCKET0, NULL,
>mp) < 0)) {
>+-		printf("RX queue setup failed\n");
>+-		return -1;
>+-	}
>+-
>+-	if ((rte_eth_dev_start(RXTX_PORT4) < 0)
>+-		|| (rte_eth_dev_start(RXTX_PORT5) < 0)) {
>+-		printf("Error starting RXTX port\n");
>++	if (stats2.ipackets != 1 || stats2.opackets != 0 ||
>++			stats2.ibytes != 0 || stats2.obytes != 0 ||
>++			stats2.ierrors != 0 || stats2.oerrors != 0) {
>++		printf("Error: RXTX port stats are not as expected\n");
>+ 		return -1;
>+ 	}
>+ 
>+-	/* send and receive 1 packet and check for stats update */
>+-	if (rte_eth_tx_burst(RXTX_PORT4, 0, &pbuf, 1) != 1) {
>++	/*
>++	 * send and receive 1 packet (RXTX_PORT3 -> RXTX_PORT2)
>++	 * and check for stats update
>++	 */
>++	if (rte_eth_tx_burst(RXTX_PORT3, 0, &pbuf, 1) != 1) {
>+ 		printf("Error sending packet to RXTX port\n");
>+ 		return -1;
>+ 	}
>+ 
>+-	if (rte_eth_rx_burst(RXTX_PORT5, 0, &pbuf, 1) != 1) {
>++	if (rte_eth_rx_burst(RXTX_PORT2, 0, &pbuf, 1) != 1) {
>+ 		printf("Error receiving packet from RXTX port\n");
>+ 		return -1;
>+ 	}
>+ 
>+-	rte_eth_stats_get(RXTX_PORT4, &stats);
>+-	rte_eth_stats_get(RXTX_PORT5, &stats2);
>+-	if (stats.ipackets != 0 || stats.opackets != 1 ||
>++	rte_eth_stats_get(RXTX_PORT2, &stats);
>++	rte_eth_stats_get(RXTX_PORT3, &stats2);
>++	if (stats.ipackets != 1 || stats.opackets != 1 ||
>+ 			stats.ibytes != 0 || stats.obytes != 0 ||
>+ 			stats.ierrors != 0 || stats.oerrors != 0) {
>+ 		printf("Error: RXTX port stats are not as expected\n");
>+ 		return -1;
>+ 	}
>+ 
>+-	if (stats2.ipackets != 1 || stats2.opackets != 0 ||
>++	if (stats2.ipackets != 1 || stats2.opackets != 1 ||
>+ 			stats2.ibytes != 0 || stats2.obytes != 0 ||
>+ 			stats2.ierrors != 0 || stats2.oerrors != 0) {
>+ 		printf("Error: RXTX port stats are not as expected\n");
>+ 		return -1;
>+ 	}
>+ 
>+-	rte_eth_dev_stop(RXTX_PORT4);
>+-	rte_eth_dev_stop(RXTX_PORT5);
>+-
>+-	return 0;
>+-}
>+-
>+-static int
>+-test_pmd_ring_pair_attach(void)
>+-{
>+-	struct rte_eth_stats stats, stats2;
>+-	struct rte_mbuf buf, *pbuf = &buf;
>+-	struct rte_eth_conf null_conf;
>+-
>+-	if ((RXTX_PORT4 >= RTE_MAX_ETHPORTS) || (RXTX_PORT5 >=
>RTE_MAX_ETHPORTS)) {
>+-		printf(" TX/RX port exceed max eth ports\n");
>+-		return -1;
>+-	}
>+-	if ((rte_eth_dev_configure(RXTX_PORT4, 1, 1, &null_conf) < 0)
>+-		|| (rte_eth_dev_configure(RXTX_PORT5, 1, 1, &null_conf) < 0)) {
>+-		printf("Configure failed for RXTX port\n");
>++	/*
>++	 * send and receive 1 packet (RXTX_PORT2 -> RXTX_PORT2)
>++	 * and check for stats update
>++	 */
>++	if (rte_eth_tx_burst(RXTX_PORT2, 0, &pbuf, 1) != 1) {
>++		printf("Error sending packet to RXTX port\n");
>+ 		return -1;
>+ 	}
>+ 
>+-	if ((rte_eth_tx_queue_setup(RXTX_PORT4, 0, RING_SIZE, SOCKET0, NULL) <
>0)
>+-		|| (rte_eth_tx_queue_setup(RXTX_PORT5, 0, RING_SIZE, SOCKET0, NULL) <
>0)) {
>+-		printf("TX queue setup failed\n");
>++	if (rte_eth_rx_burst(RXTX_PORT2, 0, &pbuf, 1) != 1) {
>++		printf("Error receiving packet from RXTX port\n");
>+ 		return -1;
>+ 	}
>+ 
>+-	if ((rte_eth_rx_queue_setup(RXTX_PORT4, 0, RING_SIZE, SOCKET0, NULL,
>mp) < 0)
>+-		|| (rte_eth_rx_queue_setup(RXTX_PORT5, 0, RING_SIZE, SOCKET0, NULL,
>mp) < 0)) {
>+-		printf("RX queue setup failed\n");
>++	rte_eth_stats_get(RXTX_PORT2, &stats);
>++	rte_eth_stats_get(RXTX_PORT3, &stats2);
>++	if (stats.ipackets != 2 || stats.opackets != 2 ||
>++			stats.ibytes != 0 || stats.obytes != 0 ||
>++			stats.ierrors != 0 || stats.oerrors != 0) {
>++		printf("Error: RXTX port stats are not as expected\n");
>+ 		return -1;
>+ 	}
>+ 
>+-	if ((rte_eth_dev_start(RXTX_PORT4) < 0)
>+-		|| (rte_eth_dev_start(RXTX_PORT5) < 0)) {
>+-		printf("Error starting RXTX port\n");
>++	if (stats2.ipackets != 1 || stats2.opackets != 1 ||
>++			stats2.ibytes != 0 || stats2.obytes != 0 ||
>++			stats2.ierrors != 0 || stats2.oerrors != 0) {
>++		printf("Error: RXTX port stats are not as expected\n");
>+ 		return -1;
>+ 	}
>+ 
>+-	rte_eth_stats_reset(RXTX_PORT4);
>+-	rte_eth_stats_reset(RXTX_PORT5);
>+-
>+-	/* send and receive 1 packet and check for stats update */
>+-	if (rte_eth_tx_burst(RXTX_PORT4, 0, &pbuf, 1) != 1) {
>++	/*
>++	 * send and receive 1 packet (RXTX_PORT3 -> RXTX_PORT3)
>++	 * and check for stats update
>++	 */
>++	if (rte_eth_tx_burst(RXTX_PORT3, 0, &pbuf, 1) != 1) {
>+ 		printf("Error sending packet to RXTX port\n");
>+ 		return -1;
>+ 	}
>+-	if (rte_eth_rx_burst(RXTX_PORT5, 0, &pbuf, 1) != 1) {
>++
>++	if (rte_eth_rx_burst(RXTX_PORT3, 0, &pbuf, 1) != 1) {
>+ 		printf("Error receiving packet from RXTX port\n");
>+ 		return -1;
>+ 	}
>+ 
>+-	rte_eth_stats_get(RXTX_PORT4, &stats);
>+-	rte_eth_stats_get(RXTX_PORT5, &stats2);
>+-	if (stats.ipackets != 0 || stats.opackets != 1 ||
>++	rte_eth_stats_get(RXTX_PORT2, &stats);
>++	rte_eth_stats_get(RXTX_PORT3, &stats2);
>++	if (stats.ipackets != 2 || stats.opackets != 2 ||
>+ 			stats.ibytes != 0 || stats.obytes != 0 ||
>+ 			stats.ierrors != 0 || stats.oerrors != 0) {
>+ 		printf("Error: RXTX port stats are not as expected\n");
>+ 		return -1;
>+ 	}
>+ 
>+-	if (stats2.ipackets != 1 || stats2.opackets != 0 ||
>++	if (stats2.ipackets != 2 || stats2.opackets != 2 ||
>+ 			stats2.ibytes != 0 || stats2.obytes != 0 ||
>+ 			stats2.ierrors != 0 || stats2.oerrors != 0) {
>+ 		printf("Error: RXTX port stats are not as expected\n");
>+ 		return -1;
>+ 	}
>+ 
>+-	rte_eth_dev_stop(RXTX_PORT4);
>+-	rte_eth_dev_stop(RXTX_PORT5);
>++	rte_eth_dev_stop(RXTX_PORT2);
>++	rte_eth_dev_stop(RXTX_PORT3);
>+ 
>+ 	return 0;
>+ }
>+@@ -448,17 +408,6 @@ test_pmd_ring_pair_attach(void)
>+ int
>+ test_pmd_ring(void)
>+ {
>+-	r1[0] = rte_ring_create("R1", RING_SIZE, 0, 0);
>+-	r1[1] = rte_ring_create("R2", RING_SIZE, 0, 0);
>+-	if (r1[0] == NULL && (r1[0] = rte_ring_lookup("R1")) == NULL)
>+-		return -1;
>+-	if (r1[1] == NULL && (r1[1] = rte_ring_lookup("R2")) == NULL)
>+-		return -1;
>+-
>+-	r2 = rte_ring_create("R3", RING_SIZE, 0, RING_F_SP_ENQ|RING_F_SC_DEQ);
>+-	if (r2 == NULL && (r2 = rte_ring_lookup("R3")) == NULL)
>+-		return -1;
>+-
>+ 	mp = rte_mempool_create("mbuf_pool", NB_MBUF,
>+ 			MBUF_SIZE, 32,
>+ 			sizeof(struct rte_pktmbuf_pool_private),
>+@@ -468,8 +417,6 @@ test_pmd_ring(void)
>+ 	if (mp == NULL)
>+ 		return -1;
>+ 
>+-	start_idx = rte_eth_dev_count();
>+-
>+ 	if ((TX_PORT >= RTE_MAX_ETHPORTS) || (RX_PORT >= RTE_MAX_ETHPORTS)\
>+ 		|| (RXTX_PORT >= RTE_MAX_ETHPORTS)) {
>+ 		printf(" TX/RX port exceed max eth ports\n");
>+@@ -492,14 +439,9 @@ test_pmd_ring(void)
>+ 	rte_eth_dev_stop(TX_PORT);
>+ 	rte_eth_dev_stop(RXTX_PORT);
>+ 
>+-	if (test_pmd_ring_init() < 0)
>++	if (test_pmd_ring_pair_create_attach() < 0)
>+ 		return -1;
>+ 
>+-	if (test_pmd_ring_pair_create() < 0)
>+-		return -1;
>+-
>+-	if (test_pmd_ring_pair_attach() < 0)
>+-		return -1;
>+ 	return 0;
>+ }
>+ 
>+-- 
>+1.9.1
>+
>diff --git a/common/recipes-extended/dpdk/dpdk_1.7.0.bb
>b/common/recipes-extended/dpdk/dpdk_1.7.0.bb
>new file mode 100644
>index 0000000..6571485
>--- /dev/null
>+++ b/common/recipes-extended/dpdk/dpdk_1.7.0.bb
>@@ -0,0 +1,27 @@
>+include dpdk.inc
>+
>+SRC_URI = 
>"http://dpdk.org/browse/dpdk/snapshot/dpdk-${PV}.tar.gz;name=dpdk \
>+	   file://dpdk-1.7.0-examples-pipeline-build-with-all-examples.patch \
>+	   
>file://dpdk-1.7.0-examples-exclude-compilation-of-dpdk_qat-and-vhost.patch
> \
>+	   
>file://dpdk-1.7.0-ring-remove-extra-devices-creation-with-vdev-option.patc
>h \
>+	   file://dpdk-1.7.0-ring-simplify-unit-tests.patch \
>+	   "
>+
>+SRC_URI[dpdk.md5sum] = "07907d7b1a64888a459a971c45818038"
>+SRC_URI[dpdk.sha256sum] =
>"aafc290260b5002d248ab8f8c8ffa76454d4b1382aa3c82ae2700ecce481397a"
>+
>+export EXAMPLES_BUILD_DIR = "${RTE_TARGET}"
>+
>+do_compile_append () {
>+
>+	cd ${S}/examples/
>+
>+	###############################################################
>+	# In order to make use of dpdk.inc for example app installation
>+	# without failure, override the default build directory
>+	###############################################################
>+	oe_runmake CROSS="${TARGET_PREFIX}" O="${S}/examples/$@/"
>+}
>+
>+
>+
>-- 
>1.9.1
>
>-- 
>_______________________________________________
>meta-intel mailing list
>meta-intel at yoctoproject.org
>https://lists.yoctoproject.org/listinfo/meta-intel



More information about the meta-intel mailing list