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

sreeju.armughanx.selvaraj at intel.com sreeju.armughanx.selvaraj at intel.com
Fri Sep 5 01:11:32 PDT 2014


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.

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-creation-with-vdev-option.patch
 create mode 100644 common/recipes-extended/dpdk/dpdk/dpdk-1.7.0-ring-simplify-unit-tests.patch
 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-compilation-of-dpdk_qat-and-vhost.patch b/common/recipes-extended/dpdk/dpdk/dpdk-1.7.0-examples-exclude-compilation-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-compilation-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-with-all-examples.patch b/common/recipes-extended/dpdk/dpdk/dpdk-1.7.0-examples-pipeline-build-with-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-with-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-creation-with-vdev-option.patch b/common/recipes-extended/dpdk/dpdk/dpdk-1.7.0-ring-remove-extra-devices-creation-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-creation-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.patch b/common/recipes-extended/dpdk/dpdk/dpdk-1.7.0-ring-simplify-unit-tests.patch
new file mode 100644
index 0000000..78b74e6
--- /dev/null
+++ b/common/recipes-extended/dpdk/dpdk/dpdk-1.7.0-ring-simplify-unit-tests.patch
@@ -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.patch \
+	   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



More information about the meta-intel mailing list