From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 08AA3A0350; Wed, 29 Apr 2020 20:19:36 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id B8A8A1D929; Wed, 29 Apr 2020 20:19:35 +0200 (CEST) Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-eopbgr00058.outbound.protection.outlook.com [40.107.0.58]) by dpdk.org (Postfix) with ESMTP id 16B5E1D924 for ; Wed, 29 Apr 2020 20:19:35 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Jd4HqPh5EIEqOTIMQ2AKxxfjVxYe181PyMK/wMOsftw=; b=wii96wxCIJWh9PJKZi/cjY+SkmVUDChLqmbEI19XXxuBvYUUkZ+a4oVgRvsztMVUC+SISNaeLIscAaWZIYiJ2h+JUqVa3OFGFPoNif4tDnv++alCJKgZPbWw69MiR0DkXOtEUvICpkpD4GTA+PYLw9ELAB+ZkCDIrLOmNHEyGoo= Received: from AM0PR01CA0136.eurprd01.prod.exchangelabs.com (2603:10a6:208:168::41) by HE1PR0802MB2170.eurprd08.prod.outlook.com (2603:10a6:3:ca::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2958.19; Wed, 29 Apr 2020 18:19:32 +0000 Received: from AM5EUR03FT017.eop-EUR03.prod.protection.outlook.com (2603:10a6:208:168:cafe::74) by AM0PR01CA0136.outlook.office365.com (2603:10a6:208:168::41) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2937.13 via Frontend Transport; Wed, 29 Apr 2020 18:19:31 +0000 Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dpdk.org; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dpdk.org; dmarc=bestguesspass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by AM5EUR03FT017.mail.protection.outlook.com (10.152.16.89) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2958.20 via Frontend Transport; Wed, 29 Apr 2020 18:19:31 +0000 Received: ("Tessian outbound 5abcb386707e:v54"); Wed, 29 Apr 2020 18:19:31 +0000 X-CR-MTA-TID: 64aa7808 Received: from 7c073f19a951.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 3841F0F6-7685-40C5-817F-441C727990ED.1; Wed, 29 Apr 2020 18:19:26 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 7c073f19a951.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 29 Apr 2020 18:19:26 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kQR6/n0ZiChxxCWodtAGYJhl69vGskcbfMCYzl4yEP9n7L9aKtTAjCv5RMy1zSCH48y3Ad6rHd/i/DFZTQYbSOh4u80zrXrRd24EjHzN11fItwW2k+BkgeOg21wtPglVVYv49zCCEEjjsAFP5HEHljjCLxunEc3sUVI2t8t+O93xTjO/+Aq59/eDbyvjxmkqaNIgpdPSD0muWHU/+NznJ7J1IQK144tbqR8OeGL1+MhjCmtx7cvu7JzmmB8JMerp+028dktdi8mPJMSmsIGcA9gp38kgO1YlCXmLPujwBn6Od2We2q+uhjxp73YybAD4V5N/FoCEAIFvMCIjGwYWAg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Jd4HqPh5EIEqOTIMQ2AKxxfjVxYe181PyMK/wMOsftw=; b=n793svsvFSrNZE8urzzNB43L5SYuuXbiGbVFpTP4B7ThK5QD2oGTYTWnq6EEvKMil/UveAhX2cvRIIObeNL+088rLQAbHyEJ6X6482HUW358SBNCWvQjdY9vi3MmdidrBzbFgHgYJn+vhfDGXBOPL/DR0/Q4O2GwroyTiDt8YXsOZ/rCtyBNUz5EcxPj+HS1KWxKgIa7fZHOwvubw1itve8XQO1UAob0t4XkB/Tsew6Lkcsm92ewTGeQ+IDsC50srYOb+jFNRyHsFmFXRYFDM4xvrGF+21F31+tt4GHIAbWynbPMbpnQ99BF896//h9MIDbFbvL063o16cm2vWJ4TA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Jd4HqPh5EIEqOTIMQ2AKxxfjVxYe181PyMK/wMOsftw=; b=wii96wxCIJWh9PJKZi/cjY+SkmVUDChLqmbEI19XXxuBvYUUkZ+a4oVgRvsztMVUC+SISNaeLIscAaWZIYiJ2h+JUqVa3OFGFPoNif4tDnv++alCJKgZPbWw69MiR0DkXOtEUvICpkpD4GTA+PYLw9ELAB+ZkCDIrLOmNHEyGoo= Received: from AM6PR08MB4644.eurprd08.prod.outlook.com (2603:10a6:20b:c9::10) by AM6PR08MB4327.eurprd08.prod.outlook.com (2603:10a6:20b:ba::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2937.22; Wed, 29 Apr 2020 18:19:24 +0000 Received: from AM6PR08MB4644.eurprd08.prod.outlook.com ([fe80::c17e:19ec:d94b:bc23]) by AM6PR08MB4644.eurprd08.prod.outlook.com ([fe80::c17e:19ec:d94b:bc23%3]) with mapi id 15.20.2937.028; Wed, 29 Apr 2020 18:19:24 +0000 From: Honnappa Nagarahalli To: Konstantin Ananyev , "dev@dpdk.org" CC: "aconole@redhat.com" , nd , Honnappa Nagarahalli , nd Thread-Topic: [PATCH] test/ring: code rework to reduce compilation time Thread-Index: AQHWHk+l64WNWhz7zUq1AmUBfvaQkqiQZ+xw Date: Wed, 29 Apr 2020 18:19:24 +0000 Message-ID: References: <20200429175714.31141-1-konstantin.ananyev@intel.com> In-Reply-To: <20200429175714.31141-1-konstantin.ananyev@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: 44a7c5cf-e92f-4acc-8bee-2afe2777c8e5.0 x-checkrecipientchecked: true Authentication-Results-Original: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=arm.com; x-originating-ip: [217.140.111.135] x-ms-publictraffictype: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 964039e6-b4df-4b55-1a16-08d7ec69dccf x-ms-traffictypediagnostic: AM6PR08MB4327:|AM6PR08MB4327:|HE1PR0802MB2170: x-ms-exchange-transport-forked: True X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true nodisclaimer: true x-ms-oob-tlc-oobclassifiers: OLM:5797;OLM:5797; x-forefront-prvs: 03883BD916 X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM6PR08MB4644.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(136003)(376002)(396003)(346002)(366004)(39860400002)(66476007)(66556008)(64756008)(66446008)(26005)(5660300002)(76116006)(55016002)(66946007)(9686003)(4326008)(52536014)(186003)(8936002)(8676002)(2906002)(33656002)(71200400001)(86362001)(316002)(30864003)(6506007)(478600001)(53546011)(110136005)(54906003)(7696005)(579004); DIR:OUT; SFP:1101; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: dMYtLpHXI19PATjN7ctkfNyqi7YncICbrZPjxNekwLmrpXdo5Cjq4L/z7rOyYRLFnW39PYf3uizxkq6SwocsXhpqjyCkwUTXOlqsJYDq6hF/q+RHgh1AXZlFb7dJYpLlVwSSoIasCXFPjnCKFLbb3mIxvRSbdB8TRpBNXkISgpPN7uw3KeI0f3tYtRelwm1SQ7ns0viQl9L9rvZ3pNU3I+M6Dy+1UtG1X/+K5qrzD1uBov5vbzR2ahbHb0E3asKKu4pS9VNFPAkAdsLeF7ynp02t2rAjQeXv9jaxS0v5qPPzOB3nXx1L+6KYQAqUufOax4MwgnAzN+ai+No692qhZKLS4j8/kbXbh57mABz8xoH5sD2pn7j+qFQyIcTMVTohL5aT+xcgZ3HSTVKrEdm0fIWWVkPCDKcNAkdGC3qFqBY5BSymxPkCydljcQwqXFyT x-ms-exchange-antispam-messagedata: D2dWPTQPc9grh+43Hdro6dD/q7WX1T/hwDdmzssmIXH9A36qxWM713Gnc+lRhSQeSzzRBOgCgd/wute8WyFEW2mKO2Z3gyZ3FDJmUf/7yypSOYgC8ThhQTokYRkn5p0m3Vpub8COoUhiw7d8K/egHAzaAo8FSBrQf8t727wV9xJ9Dta8FprjF5x69jPozkIJPn3W1dSl9XcM4mPAxi3gjMFQoN736SQV9pi/WquOmGCmw2QWjMTkp4WLwo2neWOpCzClI6NQ6UrOro7SqcXrbZeB+SEirlHYXgiXyKFUzQCEXfH9dvR3KYoJ1CIKdB6qNtCV3bbV5bqmxjGHGoCgHVIenwdzbzELHCTCzYaWQOzmaEgI2SGEYLwzg8sTUfeWTDTYE04XnnmySYIyAKWAba/RRAJbPKAOhlnezSHuMa2u2RD+Zx2RdAL0ZO/JznnekvkF6mPsNkSt1GPIGeATCEKPF+2DsxLf3f4btMLDc4b7pKlb90tbvu+7WKD2JQGRl8Q1dvHcwFBw1KgztGG2gzAnt8J4RWUFCpA5/S9GyYkJCHYoMy8FRcmg5bhuYiX95tI2LnMMe5L2n7mT3Av3gsUf9W+FLD6xASI2H85o3llAFsZ67bM0hDc7NiEP3IxTBH7vKEXOjvoT0lA3tIBM+FrSBUaE2KLpyBLU84jbJWlqtunHnDLhksl/PLqSOW9grTxLsL8nzFoi3gOERtGnV3SD6A2uxKWi0tAqgt6wavXbaKzFQGhS5E/q+EepqM8AGxlzjeko5eeVXeY2LyGKTyxEmiPdwwQ7f8tGdXSLfIFMwe0v3H5OwFerCav44ns2 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4327 Original-Authentication-Results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM5EUR03FT017.eop-EUR03.prod.protection.outlook.com X-Forefront-Antispam-Report: CIP:63.35.35.123; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:64aa7808-outbound-1.mta.getcheckrecipient.com; PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; CAT:NONE; SFTY:; SFS:(4636009)(39860400002)(396003)(346002)(376002)(136003)(46966005)(8936002)(336012)(70586007)(4326008)(8676002)(2906002)(356005)(9686003)(33656002)(70206006)(55016002)(52536014)(81166007)(5660300002)(30864003)(82310400002)(86362001)(82740400003)(478600001)(54906003)(26005)(110136005)(47076004)(7696005)(186003)(36906005)(53546011)(6506007)(316002); DIR:OUT; SFP:1101; X-MS-Office365-Filtering-Correlation-Id-Prvs: e476d688-6152-485d-d81e-08d7ec69d880 X-Forefront-PRVS: 03883BD916 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: uWJ1rKYUeTAaRLsF2l5GJMSQhZFz0w3NJPFxB74ZvOUAh50Rrz5SSlgiRL0czGR6/dxMjZhbw4CJlPJMUIy70yWlWG2G/YCF2Vsa1v7ELUGMd0aAORj9gOAQ0/XdghILD2LD8XF2GZcuF0y6oETroPWwOoRM+jGrfywNnEE67ZF393YMrTQmQIKkR3i3lR10oow4433E6cmEGmwZqxyT3Y1yrD7or2RyCx5USdiPpY/BU4JQVBDUhyk8a+btmkl//sVC+wdWIuDFlZm2lC5bolKUOlCI3AugFqJ4Y4LLfRSl8OGK/vRFGoYoQA/9y28DAjQgCAqEfr1Tyr1AUVUWcdCNQACOr8PGJerfH61PHllHnFaY1hqO0JsTh2xQ/WB758y9ovyD4n7KCYTH8O+3GCrYZYgvWWHXtZt948AzI5sVi/7MVgA3YCfBHo0CzV0zgU1/rHIeGRpBy8hkDMxo4zsVwVEnTZYwXHcxqfMaEv3H7l+ARsIONgO8S4GNRL1yivNbtuOlD8+heJbSebojdQ== X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Apr 2020 18:19:31.5872 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 964039e6-b4df-4b55-1a16-08d7ec69dccf X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123]; Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2170 Subject: Re: [dpdk-dev] [PATCH] test/ring: code rework to reduce compilation time 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Hi Konstantin, Thanks for the patch. I think we need to co-ordinate better on the rte_rin= g related work to avoid duplicating the efforts. I also have been working o= n a patch myself and it is undergoing internal review. I will review this patch soon. Thanks, Honnappa > -----Original Message----- > From: Konstantin Ananyev > Sent: Wednesday, April 29, 2020 12:57 PM > To: dev@dpdk.org > Cc: aconole@redhat.com; Honnappa Nagarahalli > ; Konstantin Ananyev > > Subject: [PATCH] test/ring: code rework to reduce compilation time >=20 > Rework test code to reduce code complexity for the compiler and bring dow= n > compilation time and memory consumption. >=20 > Signed-off-by: Konstantin Ananyev > --- > app/test/test_ring.c | 373 +++++++++++++++++++++++++++++-------------- > 1 file changed, 249 insertions(+), 124 deletions(-) >=20 > diff --git a/app/test/test_ring.c b/app/test/test_ring.c index > e21557cd9..0ae97d341 100644 > --- a/app/test/test_ring.c > +++ b/app/test/test_ring.c > @@ -58,6 +58,181 @@ >=20 > static const int esize[] =3D {-1, 4, 8, 16, 20}; >=20 > +static const struct { > + const char *desc; > + uint32_t api_type; > + uint32_t create_flags; > + struct { > + unsigned int (*flegacy)(struct rte_ring *r, > + void * const *obj_table, unsigned int n, > + unsigned int *free_space); > + unsigned int (*felem)(struct rte_ring *r, const void *obj_table, > + unsigned int esize, unsigned int n, > + unsigned int *free_space); > + } enq; > + struct { > + unsigned int (*flegacy)(struct rte_ring *r, > + void **obj_table, unsigned int n, > + unsigned int *available); > + unsigned int (*felem)(struct rte_ring *r, void *obj_table, > + unsigned int esize, unsigned int n, > + unsigned int *available); > + } deq; > +} test_enqdeq_impl[] =3D { > + { > + .desc =3D "MP/MC sync mode", > + .api_type =3D TEST_RING_ELEM_BULK | > TEST_RING_THREAD_DEF, > + .create_flags =3D 0, > + .enq =3D { > + .flegacy =3D rte_ring_enqueue_bulk, > + .felem =3D rte_ring_enqueue_bulk_elem, > + }, > + .deq =3D { > + .flegacy =3D rte_ring_dequeue_bulk, > + .felem =3D rte_ring_dequeue_bulk_elem, > + }, > + }, > + { > + .desc =3D "SP/SC sync mode", > + .api_type =3D TEST_RING_ELEM_BULK | > TEST_RING_THREAD_SPSC, > + .create_flags =3D RING_F_SP_ENQ | RING_F_SC_DEQ, > + .enq =3D { > + .flegacy =3D rte_ring_sp_enqueue_bulk, > + .felem =3D rte_ring_sp_enqueue_bulk_elem, > + }, > + .deq =3D { > + .flegacy =3D rte_ring_sc_dequeue_bulk, > + .felem =3D rte_ring_sc_dequeue_bulk_elem, > + }, > + }, > + { > + .desc =3D "MP/MC sync mode", > + .api_type =3D TEST_RING_ELEM_BULK | > TEST_RING_THREAD_MPMC, > + .create_flags =3D 0, > + .enq =3D { > + .flegacy =3D rte_ring_mp_enqueue_bulk, > + .felem =3D rte_ring_mp_enqueue_bulk_elem, > + }, > + .deq =3D { > + .flegacy =3D rte_ring_mc_dequeue_bulk, > + .felem =3D rte_ring_mc_dequeue_bulk_elem, > + }, > + }, > + { > + .desc =3D "MP_RTS/MC_RTS sync mode", > + .api_type =3D TEST_RING_ELEM_BULK | > TEST_RING_THREAD_DEF, > + .create_flags =3D RING_F_MP_RTS_ENQ | > RING_F_MC_RTS_DEQ, > + .enq =3D { > + .flegacy =3D rte_ring_enqueue_bulk, > + .felem =3D rte_ring_enqueue_bulk_elem, > + }, > + .deq =3D { > + .flegacy =3D rte_ring_dequeue_bulk, > + .felem =3D rte_ring_dequeue_bulk_elem, > + }, > + }, > + { > + .desc =3D "MP_HTS/MC_HTS sync mode", > + .api_type =3D TEST_RING_ELEM_BULK | > TEST_RING_THREAD_DEF, > + .create_flags =3D RING_F_MP_HTS_ENQ | > RING_F_MC_HTS_DEQ, > + .enq =3D { > + .flegacy =3D rte_ring_enqueue_bulk, > + .felem =3D rte_ring_enqueue_bulk_elem, > + }, > + .deq =3D { > + .flegacy =3D rte_ring_dequeue_bulk, > + .felem =3D rte_ring_dequeue_bulk_elem, > + }, > + }, > + { > + .desc =3D "MP/MC sync mode", > + .api_type =3D TEST_RING_ELEM_BURST | > TEST_RING_THREAD_DEF, > + .create_flags =3D 0, > + .enq =3D { > + .flegacy =3D rte_ring_enqueue_burst, > + .felem =3D rte_ring_enqueue_burst_elem, > + }, > + .deq =3D { > + .flegacy =3D rte_ring_dequeue_burst, > + .felem =3D rte_ring_dequeue_burst_elem, > + }, > + }, > + { > + .desc =3D "SP/SC sync mode", > + .api_type =3D TEST_RING_ELEM_BURST | > TEST_RING_THREAD_SPSC, > + .create_flags =3D RING_F_SP_ENQ | RING_F_SC_DEQ, > + .enq =3D { > + .flegacy =3D rte_ring_sp_enqueue_burst, > + .felem =3D rte_ring_sp_enqueue_burst_elem, > + }, > + .deq =3D { > + .flegacy =3D rte_ring_sc_dequeue_burst, > + .felem =3D rte_ring_sc_dequeue_burst_elem, > + }, > + }, > + { > + .desc =3D "MP/MC sync mode", > + .api_type =3D TEST_RING_ELEM_BURST | > TEST_RING_THREAD_MPMC, > + .create_flags =3D 0, > + .enq =3D { > + .flegacy =3D rte_ring_mp_enqueue_burst, > + .felem =3D rte_ring_mp_enqueue_burst_elem, > + }, > + .deq =3D { > + .flegacy =3D rte_ring_mc_dequeue_burst, > + .felem =3D rte_ring_mc_dequeue_burst_elem, > + }, > + }, > + { > + .desc =3D "MP_RTS/MC_RTS sync mode", > + .api_type =3D TEST_RING_ELEM_BURST | > TEST_RING_THREAD_DEF, > + .create_flags =3D RING_F_MP_RTS_ENQ | > RING_F_MC_RTS_DEQ, > + .enq =3D { > + .flegacy =3D rte_ring_enqueue_burst, > + .felem =3D rte_ring_enqueue_burst_elem, > + }, > + .deq =3D { > + .flegacy =3D rte_ring_dequeue_burst, > + .felem =3D rte_ring_dequeue_burst_elem, > + }, > + }, > + { > + .desc =3D "MP_HTS/MC_HTS sync mode", > + .api_type =3D TEST_RING_ELEM_BURST | > TEST_RING_THREAD_DEF, > + .create_flags =3D RING_F_MP_HTS_ENQ | > RING_F_MC_HTS_DEQ, > + .enq =3D { > + .flegacy =3D rte_ring_enqueue_burst, > + .felem =3D rte_ring_enqueue_burst_elem, > + }, > + .deq =3D { > + .flegacy =3D rte_ring_dequeue_burst, > + .felem =3D rte_ring_dequeue_burst_elem, > + }, > + }, > +}; > + > +static unsigned int > +test_ring_enq_impl(struct rte_ring *r, void **obj, int esize, unsigned i= nt n, > + unsigned int test_idx) > +{ > + if (esize =3D=3D -1) > + return test_enqdeq_impl[test_idx].enq.flegacy(r, obj, n, NULL); > + else > + return test_enqdeq_impl[test_idx].enq.felem(r, obj, esize, n, > + NULL); > +} > + > +static unsigned int > +test_ring_deq_impl(struct rte_ring *r, void **obj, int esize, unsigned i= nt n, > + unsigned int test_idx) > +{ > + if (esize =3D=3D -1) > + return test_enqdeq_impl[test_idx].deq.flegacy(r, obj, n, NULL); > + else > + return test_enqdeq_impl[test_idx].deq.felem(r, obj, esize, n, > + NULL); > +} > + > static void** > test_ring_inc_ptr(void **obj, int esize, unsigned int n) { @@ -203,8 +3= 78,7 > @@ test_ring_negative_tests(void) > * Random number of elements are enqueued and dequeued. > */ > static int > -test_ring_burst_bulk_tests1(unsigned int api_type, unsigned int create_f= lags, > - const char *tname) > +test_ring_burst_bulk_tests1(unsigned int test_idx) > { > struct rte_ring *r; > void **src =3D NULL, **cur_src =3D NULL, **dst =3D NULL, **cur_dst =3D = NULL; > @@ -214,11 +388,13 @@ test_ring_burst_bulk_tests1(unsigned int api_type, > unsigned int create_flags, > const unsigned int rsz =3D RING_SIZE - 1; >=20 > for (i =3D 0; i < RTE_DIM(esize); i++) { > - test_ring_print_test_string(tname, api_type, esize[i]); > + test_ring_print_test_string(test_enqdeq_impl[test_idx].desc, > + test_enqdeq_impl[test_idx].api_type, esize[i]); >=20 > /* Create the ring */ > r =3D test_ring_create("test_ring_burst_bulk_tests", esize[i], > - RING_SIZE, SOCKET_ID_ANY, > create_flags); > + RING_SIZE, SOCKET_ID_ANY, > + test_enqdeq_impl[test_idx].create_flags); >=20 > /* alloc dummy object pointers */ > src =3D test_ring_calloc(RING_SIZE * 2, esize[i]); @@ -240,17 > +416,17 @@ test_ring_burst_bulk_tests1(unsigned int api_type, unsigned in= t > create_flags, > rand =3D RTE_MAX(rte_rand() % RING_SIZE, 1UL); > printf("%s: iteration %u, random shift: %u;\n", > __func__, i, rand); > - ret =3D test_ring_enqueue(r, cur_src, esize[i], rand, > - api_type); > + ret =3D test_ring_enq_impl(r, cur_src, esize[i], rand, > + test_idx); > TEST_RING_VERIFY(ret !=3D 0); >=20 > - ret =3D test_ring_dequeue(r, cur_dst, esize[i], rand, > - api_type); > + ret =3D test_ring_deq_impl(r, cur_dst, esize[i], rand, > + test_idx); > TEST_RING_VERIFY(ret =3D=3D rand); >=20 > /* fill the ring */ > - ret =3D test_ring_enqueue(r, cur_src, esize[i], rsz, > - api_type); > + ret =3D test_ring_enq_impl(r, cur_src, esize[i], rsz, > + test_idx); > TEST_RING_VERIFY(ret !=3D 0); >=20 > TEST_RING_VERIFY(rte_ring_free_count(r) =3D=3D 0); @@ > -259,8 +435,8 @@ test_ring_burst_bulk_tests1(unsigned int api_type, > unsigned int create_flags, > TEST_RING_VERIFY(rte_ring_empty(r) =3D=3D 0); >=20 > /* empty the ring */ > - ret =3D test_ring_dequeue(r, cur_dst, esize[i], rsz, > - api_type); > + ret =3D test_ring_deq_impl(r, cur_dst, esize[i], rsz, > + test_idx); > TEST_RING_VERIFY(ret =3D=3D (int)rsz); > TEST_RING_VERIFY(rsz =3D=3D rte_ring_free_count(r)); > TEST_RING_VERIFY(rte_ring_count(r) =3D=3D 0); @@ - > 294,8 +470,7 @@ test_ring_burst_bulk_tests1(unsigned int api_type, > unsigned int create_flags, > * dequeued data. > */ > static int > -test_ring_burst_bulk_tests2(unsigned int api_type, unsigned int create_f= lags, > - const char *tname) > +test_ring_burst_bulk_tests2(unsigned int test_idx) > { > struct rte_ring *r; > void **src =3D NULL, **cur_src =3D NULL, **dst =3D NULL, **cur_dst =3D = NULL; > @@ -303,11 +478,13 @@ test_ring_burst_bulk_tests2(unsigned int api_type, > unsigned int create_flags, > unsigned int i; >=20 > for (i =3D 0; i < RTE_DIM(esize); i++) { > - test_ring_print_test_string(tname, api_type, esize[i]); > + test_ring_print_test_string(test_enqdeq_impl[test_idx].desc, > + test_enqdeq_impl[test_idx].api_type, esize[i]); >=20 > /* Create the ring */ > r =3D test_ring_create("test_ring_burst_bulk_tests", esize[i], > - RING_SIZE, SOCKET_ID_ANY, > create_flags); > + RING_SIZE, SOCKET_ID_ANY, > + test_enqdeq_impl[test_idx].create_flags); >=20 > /* alloc dummy object pointers */ > src =3D test_ring_calloc(RING_SIZE * 2, esize[i]); @@ -323,39 > +500,39 @@ test_ring_burst_bulk_tests2(unsigned int api_type, unsigned in= t > create_flags, > cur_dst =3D dst; >=20 > printf("enqueue 1 obj\n"); > - ret =3D test_ring_enqueue(r, cur_src, esize[i], 1, api_type); > + ret =3D test_ring_enq_impl(r, cur_src, esize[i], 1, test_idx); > if (ret !=3D 1) > goto fail; > cur_src =3D test_ring_inc_ptr(cur_src, esize[i], 1); >=20 > printf("enqueue 2 objs\n"); > - ret =3D test_ring_enqueue(r, cur_src, esize[i], 2, api_type); > + ret =3D test_ring_enq_impl(r, cur_src, esize[i], 2, test_idx); > if (ret !=3D 2) > goto fail; > cur_src =3D test_ring_inc_ptr(cur_src, esize[i], 2); >=20 > printf("enqueue MAX_BULK objs\n"); > - ret =3D test_ring_enqueue(r, cur_src, esize[i], MAX_BULK, > - api_type); > + ret =3D test_ring_enq_impl(r, cur_src, esize[i], MAX_BULK, > + test_idx); > if (ret !=3D MAX_BULK) > goto fail; > cur_src =3D test_ring_inc_ptr(cur_src, esize[i], MAX_BULK); >=20 > printf("dequeue 1 obj\n"); > - ret =3D test_ring_dequeue(r, cur_dst, esize[i], 1, api_type); > + ret =3D test_ring_deq_impl(r, cur_dst, esize[i], 1, test_idx); > if (ret !=3D 1) > goto fail; > cur_dst =3D test_ring_inc_ptr(cur_dst, esize[i], 1); >=20 > printf("dequeue 2 objs\n"); > - ret =3D test_ring_dequeue(r, cur_dst, esize[i], 2, api_type); > + ret =3D test_ring_deq_impl(r, cur_dst, esize[i], 2, test_idx); > if (ret !=3D 2) > goto fail; > cur_dst =3D test_ring_inc_ptr(cur_dst, esize[i], 2); >=20 > printf("dequeue MAX_BULK objs\n"); > - ret =3D test_ring_dequeue(r, cur_dst, esize[i], MAX_BULK, > - api_type); > + ret =3D test_ring_deq_impl(r, cur_dst, esize[i], MAX_BULK, > + test_idx); > if (ret !=3D MAX_BULK) > goto fail; > cur_dst =3D test_ring_inc_ptr(cur_dst, esize[i], MAX_BULK); @@ > -390,8 +567,7 @@ test_ring_burst_bulk_tests2(unsigned int api_type, > unsigned int create_flags, > * Enqueue and dequeue to cover the entire ring length. > */ > static int > -test_ring_burst_bulk_tests3(unsigned int api_type, unsigned int create_f= lags, > - const char *tname) > +test_ring_burst_bulk_tests3(unsigned int test_idx) > { > struct rte_ring *r; > void **src =3D NULL, **cur_src =3D NULL, **dst =3D NULL, **cur_dst =3D = NULL; > @@ -399,11 +575,13 @@ test_ring_burst_bulk_tests3(unsigned int api_type, > unsigned int create_flags, > unsigned int i, j; >=20 > for (i =3D 0; i < RTE_DIM(esize); i++) { > - test_ring_print_test_string(tname, api_type, esize[i]); > + test_ring_print_test_string(test_enqdeq_impl[test_idx].desc, > + test_enqdeq_impl[test_idx].api_type, esize[i]); >=20 > /* Create the ring */ > r =3D test_ring_create("test_ring_burst_bulk_tests", esize[i], > - RING_SIZE, SOCKET_ID_ANY, > create_flags); > + RING_SIZE, SOCKET_ID_ANY, > + test_enqdeq_impl[test_idx].create_flags); >=20 > /* alloc dummy object pointers */ > src =3D test_ring_calloc(RING_SIZE * 2, esize[i]); @@ -420,15 > +598,15 @@ test_ring_burst_bulk_tests3(unsigned int api_type, unsigned in= t > create_flags, >=20 > printf("fill and empty the ring\n"); > for (j =3D 0; j < RING_SIZE / MAX_BULK; j++) { > - ret =3D test_ring_enqueue(r, cur_src, esize[i], > MAX_BULK, > - api_type); > + ret =3D test_ring_enq_impl(r, cur_src, esize[i], > MAX_BULK, > + test_idx); > if (ret !=3D MAX_BULK) > goto fail; > cur_src =3D test_ring_inc_ptr(cur_src, esize[i], > MAX_BULK); >=20 > - ret =3D test_ring_dequeue(r, cur_dst, esize[i], > MAX_BULK, > - api_type); > + ret =3D test_ring_deq_impl(r, cur_dst, esize[i], > MAX_BULK, > + test_idx); > if (ret !=3D MAX_BULK) > goto fail; > cur_dst =3D test_ring_inc_ptr(cur_dst, esize[i], @@ - > 465,21 +643,24 @@ test_ring_burst_bulk_tests3(unsigned int api_type, > unsigned int create_flags, > * Enqueue till the ring is full and dequeue till the ring becomes empty= . > */ > static int > -test_ring_burst_bulk_tests4(unsigned int api_type, unsigned int create_f= lags, > - const char *tname) > +test_ring_burst_bulk_tests4(unsigned int test_idx) > { > struct rte_ring *r; > void **src =3D NULL, **cur_src =3D NULL, **dst =3D NULL, **cur_dst =3D = NULL; > int ret; > unsigned int i, j; > - unsigned int num_elems; > + unsigned int api_type, num_elems; > + > + api_type =3D test_enqdeq_impl[test_idx].api_type; >=20 > for (i =3D 0; i < RTE_DIM(esize); i++) { > - test_ring_print_test_string(tname, api_type, esize[i]); > + test_ring_print_test_string(test_enqdeq_impl[test_idx].desc, > + test_enqdeq_impl[test_idx].api_type, esize[i]); >=20 > /* Create the ring */ > r =3D test_ring_create("test_ring_burst_bulk_tests", esize[i], > - RING_SIZE, SOCKET_ID_ANY, > create_flags); > + RING_SIZE, SOCKET_ID_ANY, > + test_enqdeq_impl[test_idx].create_flags); >=20 > /* alloc dummy object pointers */ > src =3D test_ring_calloc(RING_SIZE * 2, esize[i]); @@ -496,8 > +677,8 @@ test_ring_burst_bulk_tests4(unsigned int api_type, unsigned int > create_flags, >=20 > printf("Test enqueue without enough memory space\n"); > for (j =3D 0; j < (RING_SIZE/MAX_BULK - 1); j++) { > - ret =3D test_ring_enqueue(r, cur_src, esize[i], > MAX_BULK, > - api_type); > + ret =3D test_ring_enq_impl(r, cur_src, esize[i], > MAX_BULK, > + test_idx); > if (ret !=3D MAX_BULK) > goto fail; > cur_src =3D test_ring_inc_ptr(cur_src, esize[i], @@ - > 505,7 +686,7 @@ test_ring_burst_bulk_tests4(unsigned int api_type, > unsigned int create_flags, > } >=20 > printf("Enqueue 2 objects, free entries =3D MAX_BULK - 2\n"); > - ret =3D test_ring_enqueue(r, cur_src, esize[i], 2, api_type); > + ret =3D test_ring_enq_impl(r, cur_src, esize[i], 2, test_idx); > if (ret !=3D 2) > goto fail; > cur_src =3D test_ring_inc_ptr(cur_src, esize[i], 2); @@ -517,8 > +698,8 @@ test_ring_burst_bulk_tests4(unsigned int api_type, unsigned int > create_flags, > else > num_elems =3D MAX_BULK; > /* Always one free entry left */ > - ret =3D test_ring_enqueue(r, cur_src, esize[i], num_elems, > - api_type); > + ret =3D test_ring_enq_impl(r, cur_src, esize[i], num_elems, > + test_idx); > if (ret !=3D MAX_BULK - 3) > goto fail; > cur_src =3D test_ring_inc_ptr(cur_src, esize[i], MAX_BULK - 3); > @@ -528,15 +709,15 @@ test_ring_burst_bulk_tests4(unsigned int api_type, > unsigned int create_flags, > goto fail; >=20 > printf("Test enqueue for a full entry\n"); > - ret =3D test_ring_enqueue(r, cur_src, esize[i], MAX_BULK, > - api_type); > + ret =3D test_ring_enq_impl(r, cur_src, esize[i], MAX_BULK, > + test_idx); > if (ret !=3D 0) > goto fail; >=20 > printf("Test dequeue without enough objects\n"); > for (j =3D 0; j < RING_SIZE / MAX_BULK - 1; j++) { > - ret =3D test_ring_dequeue(r, cur_dst, esize[i], > MAX_BULK, > - api_type); > + ret =3D test_ring_deq_impl(r, cur_dst, esize[i], > MAX_BULK, > + test_idx); > if (ret !=3D MAX_BULK) > goto fail; > cur_dst =3D test_ring_inc_ptr(cur_dst, esize[i], @@ - > 544,7 +725,7 @@ test_ring_burst_bulk_tests4(unsigned int api_type, > unsigned int create_flags, > } >=20 > /* Available memory space for the exact MAX_BULK entries > */ > - ret =3D test_ring_dequeue(r, cur_dst, esize[i], 2, api_type); > + ret =3D test_ring_deq_impl(r, cur_dst, esize[i], 2, test_idx); > if (ret !=3D 2) > goto fail; > cur_dst =3D test_ring_inc_ptr(cur_dst, esize[i], 2); @@ -554,8 > +735,8 @@ test_ring_burst_bulk_tests4(unsigned int api_type, unsigned int > create_flags, > num_elems =3D MAX_BULK - 3; > else > num_elems =3D MAX_BULK; > - ret =3D test_ring_dequeue(r, cur_dst, esize[i], num_elems, > - api_type); > + ret =3D test_ring_deq_impl(r, cur_dst, esize[i], num_elems, > + test_idx); > if (ret !=3D MAX_BULK - 3) > goto fail; > cur_dst =3D test_ring_inc_ptr(cur_dst, esize[i], MAX_BULK - 3); > @@ -816,22 +997,7 @@ static int > test_ring(void) > { > int32_t rc; > - unsigned int i, j; > - const char *tname; > - > - static const struct { > - uint32_t create_flags; > - const char *name; > - } test_sync_modes[] =3D { > - { > - RING_F_MP_RTS_ENQ | RING_F_MC_RTS_DEQ, > - "Test MT_RTS ring", > - }, > - { > - RING_F_MP_HTS_ENQ | RING_F_MC_HTS_DEQ, > - "Test MT_HTS ring", > - }, > - }; > + unsigned int i; >=20 > /* Negative test cases */ > if (test_ring_negative_tests() < 0) > @@ -848,65 +1014,24 @@ test_ring(void) > * The test cases are split into smaller test cases to > * help clang compile faster. > */ > - tname =3D "Test standard ring"; > - > - for (j =3D TEST_RING_ELEM_BULK; j <=3D TEST_RING_ELEM_BURST; j <<=3D 1) > - for (i =3D TEST_RING_THREAD_DEF; > - i <=3D TEST_RING_THREAD_MPMC; i > <<=3D 1) > - if (test_ring_burst_bulk_tests1(i | j, 0, tname) < 0) > - goto test_fail; > - > - for (j =3D TEST_RING_ELEM_BULK; j <=3D TEST_RING_ELEM_BURST; j <<=3D 1) > - for (i =3D TEST_RING_THREAD_DEF; > - i <=3D TEST_RING_THREAD_MPMC; i > <<=3D 1) > - if (test_ring_burst_bulk_tests2(i | j, 0, tname) < 0) > - goto test_fail; > - > - for (j =3D TEST_RING_ELEM_BULK; j <=3D TEST_RING_ELEM_BURST; j <<=3D 1) > - for (i =3D TEST_RING_THREAD_DEF; > - i <=3D TEST_RING_THREAD_MPMC; i > <<=3D 1) > - if (test_ring_burst_bulk_tests3(i | j, 0, tname) < 0) > - goto test_fail; > - > - for (j =3D TEST_RING_ELEM_BULK; j <=3D TEST_RING_ELEM_BURST; j <<=3D 1) > - for (i =3D TEST_RING_THREAD_DEF; > - i <=3D TEST_RING_THREAD_MPMC; i > <<=3D 1) > - if (test_ring_burst_bulk_tests4(i | j, 0, tname) < 0) > - goto test_fail; > - > - /* Burst and bulk operations with MT_RTS and MT_HTS sync modes > */ > - for (i =3D 0; i !=3D RTE_DIM(test_sync_modes); i++) { > - for (j =3D TEST_RING_ELEM_BULK; j <=3D TEST_RING_ELEM_BURST; > - j <<=3D 1) { > - > - rc =3D test_ring_burst_bulk_tests1( > - TEST_RING_THREAD_DEF | j, > - test_sync_modes[i].create_flags, > - test_sync_modes[i].name); > - if (rc < 0) > - goto test_fail; > - > - rc =3D test_ring_burst_bulk_tests2( > - TEST_RING_THREAD_DEF | j, > - test_sync_modes[i].create_flags, > - test_sync_modes[i].name); > - if (rc < 0) > - goto test_fail; > - > - rc =3D test_ring_burst_bulk_tests3( > - TEST_RING_THREAD_DEF | j, > - test_sync_modes[i].create_flags, > - test_sync_modes[i].name); > - if (rc < 0) > - goto test_fail; > - > - rc =3D test_ring_burst_bulk_tests3( > - TEST_RING_THREAD_DEF | j, > - test_sync_modes[i].create_flags, > - test_sync_modes[i].name); > - if (rc < 0) > - goto test_fail; > - } > + for (i =3D 0; i !=3D RTE_DIM(test_enqdeq_impl); i++) { > + > + > + rc =3D test_ring_burst_bulk_tests1(i); > + if (rc < 0) > + goto test_fail; > + > + rc =3D test_ring_burst_bulk_tests2(i); > + if (rc < 0) > + goto test_fail; > + > + rc =3D test_ring_burst_bulk_tests3(i); > + if (rc < 0) > + goto test_fail; > + > + rc =3D test_ring_burst_bulk_tests4(i); > + if (rc < 0) > + goto test_fail; > } >=20 > /* dump the ring status */ > -- > 2.17.1