From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM02-BL2-obe.outbound.protection.outlook.com (mail-bl2nam02on0083.outbound.protection.outlook.com [104.47.38.83]) by dpdk.org (Postfix) with ESMTP id B2F961B021 for ; Fri, 12 Jan 2018 17:45:46 +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=w+PpGa+nTFPEppFtQVx0Oy2pMZ+eN/kNonmnt7tracY=; b=cXLlZQ9nMBG1iN2zM/7N0uWwHftdPtF+z6DJVYiFx3fJ3u+mJ2O9NkBT/hu4IrBb1jDSAjvmFRS2PavIwK0NyDUbqLzpMPwXUJaf6xDb7uT3ss4WwGK6tAmvIQHGsMP8glQA3OVccYBbPRiCzND2cQICqGBFFg9KH/BtximzgTs= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Pavan.Bhagavatula@cavium.com; Received: from Pavan-LT.caveonetworks.com (119.82.125.132) by DM5PR07MB3465.namprd07.prod.outlook.com (10.164.153.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.386.5; Fri, 12 Jan 2018 16:45:39 +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: Fri, 12 Jan 2018 22:14:15 +0530 Message-Id: <20180112164416.21374-12-pbhagavatula@caviumnetworks.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180112164416.21374-1-pbhagavatula@caviumnetworks.com> References: <20171130072406.15605-1-pbhagavatula@caviumnetworks.com> <20180112164416.21374-1-pbhagavatula@caviumnetworks.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [119.82.125.132] X-ClientProxiedBy: YQXPR0101CA0023.CANPRD01.PROD.OUTLOOK.COM (52.132.74.164) To DM5PR07MB3465.namprd07.prod.outlook.com (10.164.153.20) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ba5f49d7-c2a4-4bde-663e-08d559dbebd3 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020084)(4652020)(5600026)(4604075)(2017052603307)(7153060)(7193020); SRVR:DM5PR07MB3465; X-Microsoft-Exchange-Diagnostics: 1; DM5PR07MB3465; 3:UvE2swZQaehpUIP7vBIzZW122CX4oJ6t9K+vZNPdY9WTU/v1D7zJTH1s9lTf4ueouzuPq4dDQ97vZ4rd2yRApQYE/c18+coKVHvy+/1BArdZu90WKDHxJfq0QNMJxCdET/3gHAOkpTYyUF5NF6B7PNi2NUKkIp5NNBDjOFxCFewIsjTQX65np9+FqxMeyZCzyWBF4bMx/HZrSp01X2pJR+iBgIWzXdArZIWX1pOrAh9i1CDzDxMEud8k3HBuWuIZ; 25:ZeBAP9dYixQwdrx5F83cgwwNXnYSVcD5THerU8/7eorhN5ypQHsoTU3S1lmLUzut6PhpXhqW2cm6sV51JUEO0jyEHE5HgUsXReVLfrrWgytLgrkinI40VeQtDr3n1IQA8C763BBjfmAtOV3ujFamPnMBOydAtvtJ1qlW9r2AY9wxkhUmzlZ0blrBLq3nsoH9pQtMI4qnWTVvooYge0Xq7lRg0UU6zZLEFCgmXRmkrOrH1B0HX5qJf4ZHMkN51RmLGvX8Ru73/T8jm7ZReYmqvp3NlO/8lqFWNDabEaYE2a9fkj9AeHW2v8zRwh7D9wNGaHVWt4bE8Vt9Dz3R/1sU3Q==; 31:fZIK9VN6pQVBHy/gFYxxD8jBWFUaIgPDcgQa9g9idoUTLy4I3aUnFqcJZYKkek9sRKBaWQqAcfkCEpHOxB2olwCVOPkaDHUPzeIINHzp+5JcFcA8XNXc4tAqaVtdg9LgYU0OwBaQrsm5eGr/ljzXIs+RTt8qUiCOJ7AsMMDXY9Uy/cddQJF6VJmFvlUmxnSkhYCrQRaPPfPOBUBu330Dau9ys5dFfa5TvZeQY0t3X1c= X-MS-TrafficTypeDiagnostic: DM5PR07MB3465: X-Microsoft-Exchange-Diagnostics: 1; DM5PR07MB3465; 20:3Y712hoy+VFoieeGjEca8P3J0CnCOtOqK+lb8/i96c0dNvJkWRYhBNgjqs5B+t1Vuuwq/BlS3DCzYtN+2b+Gv5YyB33nAvu+YWcXJ7y1ffl3dZ60BsjZaanWVFxhgVkCvoyFpmEO0XLnGmjsMsyli71pO/8VUfoXoMM+7+yX+BR3LS7bP9KFrp1xmxjPH/iSSEwxPaJ5KWfNg/OnfIRFDWZMv0hSIdL0nmMofZMB1sQJ7QPX6tXEFbbdzCSSYBB9gmSGPr50iP7ZIjr7bKJ1P8NgBvqbtnRiPiwOk+nM+96tT2+DrIiiCzjg97mj7hSBDhLBVCwlHD/vZlVUFne3gNiFRpps7UPPKfI4KBwNzNIC0ca7FwUdYCDTV47ZdP5/73DmEVEQgMSx7/oSe11ykVyGDw1hw8kin21189F6FX841d32e7e50n8SAexukUogx2MhiDA2FkSIfmuQD5C6hWuaHaVyfZV91XpPqGN7gATfiSPJDYu2n3LSsghiVMQGMozo7mrTCwkwMt/I8MxoNhiWvft05vzASDrDLJuJThrfGtNA9WOJTD7CMaiBz2GTjdNeMO8IyJlonYqOjO38ZHondVKljmi+dW4mwPZk/pY=; 4:HmBg9AyjOaRbTFgWgdLPVl2STamkm2Z/WE4JOByN2JUKNFiPbAIn9DV3H7yo+siZp8A3fg7BtUM0bKzPxVErwixD/Z3pb+ZZdKf/6KGZU6xM23avCfWNXp9gT6wHE2UY4Sxo+ievM0TdjxRYiyAuShqwiyEUfMYsGE+tlip06VX+2VQJdX9dEKbFugr5kL+U4PQCkGb2OcK+Lq6rb/Glg3rkW4aQdEP1+jYyDA46CvbA/BBu9QyVYFqqlKdyfurxaAtB1nG7Y6z5A0DVH8KzxQ== 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)(93006095)(10201501046)(3231023)(944501145)(6041268)(20161123560045)(20161123564045)(20161123558120)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:DM5PR07MB3465; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:DM5PR07MB3465; X-Forefront-PRVS: 0550778858 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(39860400002)(346002)(39380400002)(376002)(396003)(366004)(189003)(199004)(50226002)(76176011)(8676002)(6666003)(316002)(48376002)(53416004)(81156014)(53936002)(69596002)(16586007)(81166006)(59450400001)(386003)(16526018)(52116002)(6506007)(51416003)(1076002)(6486002)(2950100002)(105586002)(66066001)(6512007)(50466002)(106356001)(47776003)(4326008)(5660300001)(3846002)(42882006)(6116002)(7736002)(68736007)(97736004)(8656006)(478600001)(107886003)(8936002)(72206003)(36756003)(2906002)(305945005)(25786009)(42262002); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR07MB3465; H:Pavan-LT.caveonetworks.com; 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; DM5PR07MB3465; 23:KboP3B5TOtoVIkuPt3vA5feFGhff6aLDJveQSbw5B?= =?us-ascii?Q?muLf/neg/cHnGFiUO4HhHb8JPOjFUWe4su1z5fc0C3ta1VRBkavHY8aJ11bd?= =?us-ascii?Q?3elw3P1TZHnEFgngDfPuRtglexfsFMXHZVPilBpGyJ1/rL9JtxzReuuQK/db?= =?us-ascii?Q?T9TlUqRynqqRRkPz+Th4yIPYcHDFcQCJGJMdLXvqnNjgQO7b6vxjIuZAMlZy?= =?us-ascii?Q?DBvDTFvRmZhV587ZScs5FQVvULcvpS/IwmmsX+qjRF/47kay24ZXvGDqe5Ch?= =?us-ascii?Q?ZZEoR2/rzbFhhmGMd7x7IbrZ4lsnZKp+v5DWFS1Psb1didvMarWHRAqiE2RK?= =?us-ascii?Q?LYsWXIjuyla3cNPb4SSV+pRGDDKYXrEXfRuy9xd+HhidxRwRbdztvZZlLzzx?= =?us-ascii?Q?3zdof/zZHMdvdLhntKv34EEmmnfBtCJ2WT2/neSYGTQdSshopsZEHdorLFJs?= =?us-ascii?Q?BQZ6mChN0Z2S6KwyHxUkazdB2bS01aeYNU97b3noeGYpoNcZ1CqzLfSWSkba?= =?us-ascii?Q?MwGw2i43nDGUh+McWve8wQOnRXSDk3BIQ0BIVIPtIneWj7Zu7c+ewthiV8QM?= =?us-ascii?Q?dkek6LBGrfsn/L+6Fdp6TR2Eucb51IJVfbYsYpeGUvzK9eIDjUmWePnjJhA0?= =?us-ascii?Q?vEz7L1NyXtmW0O+1XZs+RbgwZLfxkXrKsICu8PkLZznVPTN+wa+kLrMNNeaV?= =?us-ascii?Q?28XtpgEyYyvJOsE0jVr435j5pv9cxWiXQE2qj6xKLzeR/dlm71nASPlRE+X8?= =?us-ascii?Q?YRUJs+hMTRdxgBwrN/BdJk4sYHQbjxXN46pF9BrAwaBM1UCgmvCU5XY/igRa?= =?us-ascii?Q?xXZmpefnUX0yIdBRF6lMXLhZ/q7rt45of+1MbhhGuGkyzKAW0bsSxewLuQwa?= =?us-ascii?Q?ykR8Uody0N5EqZRRUw0/F4RMIUfQgMjGJhX7n3o++7ON4lr//rQO841PgAbF?= =?us-ascii?Q?h07Jf2s/JLT4p53S35Am/zHmc+vgRyzVNVq1NEGLagGVu/+u9OtMkZhZEjCn?= =?us-ascii?Q?N0KYcnIZmuuAcyBfA5eTGgZR3j5Xf4hjcF1cuGYvxWCdQ4H9fH1vBhV06QY1?= =?us-ascii?Q?nIBgpubcEIb7C94LUN1NcxtS92Dh1dVaUY8XxBPty5O27HzRQmYS0mcgTdlx?= =?us-ascii?Q?SRF4I7sU4gdHOCIAPfUVO1y9xkIeqR7tnD/5FKrX/++J8G4y7DhuqoplO4Ee?= =?us-ascii?Q?m2vc5z5c2EzPw++aF6zrSnLEEaaW3Dtj6ity5wc7IDcTKj1+R7ml5dGuA=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1; DM5PR07MB3465; 6:v8eDPwYi86TOf82g1TcM2JB9IUrW9Ahvez8wwSvjLK9nrRYkbpXsOb8urTj9kmHBbKCQH1iEf3xjKU4+4yHraYBFgVOmY81q1MQ96fys5TqUTDzNJCOYRNx1RXYr0X7OiPGn+l8ZrinvbVtEHNh+RX/OGWEXVr7QaSWcscWycyfApKL0tcwa+SapxUrOFqw9lnRifyxgsJQZdvQBvzN+SQOZSFV0Tz4ult5lIShmF8J1C9H93q+i5HrqV8tFMot/pz67CkysrlXPHu5L07E2gg4Cbsry0/P1vnajygDiLBpOeHkLEdL4zQVnIDS0J6/37smhkgSsAc6b7sH5HZ4XYV4hCv6PodOW4kBJDbERJu8=; 5:8X/7j0atOohoHJtDICFTjij2PZRploBT/ZtPhdav93lD4Ko98+kKE/jiT0LO4E5yOH/EkueGoDrD0EY9+4ohXN17tfgeOwqb6OvjsvtbZYohi+vnuu2UH1K4v7/wXqkHhNeeGaIO/BPwQ6vXgMR6kUwrXAZ+ocl5uUiVGHfxJ/A=; 24:zP5KHzxWDi/zWD1jDeOqZshPH/7uTJ7X+I6K7cxhOBbGXwwDf4C2Dolpid19bm0ZJtByhToU4PdK1xbTwAXCbDaQDgwsaNDaOD+O3H0dzeE=; 7:JENRZnPvT06eN7giwuOJH3OwcPtSP/mUjkb8lUw7vawi5jqP26vjQfp2DwKSbNb+OvUjd706hF1ktt6c9KASm7EWM4jZ07OPAl4+mhKAqON2nunLXB9KpVpmA//kG5nXdEAbt5yiRMSsvHCvIMiqMMYKmBAzVvzJitltAgyyFRneJe5FS+yJSQ7h0JzpJ+nuq5A0PYp+VQ/zwsqiRmWSge11A9H45nyMoJiv4ciBiq2hZu3dRL5S5cl2NHppBMqt SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jan 2018 16:45:39.9815 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ba5f49d7-c2a4-4bde-663e-08d559dbebd3 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR07MB3465 Subject: [dpdk-dev] [PATCH v4 12/13] 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: Fri, 12 Jan 2018 16:45:47 -0000 Signed-off-by: Pavan Nikhilesh --- app/test-eventdev/test_pipeline_atq.c | 281 +++++++++++++++++++++++++++++++++- 1 file changed, 280 insertions(+), 1 deletion(-) diff --git a/app/test-eventdev/test_pipeline_atq.c b/app/test-eventdev/test_pipeline_atq.c index 6c9ac6119..f4cfd3cc7 100644 --- a/app/test-eventdev/test_pipeline_atq.c +++ b/app/test-eventdev/test_pipeline_atq.c @@ -15,10 +15,289 @@ 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); + + /* allow compiler to optimize */ + 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