> -----Original Message----- > From: meta-intel-boun...@yoctoproject.org [mailto:meta-intel- > boun...@yoctoproject.org] On Behalf Of > sreeju.armughanx.selva...@intel.com > Sent: Tuesday, September 30, 2014 10:43 AM > To: meta-intel@yoctoproject.org > Subject: [meta-intel] [PATCH V3 2/2] meta-intel/common: Upgrade DPDK to > v1.7.0 > > From: Sreeju Selvaraj <sreeju.armughanx.selva...@intel.com> > > Added support for DPDK v1.7.0 > > Added PACKAGECONFIG mechanism to explicitly disable the use of fuse and > qat which are dependancies for example apps dpdk_qat and vhost. > > Added config variables CONFIG_EXAMPLE_DPDK_QAT and > CONFIG_EXAMPLE_DPDK_VHOST to enable or disable the compilation of > example apps dpdk_qat and vhost. > > Resolved the installation failure found in example app ip_pipeline by cherry > picking the patch from dpdk.org. > > Resolved the test failure found in example app ring_pmd_autotest by cherry > picking the patches from dpdk.org. > > Signed-off-by: Sreeju Selvaraj <sreeju.armughanx.selva...@intel.com>
Acked-by: Ong Boon Leong <boon.leong....@intel.com> > --- > ...d-config-variables-to-enable-disable-dpdk.patch | 42 +++ ...examples- > pipeline-build-with-all-examples.patch | 34 ++ ...e-extra-devices-creation- > with-vdev-option.patch | 44 +++ .../dpdk/dpdk-1.7.0-ring-simplify-unit- > tests.patch | 380 +++++++++++++++++++++ > common/recipes-extended/dpdk/dpdk_1.7.0.bb | 41 +++ > 5 files changed, 541 insertions(+) > create mode 100644 common/recipes-extended/dpdk/dpdk/dpdk-1.7.0- > examples-Add-config-variables-to-enable-disable-dpdk.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-Add- > config-variables-to-enable-disable-dpdk.patch b/common/recipes- > extended/dpdk/dpdk/dpdk-1.7.0-examples-Add-config-variables-to-enable- > disable-dpdk.patch > new file mode 100644 > index 0000000..d0721ca > --- /dev/null > +++ b/common/recipes-extended/dpdk/dpdk/dpdk-1.7.0-examples-Add- > config-v > +++ ariables-to-enable-disable-dpdk.patch > @@ -0,0 +1,42 @@ > +From 63f8ccc5a305b193e219d288ef9e43b9a9fa6aa8 Mon Sep 17 00:00:00 2001 > +From: Sreeju Selvaraj <sreeju.armughanx.selva...@intel.com> > +Date: Wed, 17 Sep 2014 19:10:01 +0800 > +Subject: [PATCH] examples: Add config variables to enable/disable > +dpdk_qat and vhost > + > +Upstream-Status: Inappropriate [configuration] > + > +This can be used to export CONFIG_EXAMPLE_DPDK_QAT=n if dpdk_qat is > not > +in PACKAGECONFIG and also allow to export > CONFIG_EXAMPLE_DPDK_VHOST=n > +if vhost is not in PACKAGECONFIG. > + > +Signed-off-by: Sreeju Selvaraj <sreeju.armughanx.selva...@intel.com> > +--- > + examples/Makefile | 4 ++-- > + 1 file changed, 2 insertions(+), 2 deletions(-) > + > +diff --git a/examples/Makefile b/examples/Makefile index > +d0624f6..885c938 100644 > +--- a/examples/Makefile > ++++ b/examples/Makefile > +@@ -39,7 +39,7 @@ include $(RTE_SDK)/mk/rte.vars.mk > + > + DIRS-y += cmdline > + ifneq ($(ICP_ROOT),) > +-DIRS-y += dpdk_qat > ++DIRS-$(CONFIG_EXAMPLE_DPDK_QAT) += dpdk_qat > + endif > + DIRS-y += exception_path > + DIRS-y += helloworld > +@@ -61,7 +61,7 @@ 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_EXAMPLE_DPDK_VHOST) += 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..25f029f > --- /dev/null > +++ b/common/recipes-extended/dpdk/dpdk/dpdk-1.7.0-examples-pipeline- > bui > +++ ld-with-all-examples.patch > @@ -0,0 +1,34 @@ > +From 15aef6e666ee2eb0befa153d277d47754f3656e4 Mon Sep 17 00:00:00 > 2001 > +From: Thomas Monjalon <thomas.monja...@6wind.com> > +Date: Thu, 17 Jul 2014 10:30:52 +0200 > +Subject: [PATCH] examples/pipeline: build with all examples > + > +Upstream-Status: Backport > +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.monja...@6wind.com> (cherry > +picked from commit a6664a09a7caa5e63f9ae625cf1946b0eef7794e) > +Signed-off-by: Sreeju Selvaraj <sreeju.armughanx.selva...@intel.com> > +--- > + examples/Makefile | 1 > + 1 file changed, 1 insertion(+) > + > +diff --git a/examples/Makefile b/examples/Makefile index > +885c938..1788d6e 100644 > +--- a/examples/Makefile > ++++ b/examples/Makefile > +@@ -43,6 +43,7 @@ DIRS-$(CONFIG_EXAMPLE_DPDK_QAT) += 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..25a4ea8 > --- /dev/null > +++ b/common/recipes-extended/dpdk/dpdk/dpdk-1.7.0-ring-remove-extra- > dev > +++ ices-creation-with-vdev-option.patch > @@ -0,0 +1,44 @@ > +From 70d3d9a6757e0c56ad3c6da0292479433e16aed3 Mon Sep 17 00:00:00 > 2001 > +From: Pablo de Lara <pablo.de.lara.gua...@intel.com> > +Date: Wed, 9 Jul 2014 15:35:35 +0100 > +Subject: [PATCH] ring: remove extra devices creation with --vdev option > + > +Upstream-Status: Backport > +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.gua...@intel.com> > +Acked-by: Neil Horman <nhor...@tuxdriver.com> (cherry picked from > +commit 546afbc6827f9f0f7ed501d2af1fc51755e40224) > +Signed-off-by: Sreeju Selvaraj <sreeju.armughanx.selva...@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..c17137b > --- /dev/null > +++ b/common/recipes-extended/dpdk/dpdk/dpdk-1.7.0-ring-simplify-unit-te > +++ sts.patch > @@ -0,0 +1,380 @@ > +From 545a5fac5d6bd0b64693dfcb15b321280418ac13 Mon Sep 17 00:00:00 2001 > +From: Pablo de Lara <pablo.de.lara.gua...@intel.com> > +Date: Wed, 9 Jul 2014 15:35:36 +0100 > +Subject: [PATCH] ring: simplify unit tests > + > +Upstream-Status: Backport > +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.gua...@intel.com> > +Acked-by: Neil Horman <nhor...@tuxdriver.com> (cherry picked from > +commit 572eb3cd834c5e21d7fa946432b89c1c9d63fe61) > +Signed-off-by: Sreeju Selvaraj <sreeju.armughanx.selva...@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..581f1d4 > --- /dev/null > +++ b/common/recipes-extended/dpdk/dpdk_1.7.0.bb > @@ -0,0 +1,41 @@ > +include dpdk.inc > + > +SRC_URI = "http://dpdk.org/browse/dpdk/snapshot/dpdk- > ${PV}.tar.gz;name=dpdk \ > + file://dpdk-1.7.0-examples-Add-config-variables-to-enable-disable- > dpdk.patch \ > + file://dpdk-1.7.0-examples-pipeline-build-with-all-examples.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}" > + > +# dpdk example apps dpdk_qat and vhost have dependancy on fuse and qat. > +# fuse is in meta-filesystems and qat is not yet upstreamed. > +# So adding mechanism to explicitly disable the use of fuse and qat. > +# To enable, uncomment the below line or include in .bbappend. > +# PACKAGECONFIG ?= " dpdk_qat vhost " > + > +PACKAGECONFIG[dpdk_qat] = ",,qat" > +PACKAGECONFIG[vhost] = ",,fuse" > + > +do_compile_append () { > + > + cd ${S}/examples/ > + > + # Disable the compilation of example apps dpdk_qat and vhost if they > are > + # not included in the PACKAGECONFIG > + export > CONFIG_EXAMPLE_DPDK_QAT=${@base_contains('PACKAGECONFIG', > 'dpdk_qat', 'y', 'n', d)} > + export > CONFIG_EXAMPLE_DPDK_VHOST="${@base_contains('PACKAGECONFIG', > 'vhost', 'y', 'n', d)}" > + > + > ###################################################### > ######### > + # 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@yoctoproject.org > https://lists.yoctoproject.org/listinfo/meta-intel -- _______________________________________________ meta-intel mailing list meta-intel@yoctoproject.org https://lists.yoctoproject.org/listinfo/meta-intel