[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