From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM03-DM3-obe.outbound.protection.outlook.com (mail-dm3nam03on0082.outbound.protection.outlook.com [104.47.41.82]) by dpdk.org (Postfix) with ESMTP id C0D6A1B2E4 for ; Tue, 16 Jan 2018 16:18:51 +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=5C8YyjFa54dJ1A79NPRAsYXG3TCFuff8jJ15nnwD61Q=; b=CYf1Bl7i3ixGXYBAyCnpS2J4en1lD0xTG9utDS3qz3Jqlm4KE8UT6oUki+U0+fGBfTz4kJdPSAfYUtLz3he+Ejh4YCwgrdOWHMyMAKin0wgVSkiFkuMSGUH5rTOQVloNvyCPCIFDnxHbmXi+mbEx9f9uBTk8DsemwPgmo9llBhc= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Pavan.Bhagavatula@cavium.com; Received: from Pavan-LT.caveonetworks.com (111.93.218.67) by MWHPR07MB3469.namprd07.prod.outlook.com (10.164.192.20) 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 15:18:47 +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 20:47:27 +0530 Message-Id: <20180116151728.566-12-pbhagavatula@caviumnetworks.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180116151728.566-1-pbhagavatula@caviumnetworks.com> References: <20171130072406.15605-1-pbhagavatula@caviumnetworks.com> <20180116151728.566-1-pbhagavatula@caviumnetworks.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [111.93.218.67] X-ClientProxiedBy: MWHPR21CA0059.namprd21.prod.outlook.com (10.172.93.149) To MWHPR07MB3469.namprd07.prod.outlook.com (10.164.192.20) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 26aa32af-a3fa-4062-c295-08d55cf47205 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(2017052603307)(7153060)(7193020); SRVR:MWHPR07MB3469; X-Microsoft-Exchange-Diagnostics: 1; MWHPR07MB3469; 3:LYhjFzWl1AMsbcikQiFkeTdutxg6MExluZiM3zRaRj4bBJRyIRKRyKXz4/gl80vjwVSwaagfHELKDRos9JaqCJHBRdNQuB214eIxWdEn+3av41z8TPU5xnsUs1VkuLsusxezgv7YkOdKXhzSG3azewzeuK3wq/nHYaT5dXoKRy8w+9Cm3BiF7kj3ycobSCbF6NfIPzZSWGRqxUIzqHLn8AzJuu+xV5rNULG6Yk+ENL5jV2E20AxM6n5OHAf5ecaZ; 25:fKeYqF/74gMvFmt0LpvHjKSbvKz3JsoSEydE2mUp+0ti8lPoedm2zVVgwekoAknK5x6fHYk8aJ+bxmB0sKfw8xXB0GJQCWMX0SRh8mujLgt9SNFOce/blQGe+wIJSunl/0h4njQrB0bFv3Woi1gvJGWPFiDkG8BFsK6T9E0rkBcVX3FM50u/AgrPMXuEetg53Gjjcejp8UVvy1kE6zMBGG9ivQ5p1G2KGjh6jGSfQEwhyEgtBe4Cc7CZMiYi2/kb+El5+Pm3CWkuvvTHWlq6hF02Ili7fLCc3wV7HkMRg197diQ2lenchALpNSFVG/SwJhEmZSMmBdB76MZ/3pYJWw==; 31:XCrl6yzyL+QavhelTwCIlBIaMrfYP1CgvGJqVziGm9JesNCoPnADJkTE9/OsEO/zVU8nIvhUmyPkUJM/D1tkqnpDMBbtlK7v/0iE1p0g6dEm32xUnSK9QIfZ4CigIy6/XGjafLwFTXqOLhhBVi1YwQ9dyCTq5P8v4P+7y1uv1XXfVYh5HWqGFRI+JLSwqW3cB+4y03NaR+hPJgy3CeL2aNXlLhDQ0hPb5cJXJ+SJHhc= X-MS-TrafficTypeDiagnostic: MWHPR07MB3469: X-Microsoft-Exchange-Diagnostics: 1; MWHPR07MB3469; 20:CdaBQvdrLVAZU0/KA5pOCwPnVXItaFuyCqndSVI4fTpTRq13jix1p7DeGnNuzvHj0iY44AZcHhGnNBQY9nsdtVewmNojbzp82vdhIguLdQJPEks8WDwwOp+Qk1jr52p8p2Z5yEX3bmvlV3GzJPhCDcq1/e+Hzn4XTLVffHT/AxSoC82H9SjdP0xjZmPDntFhxMUUlFwmTE7tgXmQwPKPNCH3iNuPT1QHMXvmpV4kAUjsT8B7bvovSmagOHU174hYYMhg0YmyZmav67IBhsCjYdyH2BKfKWErKWlNEviHkpfXywj8yTX/1A/CATqw9ZZr+z3CJqEODl+Am+VGk0m2u/3CLclkTBKlO37N+AYKjFbtxsc34uUsIfwEi6uEfbEVgcV6JpKNYBlpIbABuDLGsE/NOa+4QXOa3v0wZVC0ZVJcrBuSZTqJuRo6DlW336PMtBvoaVc5DhHfEmKu3pJS7Pwru1DC3lOOeXRI0RinFjwiPosxgVYN1OvLfSimzqp7ovkyUQ4s+qYRr1594XEZal7bKts82k1aXgmQN4H891uuXcAiGQWtVt/7srVsGvr1fT7BUEEj4pulmodJzHncn/vGZ6cPqn5GFXCFkweDEM8=; 4:QplaWaww3qqQD6bPtRKmdtWJoH1aNyzl6ZGQd/eQWeuP548AQwOtehy7dGkSe7aSiJuGPxxZMuTKhaU0O+7J1b3JS2f/6ojQqbuZEwBukhRDzckxkiNzmHInaVVdPYy7yWA8M5z3pfeS/ubthoKcfqzitk+0K4rWxBeT5wVPJh2POLYZaQrnLmyqLOQ01auWyrgDm/tAIT4q3OyTuZFzXilMrqx25auqrvw+V+zWuWfBsUJckszlJcdSMlVI0/g2OZkrnRHfXMdRbkF7kkgLGg== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040470)(2401047)(8121501046)(5005006)(3002001)(3231023)(944501161)(93006095)(10201501046)(6041268)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(20161123560045)(20161123558120)(6072148)(201708071742011); SRVR:MWHPR07MB3469; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:MWHPR07MB3469; X-Forefront-PRVS: 0554B1F54F X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(396003)(346002)(376002)(39380400002)(39860400002)(199004)(189003)(2950100002)(4326008)(42882006)(5009440100003)(6666003)(107886003)(25786009)(68736007)(16526018)(72206003)(478600001)(316002)(5660300001)(16586007)(26005)(50226002)(53936002)(7736002)(305945005)(36756003)(53416004)(6116002)(81166006)(8656006)(69596002)(8676002)(6512007)(81156014)(8936002)(97736004)(386003)(6506007)(50466002)(66066001)(76176011)(59450400001)(52116002)(51416003)(2906002)(47776003)(48376002)(106356001)(3846002)(1076002)(105586002)(6486002)(42262002); DIR:OUT; SFP:1101; SCL:1; SRVR:MWHPR07MB3469; H:Pavan-LT.caveonetworks.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX: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; MWHPR07MB3469; 23:0zTJKCtZWfy2vlRHV5m48i2UQWCSsKniwkjnpuQzu?= =?us-ascii?Q?v8uV2RVtA7eBi+vDcEScosLAuBAduD1PnzEQuIVxL7ALC336vdv7g+FUzrTO?= =?us-ascii?Q?ex5doEtkTXxAmTk1Qu7fVZ7tdocxG8eDB5vHtX5x4I3Nut+7xYysHwe74M7X?= =?us-ascii?Q?N5GFXw5/hHerSEGlJkle4NFKtSCgo6bb31RHA7kxtRrbJsgl7OZQWohytWoS?= =?us-ascii?Q?SR23q7KgmG79DWa0FqY1ocbPnq7vp/zssubRr5dOVg6F0zD4UxSnE7VzNbcD?= =?us-ascii?Q?PVWRleoJbXffBhM/6E+vYvwldbSoWz+kr7JuRB75xocPT2Vm67A6NkeIgADb?= =?us-ascii?Q?c68sODBZj2lQYL4V7uI0MnN9PFzLzU9S2WAGI3reZF6PL3/b2T9zolcwNgLn?= =?us-ascii?Q?UJfiBJPO0EVUPmYlW6UCY/4tmJDqHMMwKng9+YJ6eINQfH0lH87JuYD897B6?= =?us-ascii?Q?wykOzeVfsmjH0zFsOKeDUNjenC2OcXhggW8CYM7h/HkeWBva6iSpjOUNZ1LF?= =?us-ascii?Q?jyDkdbj4nf8Vbt2maGE912/Y9InmnTDgifRZ9ORnq5Klly1WZ/oFEgvyRp4z?= =?us-ascii?Q?hr0OFfG3/sq1YpMBIGN2VApsvmsM+vpgBrK+KKgzUEPAJINt36fOyAVD3u9F?= =?us-ascii?Q?XfoJGqh/jz6LLxxPTCa/LIqT9+qzUazODjTK/cPZTgFEnJTZ7o4Q2G8xYeRw?= =?us-ascii?Q?gn+AmJD2vbJ0JPMfIjOMLHKAjA+ZOT7XodVF7Y4uNcAeaNfLQNNrZ/i+AhV1?= =?us-ascii?Q?3/7Kk3tDqjDM26yOkDbx5aNac7sQqeWO+oIq4TEo2cykTTbfMTimC0PKR5JI?= =?us-ascii?Q?ISXQKodVtJVC88s69e06844Y/KVFH6ZLAlMUA/RMbnquzM51aZ3AXeHDWBdK?= =?us-ascii?Q?8XmvDJfIwaSBgzZSVCqkoMwQeZpH4o5gPsjPQ3iQyGlfsQ+G4K3wu4H9YPcv?= =?us-ascii?Q?R6kfXgRjZROkrn69qJJlTBF6hCmUUuNTMU6awvs4jl0kG84eCwpKnrpAs87D?= =?us-ascii?Q?rTAJL5YtiszVZb+4hFmcONmJINCXzkm1WVsw0/nWjwbnLZKyFZM6KeAVwrvU?= =?us-ascii?Q?Nvfi1R3I4KIl8k24VUglREYqmiHTzkiR475uZVPTYnV2vFTxOfZeOF5Aewo3?= =?us-ascii?Q?VynAzwAygK4Rudz6Ohnk7vLrJn/P7md6+wqBZRBdkZhP2xnSO/Y1zbUCKi6P?= =?us-ascii?Q?UiVt3/XifLZuDnm5fFriiobFqgypCiT85S7Cj5aiKzji0qQN6enLM5b8Mw7N?= =?us-ascii?Q?FzTN2oa/7HmKYvpcVgzO5iE8GUvECrmJVjURWFY?= X-Microsoft-Exchange-Diagnostics: 1; MWHPR07MB3469; 6:v60T8BCUfNAF5ac5xyQGgwxM1UAUEbBX8xjxWzO+/N0a6nE/EtZ0yAd2wlKcOJRUEiCpodHxWEz0dbuRpe8Y0MYrS6HvAjmUnrpT/XSpeP9khDUG33gV1lxA7Rv4vc8adPvSSk7T7g9IKQ/km3z93xN4QggV3pfHepgfnH9x0VpmgscQKcI4q/mZ1/rtoqnC2m3hn2GrJV+5ADLv4kjBlDeTom/mSMFGaVVUqAc8l4llijuPlIy8HHhVBzWJ5HuT9b/J6KJjDSUe9DTgJ8ro+QucVkjp73Fc4nvj/mLJL33YbYo0KVDhfWj0lbC1c3pTChThJ2bFwc4Cr9SwL/RKwOvLD/QeitDp0bBNe3yl66k=; 5:oZXbNWCMSCeRNiBuZWfrhiLu5BONeQe2+izsjx5dSxZAulRKXTTJQNuskMWGOG1bROu6te7eEAhRrfchfQtaG2j7pESfC0/XtJALJV+GMqHbnbPNB74qBgIwS5th0uVKYvh4bq9F0T92CupDguGkFzlzJhPT8ILSV4LJ5A80hQo=; 24:djR80WZ9MtNMaXfI/K1E+gjQANPDHL2AWQpsMCTMel3kygspBOcfbDW/Rml2jeh71nq+NKR+PZsz9/Qp54DPjN0Mot9L0vVD4vMBIe41yj4=; 7:UKnDZSaAwzDT3wv2QgARKc5y/iPSUjaUkRROPyTTIoPKTKk4Yfy8mgq1CJp9CJv3A80REG2kIMBANBHXnF9pNXsmWmhTXsqBWOkuTjMQu7sR6xuRzakXCnXVt5L5Im9VVqYwPE5BMlSsrUJGqcKDObMKfxc/H8XRm05ZfjUqaPZqpflahtVDNSUnP4Xeef9bjKhNJlUCeqLqGj+9nuqVaWBQtdlMhpysnwDP2GkJA9N9aY2FD9BQ1QdMkyO3x+Vd SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jan 2018 15:18:47.4110 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 26aa32af-a3fa-4062-c295-08d55cf47205 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR07MB3469 Subject: [dpdk-dev] [PATCH v5 12/14] app/eventdev: add pipeline atq worker functions 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 15:18:52 -0000 Signed-off-by: Pavan Nikhilesh --- app/test-eventdev/test_pipeline_atq.c | 280 +++++++++++++++++++++++++++++++++- 1 file changed, 279 insertions(+), 1 deletion(-) diff --git a/app/test-eventdev/test_pipeline_atq.c b/app/test-eventdev/test_pipeline_atq.c index 6c9ac6119..36abbddda 100644 --- a/app/test-eventdev/test_pipeline_atq.c +++ b/app/test-eventdev/test_pipeline_atq.c @@ -15,10 +15,288 @@ pipeline_atq_nb_event_queues(struct evt_options *opt) return rte_eth_dev_count(); } +static int +pipeline_atq_worker_single_stage_tx(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_INIT; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + pipeline_tx_pkt(ev.mbuf); + w->processed_pkts++; + continue; + } + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + pipeline_event_enqueue(dev, port, &ev); + } + + return 0; +} + +static int +pipeline_atq_worker_single_stage_fwd(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_INIT; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + w->processed_pkts++; + ev.queue_id = tx_queue; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + pipeline_event_enqueue(dev, port, &ev); + } + + return 0; +} + +static int +pipeline_atq_worker_single_stage_burst_tx(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_BURST_INIT; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt(ev[i].mbuf); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + } else + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + + return 0; +} + +static int +pipeline_atq_worker_single_stage_burst_fwd(void *arg) +{ + PIPELINE_WROKER_SINGLE_STAGE_BURST_INIT; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + ev[i].queue_id = tx_queue; + pipeline_fwd_event(&ev[i], RTE_SCHED_TYPE_ATOMIC); + w->processed_pkts++; + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + + return 0; +} + +static int +pipeline_atq_worker_multi_stage_tx(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_INIT; + const uint8_t nb_stages = t->opt->nb_stages; + + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + cq_id = ev.sub_event_type % nb_stages; + + if (cq_id == last_queue) { + if (ev.sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt(ev.mbuf); + w->processed_pkts++; + continue; + } + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + } else { + ev.sub_event_type++; + pipeline_fwd_event(&ev, sched_type_list[cq_id]); + } + + pipeline_event_enqueue(dev, port, &ev); + } + return 0; +} + +static int +pipeline_atq_worker_multi_stage_fwd(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_INIT; + const uint8_t nb_stages = t->opt->nb_stages; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + + if (!event) { + rte_pause(); + continue; + } + + cq_id = ev.sub_event_type % nb_stages; + + if (cq_id == last_queue) { + w->processed_pkts++; + ev.queue_id = tx_queue; + pipeline_fwd_event(&ev, RTE_SCHED_TYPE_ATOMIC); + } else { + ev.sub_event_type++; + pipeline_fwd_event(&ev, sched_type_list[cq_id]); + } + + pipeline_event_enqueue(dev, port, &ev); + } + return 0; +} + +static int +pipeline_atq_worker_multi_stage_burst_tx(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_BURST_INIT; + const uint8_t nb_stages = t->opt->nb_stages; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + cq_id = ev[i].sub_event_type % nb_stages; + + if (cq_id == last_queue) { + if (ev[i].sched_type == RTE_SCHED_TYPE_ATOMIC) { + + pipeline_tx_pkt(ev[i].mbuf); + ev[i].op = RTE_EVENT_OP_RELEASE; + w->processed_pkts++; + continue; + } + + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } else { + ev[i].sub_event_type++; + pipeline_fwd_event(&ev[i], + sched_type_list[cq_id]); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + return 0; +} + +static int +pipeline_atq_worker_multi_stage_burst_fwd(void *arg) +{ + PIPELINE_WROKER_MULTI_STAGE_BURST_INIT; + const uint8_t nb_stages = t->opt->nb_stages; + const uint8_t tx_queue = t->tx_service.queue_id; + + while (t->done == false) { + uint16_t nb_rx = rte_event_dequeue_burst(dev, port, ev, + BURST_SIZE, 0); + + if (!nb_rx) { + rte_pause(); + continue; + } + + for (i = 0; i < nb_rx; i++) { + rte_prefetch0(ev[i + 1].mbuf); + cq_id = ev[i].sub_event_type % nb_stages; + + if (cq_id == last_queue) { + w->processed_pkts++; + ev[i].queue_id = tx_queue; + pipeline_fwd_event(&ev[i], + RTE_SCHED_TYPE_ATOMIC); + } else { + ev[i].sub_event_type++; + pipeline_fwd_event(&ev[i], + sched_type_list[cq_id]); + } + } + + pipeline_event_enqueue_burst(dev, port, ev, nb_rx); + } + return 0; +} + static int worker_wrapper(void *arg) { - RTE_SET_USED(arg); + struct worker_data *w = arg; + struct evt_options *opt = w->t->opt; + const bool burst = evt_has_burst_mode(w->dev_id); + const bool mt_safe = !w->t->mt_unsafe; + const uint8_t nb_stages = opt->nb_stages; + RTE_SET_USED(opt); + + if (nb_stages == 1) { + if (!burst && mt_safe) + return pipeline_atq_worker_single_stage_tx(arg); + else if (!burst && !mt_safe) + return pipeline_atq_worker_single_stage_fwd(arg); + else if (burst && mt_safe) + return pipeline_atq_worker_single_stage_burst_tx(arg); + else if (burst && !mt_safe) + return pipeline_atq_worker_single_stage_burst_fwd(arg); + } else { + if (!burst && mt_safe) + return pipeline_atq_worker_multi_stage_tx(arg); + else if (!burst && !mt_safe) + return pipeline_atq_worker_multi_stage_fwd(arg); + if (burst && mt_safe) + return pipeline_atq_worker_multi_stage_burst_tx(arg); + else if (burst && !mt_safe) + return pipeline_atq_worker_multi_stage_burst_fwd(arg); + } rte_panic("invalid worker\n"); } -- 2.14.1