From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM02-CY1-obe.outbound.protection.outlook.com (mail-cys01nam02on0076.outbound.protection.outlook.com [104.47.37.76]) by dpdk.org (Postfix) with ESMTP id 6B0FC1B31B for ; Tue, 16 Jan 2018 18:48:18 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=HHI1vl6B7qfDTXx6YTtzCaNYdi7czyM/hQpKuPLddug=; b=YVc7p6/r/G0G8koeVEhBdMuzvCr6T5lgoRSQvll0jl7f83n6ZdyuB4d5T2B02dfrsLXNiyubGRgn4VqLiv2eK2i/t8CBuKm/uJ85l9g8oXzrM+HNk5vRYMvsKmKdciITsCigMRxm4rnGxDoo/TvKzD+7xrmo0GBd7aamwKjFxfM= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Pavan.Bhagavatula@cavium.com; Received: from localhost.localdomain (111.93.218.67) by CY4PR07MB3464.namprd07.prod.outlook.com (10.171.252.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.407.7; Tue, 16 Jan 2018 17:48:12 +0000 From: Pavan Nikhilesh To: jerin.jacob@caviumnetworks.com, santosh.shukla@caviumnetworks.com, harry.van.haaren@intel.com, gage.eads@intel.com, hemant.agrawal@nxp.com, nipun.gupta@nxp.com, liang.j.ma@intel.com Cc: dev@dpdk.org, Pavan Nikhilesh Date: Tue, 16 Jan 2018 23:16:03 +0530 Message-Id: <20180116174607.10821-11-pbhagavatula@caviumnetworks.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180116174607.10821-1-pbhagavatula@caviumnetworks.com> References: <20171130072406.15605-1-pbhagavatula@caviumnetworks.com> <20180116174607.10821-1-pbhagavatula@caviumnetworks.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [111.93.218.67] X-ClientProxiedBy: HK2PR02CA0158.apcprd02.prod.outlook.com (10.171.30.18) To CY4PR07MB3464.namprd07.prod.outlook.com (10.171.252.145) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8cb68018-2de5-41a2-ff1a-08d55d0952b3 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(2017052603307)(7153060)(7193020); SRVR:CY4PR07MB3464; X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB3464; 3:HKBUSGyatIV17AbWLJ/liTO42YP1Awzu56l3LoUcrK3FY8urSigRWoVt9qZgtFzTzj8vdPFtzLXhA7/ZDR+Uv/uXc2NiXGhSLScSNV1cFo/LRr/PFlL8adfBjP7/jCQiDBnzB3uwDnmWvZOblkDxpIFGwbEoUzztmbkCAQTefRhuO5BrtgJHgdVxSJh65rkfezSEdTcPCEbMtW1xwwCehub1Pd40KcPfGEFKgA4wsD2LeWxlK6jaQiqmV7pYhZRL; 25:jyAyX+ATjOlMK7BtYoB3wisCPEolEvMK5hmAZh5q+FexhZN1DH+SiVhsYmMG+AD26/JwiJfgtNmg2FGuFYeRStmJif+nSeDa9HrsmM6hvXeeircIOE2378tYMr5st5IBbv7QnlwT7L1M9DzZjBprAjNQ7++s5db8OsMa6D57WNoUpcw2KRm+1gHMdbz8r/CBNdws67/VLrPeCrn8P4aV7Av4wDzE4jAnSg1N24xlFHgL997GGBNTSUS8PspDEl5rE5e3h1NbMItd/zHSvtfxg1Wu6HSKsqlBN5hTT20rYM3iNTiD4AvKuiKz0h0XG083dDZprxXEwWBpFBVSebl1bQ==; 31:6HN9HnCT7fh+MOBrfgUhzCj69YoVg9dq6kQ+eASb+MIwGGRtfbMrqmwKC1nDk0DQRWlaepqPGdv+owCdUeE+d0DUCvi1WDRx3ga5WzoWX4yru8IlFFvjCsn00d3DbBfXjOMOadVTbxdd4szSeE+Wtei50SM13yuW8mRg+LPRfToqbeu7apKa/gmyNn4pm3BYKUk8uKh9PyrfoBYn4ToVfRjiLJhVz9IcUQU6cAdemY0= X-MS-TrafficTypeDiagnostic: CY4PR07MB3464: X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB3464; 20:S3/+orZw44GPMEfUzDI/amUFB3pOLpK0iM1z/UYSPnfOj/Mxjh+HHBH8PY4YDDXfhE4Fc8O/FCWsfiPMxN+g/DBuqdTMUo8aD0y09Luw19fkX86GTdcZkJ+AS+4nUx5M9N3dt2cUZShhzWxEiyNjhT15sB66Dr8IX3Gk3g9z38p6xOkWK13SeU7A1PeipU1eZJysF/IkQoGv60rZ21aF3YboZqGx3MhCkp/6lC2+JRguieP3Mx1WoJBaZBO8QbhToSi5CszAcqr06qLo3oO60G8UHQemQMo1QhC1IvvJpBiUze/7D1x6oQYo8WQV/HipU3ukh9cpuU/IECd+bPXHjvRg8xvad6AjFSNDCeA9w2Cra93mK6hfOWZS5SkCedt0d4iB6nZQnjZvXUIW8EAjOQ+X0YFr/yCmyfbjkQhIdDRhZ1QxbTmsZnbHInXSPO8HYKWo1khTfxzxQHhaz5QSkQMOYvQGalGG0MmE2u/jV84/458oBWYkrlUiCharUCC8GaWMijJaKzF5iUhpFNA6kgjzKOcHkkus50VbK3dy3z3g9jq+ASzTM8Li629ofwCUfNzH0OTDMIB3pmPNHHSUYnGKGwVEwvqzY+vnASxLdnM=; 4:HPdAVczB4WI/ANDDZKMd9xEjC3rtyBYMkaAn8liY5B5yu73jzqa085pidPgkDs94f2SGOC54JvZUqvvPfSf/hDIjJYBlTIRz8ULHKpy85KsMQVuX3zxdQgv3+OFHOgAYweedAXnNUC4dMiWTie/auK67n63m7hsDBGQUqV9+WvQ40JB4mxDgB7Ne8//h75f3MSp2kY9+4oD2aiPkH7FRQqmUla+jsDgQIncOt/CKDpNQeWTYyEpEVF6Gmuf0mHwXjL9Kv/SGRBeD1xvMKPdQTA2oIvKFPzKDfjaN5Feed+M8/m9ApEE6qWc1LESHd6N5 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(228905959029699); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040470)(2401047)(5005006)(8121501046)(3231023)(944501161)(93006095)(3002001)(10201501046)(6041268)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123562045)(20161123558120)(6072148)(201708071742011); SRVR:CY4PR07MB3464; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:CY4PR07MB3464; X-Forefront-PRVS: 0554B1F54F X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6069001)(346002)(366004)(39860400002)(376002)(39380400002)(396003)(189003)(199004)(81166006)(97736004)(8676002)(6116002)(5009440100003)(52116002)(305945005)(8936002)(107886003)(1076002)(53376002)(51416003)(81156014)(25786009)(8656006)(4326008)(19273905006)(50466002)(6486002)(5660300001)(3846002)(7736002)(50226002)(16526018)(68736007)(106356001)(26005)(76176011)(6306002)(53936002)(6512007)(59450400001)(47776003)(48376002)(16586007)(386003)(6506007)(66066001)(72206003)(2950100002)(36756003)(966005)(2906002)(105586002)(478600001)(316002)(6666003)(42882006)(42262002)(562404015)(563064011); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR07MB3464; H:localhost.localdomain; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY4PR07MB3464; 23:9xQY4aNQ+HTCCs4jqnZvO9BYCw3IvIUZIrykYyVUZ?= =?us-ascii?Q?YTFM1P2ur9Fg0Cx52n9QlAB8s50Nc/rcKZOOcvKwTJpFvQjBtUe5DjaEvaVl?= =?us-ascii?Q?dJA8PR/orrUhz8PVZKzqdscsTyOtqx2GIChcC+cL1eZzmY/rsM1qHuLhsmrg?= =?us-ascii?Q?3XlBLZ+80FZyH4z3ZHOKfEQJE5ouy5+aKVDjKYcnnQyfgyPwM9VtX92vrQcc?= =?us-ascii?Q?qxSAQEWURCojiBlLlFhzl+QT2Vw1Y6cFgr0QhIG2LEVtHsHRyR5E5ySFEbtP?= =?us-ascii?Q?ly7i6e+kFumRpNNDR94BFVpymepK3owkKcQ8sdvNe39CbDrQXU0xsm2P+mM9?= =?us-ascii?Q?3fz0KA+OX37Uxb+NdIBq3zQX/238NTdovVx2XQDF6HEbS7unjG7ZLbhhrhcT?= =?us-ascii?Q?BahtWjZfLAT4J10t49Vm7UIVtp3Zvy4ONghgIRj6fZGTiPGZnvhwIXa/kLNB?= =?us-ascii?Q?+hcXdnCPSvN2cw4F4/bUcO2bmJUIS7FZiH/kPuKzfGAt2LpFCA7a75PSGZrE?= =?us-ascii?Q?hxZUozPnFI578z+ukyxeg2HO0LsujvSbtPV+2UQm7uPgzoKP0foYkay5kNDf?= =?us-ascii?Q?y4hD8KGzHUeNetHUXP/hAshstRv4qsKsQguhtgb5JoEJOW8PoHXyxAVz0BeZ?= =?us-ascii?Q?nd9vaCJcTWzzbaR7Y/qWrejo1sgM7lpMUphoHi3HHkLkWq0SiC+jR9vVt61w?= =?us-ascii?Q?DAWYCWTMdIE3x9R3Vodac3pVhwFGE0P07BUj6VbTfLZQm57Iz6gXKY90+Z1g?= =?us-ascii?Q?AMZIePYWQyDT85+HiroYa7IOOY09k10VTtq/m4tVrV1eAIuPoBlrEgvqv5mT?= =?us-ascii?Q?qovbS09YE1tqSPet9QwAxyz3CZ5MsZXveRZqAp7QAzRzrc7UvRuYZAg5PHUk?= =?us-ascii?Q?PlF6sXeo5lTxbmTcOLjS2svOBRh+KIS9Rpu3f6f0nqniSO3eyigyRJqzyh4O?= =?us-ascii?Q?dkHeGp22dNMg7fsjw5EwpqUnew6y97yxAaAPbTiJ+MZWrBXbMZT9OyL/UXMu?= =?us-ascii?Q?hiGs/CXTgUgckdhQ8iPAO4zbWy2nkEss1Fyj+pdLTJRHGg25sWrNGhjrmso3?= =?us-ascii?Q?K+y3tSjAbfIg/MCenrMkPSdSm4UvIdiPOYWXZT3knYmBoWcSBZaKlh0CFndV?= =?us-ascii?Q?ApmxVDwLQ/GtW1xTbbGT2ckPAwieu/bGKPx4Dad8H62dKep/16PYRiPImwvV?= =?us-ascii?Q?IVQZfY26F7P07FcByo64viV9S7O1Ow3Lo5Sz3OUayaXsjusGzOFcG8AisflH?= =?us-ascii?Q?VYSa3EPR5JKuSESvfW/39mdkuEkqyJr3qqP9m0DvMXybhqcIljdNxbngh50U?= =?us-ascii?Q?wI1zP1AYHCCslTFvR7vPzC8NiEXI6dBi9ZZTnRskJV1PYjMwTWrJAS1yrqzq?= =?us-ascii?Q?tMcr25HjTvYoV/cv+5TRUOdJ+I=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB3464; 6:PFuZXUHCZT8Gjr104r2omltMzgc0LdeN3c4x3GePnbAWMAac5XE1WdVlCiGfK+2pk6KsabBrsKyxCkyBdXrvL30Sfv+p2moFvZ/LnC+cEF2VoXNiyOznT8rHeHdjMBFwetWph6cdPLAGU3cp0eFvydDpg7Qa9HA2Ans3Hmg7MLGwqb0OijZ8mETJW3RZOu6/NG/u0kdzz1PZL1+bXnKpAI+fI5QX4HMO4U/Evp5xbCeBIiRzWTIV+u3Ox4uhtIo8j674KzupKR0UleguSN78rnzSRCZEMVAz1r+GRaKb8jDANsLZMBIPoaFjJud+9IdWSaeSj33ivxd58ynxVspei3Bf7tJvUY8eOFhJAdcg5k0=; 5:20P567ypEcFX9J+Z8IGNBWunmPJoOjl7vBBGnr5Vao+Y/ev810h+OHyCPWQUzNPydyKLXwLRhRD4ERdVmGZg1P4rOlbullfx6NdrUe64rD9k68iihNNDHN8mtUZ6polwtxA4dkYj/SsVVNCMmmSNxejIJdJ3y1+sEqGMx+Pubw4=; 24:2tb8pe7OzwuNnPQKEicszr4vBFh7V+4CX70eMrix8dFTMocutN4JXh7jisyBeF5hbXU/kUB3PZ413DyXoOeGVaVvLqMshOVMQ35sHdbHvao=; 7:s0431YBGSzJHZ5BpxAcNZLr6q08WRBHK1yXLiu1jwhvcQnaBLqRZgNfFvKUFyXvkJEJwRrFA4Yt+/ms8MNTTo4EKdAfdU04njKAC62B6gREuLbfZ/jhLAia4Orge/xljs+dhDRNTRRkNj9fftJu0cILDPFxG3vuk+1IY5lX8llY0El6YMNhSRbcN/cXwW7l6pyuZd60BVzgBLB5zjSDR5sOQ78EKCBHbkhBcMmlmwfeQGd/ys/rxQk/tZwBF+0x0 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jan 2018 17:48:12.5159 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8cb68018-2de5-41a2-ff1a-08d55d0952b3 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR07MB3464 Subject: [dpdk-dev] [PATCH v7 11/15] app/eventdev: add pipeline atq test X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 16 Jan 2018 17:48:18 -0000 This is a pipeline test case that aims at testing the following with ``all types queue`` eventdev scheme. 1. Measure the end-to-end performance of an event dev with a ethernet dev. 2. Maintain packet ordering from Rx to Tx. The atq queue test functions as same as ``pipeline_queue`` test. The difference is, It uses, ``all type queue scheme`` instead of separate queues for each stage and thus reduces the number of queues required to realize the use case. Note: The --prod_type_ethdev is mandatory for running the application. Example command to run pipeline atq test: sudo build/app/dpdk-test-eventdev -c 0xf -s 0x8 --vdev=event_sw0 -- \ --test=pipeline_atq --wlcore=1 --prod_type_ethdev --stlist=ao Signed-off-by: Pavan Nikhilesh Acked-by: Harry van Haaren --- app/test-eventdev/Makefile | 1 + app/test-eventdev/test_pipeline_atq.c | 223 ++++++++++++++++++++++++++++++++++ 2 files changed, 224 insertions(+) create mode 100644 app/test-eventdev/test_pipeline_atq.c diff --git a/app/test-eventdev/Makefile b/app/test-eventdev/Makefile index 94b489f41..e600e21c4 100644 --- a/app/test-eventdev/Makefile +++ b/app/test-eventdev/Makefile @@ -27,5 +27,6 @@ SRCS-y += test_perf_atq.c SRCS-y += test_pipeline_common.c SRCS-y += test_pipeline_queue.c +SRCS-y += test_pipeline_atq.c include $(RTE_SDK)/mk/rte.app.mk diff --git a/app/test-eventdev/test_pipeline_atq.c b/app/test-eventdev/test_pipeline_atq.c new file mode 100644 index 000000000..6c9ac6119 --- /dev/null +++ b/app/test-eventdev/test_pipeline_atq.c @@ -0,0 +1,223 @@ +/* + * SPDX-License-Identifier: BSD-3-Clause + * Copyright 2017 Cavium, Inc. + */ + +#include "test_pipeline_common.h" + +/* See http://dpdk.org/doc/guides/tools/testeventdev.html for test details */ + +static __rte_always_inline int +pipeline_atq_nb_event_queues(struct evt_options *opt) +{ + RTE_SET_USED(opt); + + return rte_eth_dev_count(); +} + +static int +worker_wrapper(void *arg) +{ + RTE_SET_USED(arg); + rte_panic("invalid worker\n"); +} + +static int +pipeline_atq_launch_lcores(struct evt_test *test, struct evt_options *opt) +{ + struct test_pipeline *t = evt_test_priv(test); + + if (t->mt_unsafe) + rte_service_component_runstate_set(t->tx_service.service_id, 1); + return pipeline_launch_lcores(test, opt, worker_wrapper); +} + +static int +pipeline_atq_eventdev_setup(struct evt_test *test, struct evt_options *opt) +{ + int ret; + int nb_ports; + int nb_queues; + uint8_t queue; + struct rte_event_dev_info info; + struct test_pipeline *t = evt_test_priv(test); + uint8_t tx_evqueue_id = 0; + uint8_t queue_arr[RTE_EVENT_MAX_QUEUES_PER_DEV]; + uint8_t nb_worker_queues = 0; + + nb_ports = evt_nr_active_lcores(opt->wlcores); + nb_queues = rte_eth_dev_count(); + + /* One extra port and queueu for Tx service */ + if (t->mt_unsafe) { + tx_evqueue_id = nb_queues; + nb_ports++; + nb_queues++; + } + + + rte_event_dev_info_get(opt->dev_id, &info); + + const struct rte_event_dev_config config = { + .nb_event_queues = nb_queues, + .nb_event_ports = nb_ports, + .nb_events_limit = info.max_num_events, + .nb_event_queue_flows = opt->nb_flows, + .nb_event_port_dequeue_depth = + info.max_event_port_dequeue_depth, + .nb_event_port_enqueue_depth = + info.max_event_port_enqueue_depth, + }; + ret = rte_event_dev_configure(opt->dev_id, &config); + if (ret) { + evt_err("failed to configure eventdev %d", opt->dev_id); + return ret; + } + + struct rte_event_queue_conf q_conf = { + .priority = RTE_EVENT_DEV_PRIORITY_NORMAL, + .nb_atomic_flows = opt->nb_flows, + .nb_atomic_order_sequences = opt->nb_flows, + }; + /* queue configurations */ + for (queue = 0; queue < nb_queues; queue++) { + q_conf.event_queue_cfg = RTE_EVENT_QUEUE_CFG_ALL_TYPES; + + if (t->mt_unsafe) { + if (queue == tx_evqueue_id) { + q_conf.event_queue_cfg = + RTE_EVENT_QUEUE_CFG_SINGLE_LINK; + } else { + queue_arr[nb_worker_queues] = queue; + nb_worker_queues++; + } + } + + ret = rte_event_queue_setup(opt->dev_id, queue, &q_conf); + if (ret) { + evt_err("failed to setup queue=%d", queue); + return ret; + } + } + + /* port configuration */ + const struct rte_event_port_conf p_conf = { + .dequeue_depth = opt->wkr_deq_dep, + .enqueue_depth = info.max_event_port_dequeue_depth, + .new_event_threshold = info.max_num_events, + }; + + if (t->mt_unsafe) { + ret = pipeline_event_port_setup(test, opt, queue_arr, + nb_worker_queues, p_conf); + if (ret) + return ret; + + ret = pipeline_event_tx_service_setup(test, opt, tx_evqueue_id, + nb_ports - 1, p_conf); + } else + ret = pipeline_event_port_setup(test, opt, NULL, nb_queues, + p_conf); + + if (ret) + return ret; + + /* + * The pipelines are setup in the following manner: + * + * eth_dev_count = 2, nb_stages = 2, atq mode + * + * Multi thread safe : + * queues = 2 + * stride = 1 + * + * event queue pipelines: + * eth0 -> q0 ->tx + * eth1 -> q1 ->tx + * + * q0, q1 are configured as ATQ so, all the different stages can + * be enqueued on the same queue. + * + * Multi thread unsafe : + * queues = 3 + * stride = 1 + * + * event queue pipelines: + * eth0 -> q0 + * } (q3->tx) Tx service + * eth1 -> q1 + * + * q0,q1 are configured as stated above. + * q3 configured as SINGLE_LINK|ATOMIC. + */ + ret = pipeline_event_rx_adapter_setup(opt, 1, p_conf); + if (ret) + return ret; + + if (!evt_has_distributed_sched(opt->dev_id)) { + uint32_t service_id; + rte_event_dev_service_id_get(opt->dev_id, &service_id); + ret = evt_service_setup(service_id); + if (ret) { + evt_err("No service lcore found to run event dev."); + return ret; + } + } + + ret = rte_event_dev_start(opt->dev_id); + if (ret) { + evt_err("failed to start eventdev %d", opt->dev_id); + return ret; + } + + return 0; +} + +static void +pipeline_atq_opt_dump(struct evt_options *opt) +{ + pipeline_opt_dump(opt, pipeline_atq_nb_event_queues(opt)); +} + +static int +pipeline_atq_opt_check(struct evt_options *opt) +{ + return pipeline_opt_check(opt, pipeline_atq_nb_event_queues(opt)); +} + +static bool +pipeline_atq_capability_check(struct evt_options *opt) +{ + struct rte_event_dev_info dev_info; + + rte_event_dev_info_get(opt->dev_id, &dev_info); + if (dev_info.max_event_queues < pipeline_atq_nb_event_queues(opt) || + dev_info.max_event_ports < + evt_nr_active_lcores(opt->wlcores)) { + evt_err("not enough eventdev queues=%d/%d or ports=%d/%d", + pipeline_atq_nb_event_queues(opt), + dev_info.max_event_queues, + evt_nr_active_lcores(opt->wlcores), + dev_info.max_event_ports); + } + + return true; +} + +static const struct evt_test_ops pipeline_atq = { + .cap_check = pipeline_atq_capability_check, + .opt_check = pipeline_atq_opt_check, + .opt_dump = pipeline_atq_opt_dump, + .test_setup = pipeline_test_setup, + .mempool_setup = pipeline_mempool_setup, + .ethdev_setup = pipeline_ethdev_setup, + .eventdev_setup = pipeline_atq_eventdev_setup, + .launch_lcores = pipeline_atq_launch_lcores, + .eventdev_destroy = pipeline_eventdev_destroy, + .mempool_destroy = pipeline_mempool_destroy, + .ethdev_destroy = pipeline_ethdev_destroy, + .test_result = pipeline_test_result, + .test_destroy = pipeline_test_destroy, +}; + +EVT_TEST_REGISTER(pipeline_atq); -- 2.14.1