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 06191A0597; Wed, 8 Apr 2020 06:59:56 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 58DA51BF6C; Wed, 8 Apr 2020 06:59:53 +0200 (CEST) Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-eopbgr150051.outbound.protection.outlook.com [40.107.15.51]) by dpdk.org (Postfix) with ESMTP id 6ADE31BF3C for ; Wed, 8 Apr 2020 06:59:52 +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=hAa2sCIGDlgtpniPscoWk+3P5zs5OVfQsYSB/aaC/bM=; b=iJCXM92CoUuszCwHrdBWmRJFY16tfue/rf1G+TMzloft2NGWAVNgkYvo4Ga02k3Ajf7ffxcGipy7BUdu0njLL0M7S/QyFGBa3KcDIyLnzCYN7IwtuyJDhTRNsGSotxQE4ityWuyYh4AWFe3vCUOKQ6GlJhh3fLRTXr6fYnL2PV0= Received: from AM5PR0701CA0058.eurprd07.prod.outlook.com (2603:10a6:203:2::20) by HE1PR08MB2793.eurprd08.prod.outlook.com (2603:10a6:7:34::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2878.22; Wed, 8 Apr 2020 04:59:51 +0000 Received: from AM5EUR03FT009.eop-EUR03.prod.protection.outlook.com (2603:10a6:203:2:cafe::3) by AM5PR0701CA0058.outlook.office365.com (2603:10a6:203:2::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2900.6 via Frontend Transport; Wed, 8 Apr 2020 04:59:51 +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 AM5EUR03FT009.mail.protection.outlook.com (10.152.16.110) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2856.17 via Frontend Transport; Wed, 8 Apr 2020 04:59:50 +0000 Received: ("Tessian outbound eadf07c3b4bb:v50"); Wed, 08 Apr 2020 04:59:50 +0000 X-CR-MTA-TID: 64aa7808 Received: from da0817bb8b3e.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 7327FA24-564F-487B-BDF3-DAF97B1525CD.1; Wed, 08 Apr 2020 04:59:45 +0000 Received: from EUR05-VI1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id da0817bb8b3e.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 08 Apr 2020 04:59:45 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iDQ+DTy2BruLPTHzUFjlCeVjYRyiBhUUfZzcUQwag3xRaGqtKyqEYfXnSXefAoWiYc6cNsQzcUuGiQoz33hX2F4Max5gd3aZbdTVDFfkLH2P2ZFVYZzJmEJEnvbaHrdPwFd0XWgkspL/ikA8REVVS2XIvu4eNinsxMgLGXBtqM6veiVrAiXtCn42BvwhorZyRNEEmdDVvz1VK1YUg59Qpvr2ZzX7Cti7wVtQVlLdvmkRaE8dSGa7HdXOb1f6zm5uNzRDqxS0kcRbz+GriYIHjkx10718/mQDS/ReKmD4Tvd2KGKMdDVFpgfoOsGWJQ6P4dKtbaobYXGYCo2X9oJpcg== 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=hAa2sCIGDlgtpniPscoWk+3P5zs5OVfQsYSB/aaC/bM=; b=GGfjYhVR4z1zWoEiwF7+DjAoICYoP7nBuxZZQKi/ajRrjeEOuyZSQJYDFpKljx38pOqVPSptomwy4hRsgZOiemc9Ju53M4E1NOoqRlaYaJjAOU1bvWyJlpFwG/rnmh4fUGaRKLhPF8R1a2Dedn4NbEtGvjS2ts81r6VycQ5TSB8Q/x2S0/0c8I4owwZtv1teQdv2y3atKARKDQSoz9nQOwE7fnokOcjTEmBnNmQ0CWhLOyNVlCHqeYYbkUzx+eNo5lrmhzqP4sYXJsxXg/XXfRnh+ucviVlHWPUce8sREEp/pQ1aIUrIQTTGZnl14Ofecmt723UTuNNkT0jqkZsPZw== 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=hAa2sCIGDlgtpniPscoWk+3P5zs5OVfQsYSB/aaC/bM=; b=iJCXM92CoUuszCwHrdBWmRJFY16tfue/rf1G+TMzloft2NGWAVNgkYvo4Ga02k3Ajf7ffxcGipy7BUdu0njLL0M7S/QyFGBa3KcDIyLnzCYN7IwtuyJDhTRNsGSotxQE4ityWuyYh4AWFe3vCUOKQ6GlJhh3fLRTXr6fYnL2PV0= Received: from DBBPR08MB4646.eurprd08.prod.outlook.com (10.255.79.144) by DBBPR08MB4838.eurprd08.prod.outlook.com (10.255.79.202) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2878.16; Wed, 8 Apr 2020 04:59:43 +0000 Received: from DBBPR08MB4646.eurprd08.prod.outlook.com ([fe80::1870:afc4:b90f:609d]) by DBBPR08MB4646.eurprd08.prod.outlook.com ([fe80::1870:afc4:b90f:609d%5]) with mapi id 15.20.2878.021; Wed, 8 Apr 2020 04:59:43 +0000 From: Honnappa Nagarahalli To: Konstantin Ananyev , "dev@dpdk.org" CC: "david.marchand@redhat.com" , "jielong.zjl@antfin.com" , nd , Honnappa Nagarahalli , nd Thread-Topic: [PATCH v3 2/9] ring: prepare ring to allow new sync schemes Thread-Index: AQHWCd9SGR0FDhbGHEiK+87+US4gIahuWbqw Date: Wed, 8 Apr 2020 04:59:43 +0000 Message-ID: References: <20200402220959.29885-1-konstantin.ananyev@intel.com> <20200403174235.23308-1-konstantin.ananyev@intel.com> <20200403174235.23308-3-konstantin.ananyev@intel.com> In-Reply-To: <20200403174235.23308-3-konstantin.ananyev@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: 7969aff3-3b05-4ee4-bdf3-a90d2db28b51.0 x-checkrecipientchecked: true Authentication-Results-Original: spf=none (sender IP is ) smtp.mailfrom=Honnappa.Nagarahalli@arm.com; x-originating-ip: [70.113.25.165] x-ms-publictraffictype: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: e40dadc0-4242-42ef-d33e-08d7db79ab2a x-ms-traffictypediagnostic: DBBPR08MB4838:|DBBPR08MB4838:|HE1PR08MB2793: x-ms-exchange-transport-forked: True X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true nodisclaimer: true x-ms-oob-tlc-oobclassifiers: OLM:1824;OLM:1824; x-forefront-prvs: 0367A50BB1 X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DBBPR08MB4646.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(10009020)(4636009)(346002)(39860400002)(136003)(376002)(366004)(396003)(86362001)(66476007)(66946007)(478600001)(8676002)(316002)(64756008)(66446008)(30864003)(7696005)(76116006)(186003)(66556008)(5660300002)(52536014)(9686003)(55016002)(71200400001)(4326008)(33656002)(81156014)(110136005)(8936002)(2906002)(54906003)(6506007)(26005)(81166007); DIR:OUT; SFP:1101; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: k31iwRTpp2QtDcXBfYdvKAAWooMNB8ouzkaulJBCVvjnoAysAv3NqAGWXznPBcpt4KpkYnsbQ5nMegvZFQ5BCKts5iGbqzjWt6+6VnC2hDtnANlOmLgnKLt5uMjbfcyx6FayWVwaoMLCRSquPRoSQonJUN65GBNFcr5Z7aop9l9vodVMeluUJqtUtIAgyynSG3419kUZwMyMArzal72zJVIrXjtnU6TtWbNqcOl2NPM9jgHWMu3Zap/Y9PAmU2J95M1F34sM2H42czzgWlYnF2ivm6R5jT+tEhzpBYrSJLD/3+mkw7q+0viLtVwfVu3UCM7+l59fLvTdisRqXSIpVthSn/HB6zkc493vo4aEWGEplKua1/FlqU/4avvFSga5lCyTIB1OPwxNU0PXF2TpVA752Dw1VSCzLW2lK0dFq726Jb676ICcHcHKjaiZ81aT x-ms-exchange-antispam-messagedata: Q9BnOveaYpaphrg6T0yfSTy+Sn4FB5BFZ3g62y6EUtJ7fzmp/o7wJAhpAqE0nyoX1e9KYkGzX3kJfHxlTTn9uOT7rTM+08iX1zyFWRNzOzMKe9LiU4owzgPFJaO6vkZN/tfVBUNdNhYoNZxdyQ5rjA== Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB4838 Original-Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Honnappa.Nagarahalli@arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM5EUR03FT009.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:(10009020)(4636009)(136003)(396003)(39860400002)(376002)(346002)(46966005)(7696005)(478600001)(9686003)(86362001)(26005)(4326008)(8676002)(26826003)(186003)(55016002)(81156014)(30864003)(54906003)(5660300002)(36906005)(110136005)(70206006)(316002)(70586007)(52536014)(2906002)(47076004)(82740400003)(6506007)(356004)(33656002)(336012)(8936002)(81166007); DIR:OUT; SFP:1101; X-MS-Office365-Filtering-Correlation-Id-Prvs: ba6adedb-a0ea-4fbb-7f0d-08d7db79a6f7 X-Forefront-PRVS: 0367A50BB1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: rGhFKzG6wwiKAEMjzp+ihMXSINIGm38X4M5oW0kutJWGPrTZ/IGZBz7ooIbDhuYvgbPqG8ISCIQp9+ZJIiAYd5JvRu73CY6JBbPEEBRzjBbhidR00LzlU5Iw/uunjZv5XcEFin8Tg+zYf2Gk04mXiKrS3kn6OT3Tz3K+HsmvwsarVW6cd1ar7oG2zH1m5GywnXHddUbAgNPeOx+7sNcqbQWzS+E3oO8b5KhnMq7nFQqOnsnhRXDg2/fSmQxqJIsctrlI09958JoW2/TkKn94gowHrbAirVe1+Cd3zE6sw4BK5e9Nyd/Lgsh7VNTRGHnkuA8aZrWuETdsPr/OqnHLQqDBPmN17/p71d3zLt+GwxFBjtOyx/0Goh5ZZGjhj5cFkMtx26YgxOVrISQ6DHwIYgtv34lp0pEPa8DAXh/NzvAt3QhRFwvYVzdiCPErlP98qIhkyhXyCzeNeP9IKz1L+wToYczlc63ty5umxf8PA112td1tbxMQrLFHKzTxl58jOAJStjTtqGejmAkjDS03dw== X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2020 04:59:50.4670 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e40dadc0-4242-42ef-d33e-08d7db79ab2a 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: HE1PR08MB2793 Subject: Re: [dpdk-dev] [PATCH v3 2/9] ring: prepare ring to allow new sync schemes 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" > Subject: [PATCH v3 2/9] ring: prepare ring to allow new sync schemes >=20 > Change from *single* to *sync_type* to allow different synchronisation > schemes to be applied. > Mark *single* as deprecated in comments. > Add new functions to allow user to query ring sync types. > Replace direct access to *single* with appopriate function call. >=20 > Signed-off-by: Konstantin Ananyev > --- > app/test/test_pdump.c | 6 +- > lib/librte_pdump/rte_pdump.c | 2 +- > lib/librte_port/rte_port_ring.c | 12 ++-- > lib/librte_ring/rte_ring.c | 6 +- > lib/librte_ring/rte_ring.h | 113 ++++++++++++++++++++++++++------ > lib/librte_ring/rte_ring_elem.h | 8 +-- > 6 files changed, 108 insertions(+), 39 deletions(-) >=20 > diff --git a/app/test/test_pdump.c b/app/test/test_pdump.c index > ad183184c..6a1180bcb 100644 > --- a/app/test/test_pdump.c > +++ b/app/test/test_pdump.c > @@ -57,8 +57,7 @@ run_pdump_client_tests(void) > if (ret < 0) > return -1; > mp->flags =3D 0x0000; > - ring_client =3D rte_ring_create("SR0", RING_SIZE, rte_socket_id(), > - RING_F_SP_ENQ | RING_F_SC_DEQ); > + ring_client =3D rte_ring_create("SR0", RING_SIZE, rte_socket_id(), 0); Are you saying to get SP and SC behavior we now have to set the flags to 0?= Isn't that a ABI break? > if (ring_client =3D=3D NULL) { > printf("rte_ring_create SR0 failed"); > return -1; > @@ -71,9 +70,6 @@ run_pdump_client_tests(void) > } > rte_eth_dev_probing_finish(eth_dev); >=20 > - ring_client->prod.single =3D 0; > - ring_client->cons.single =3D 0; Just wondering if users outside of DPDK have done the same. I hope not, oth= erwise, we have an API break? > - > printf("\n***** flags =3D RTE_PDUMP_FLAG_TX *****\n"); >=20 > for (itr =3D 0; itr < NUM_ITR; itr++) { > diff --git a/lib/librte_pdump/rte_pdump.c b/lib/librte_pdump/rte_pdump.c > index 8a01ac510..65364f2c5 100644 > --- a/lib/librte_pdump/rte_pdump.c > +++ b/lib/librte_pdump/rte_pdump.c > @@ -380,7 +380,7 @@ pdump_validate_ring_mp(struct rte_ring *ring, struct > rte_mempool *mp) > rte_errno =3D EINVAL; > return -1; > } > - if (ring->prod.single || ring->cons.single) { > + if (rte_ring_prod_single(ring) || rte_ring_cons_single(ring)) { > PDUMP_LOG(ERR, "ring with either SP or SC settings" > " is not valid for pdump, should have MP and MC settings\n"); > rte_errno =3D EINVAL; > diff --git a/lib/librte_port/rte_port_ring.c b/lib/librte_port/rte_port_r= ing.c > index 47fcdd06a..2f6c050fa 100644 > --- a/lib/librte_port/rte_port_ring.c > +++ b/lib/librte_port/rte_port_ring.c > @@ -44,8 +44,8 @@ rte_port_ring_reader_create_internal(void *params, int > socket_id, > /* Check input parameters */ > if ((conf =3D=3D NULL) || > (conf->ring =3D=3D NULL) || > - (conf->ring->cons.single && is_multi) || > - (!(conf->ring->cons.single) && !is_multi)) { > + (rte_ring_cons_single(conf->ring) && is_multi) || > + (!rte_ring_cons_single(conf->ring) && !is_multi)) { > RTE_LOG(ERR, PORT, "%s: Invalid Parameters\n", __func__); > return NULL; > } > @@ -171,8 +171,8 @@ rte_port_ring_writer_create_internal(void *params, > int socket_id, > /* Check input parameters */ > if ((conf =3D=3D NULL) || > (conf->ring =3D=3D NULL) || > - (conf->ring->prod.single && is_multi) || > - (!(conf->ring->prod.single) && !is_multi) || > + (rte_ring_prod_single(conf->ring) && is_multi) || > + (!rte_ring_prod_single(conf->ring) && !is_multi) || > (conf->tx_burst_sz > RTE_PORT_IN_BURST_SIZE_MAX)) { > RTE_LOG(ERR, PORT, "%s: Invalid Parameters\n", __func__); > return NULL; > @@ -440,8 +440,8 @@ rte_port_ring_writer_nodrop_create_internal(void > *params, int socket_id, > /* Check input parameters */ > if ((conf =3D=3D NULL) || > (conf->ring =3D=3D NULL) || > - (conf->ring->prod.single && is_multi) || > - (!(conf->ring->prod.single) && !is_multi) || > + (rte_ring_prod_single(conf->ring) && is_multi) || > + (!rte_ring_prod_single(conf->ring) && !is_multi) || > (conf->tx_burst_sz > RTE_PORT_IN_BURST_SIZE_MAX)) { > RTE_LOG(ERR, PORT, "%s: Invalid Parameters\n", __func__); > return NULL; > diff --git a/lib/librte_ring/rte_ring.c b/lib/librte_ring/rte_ring.c inde= x > 77e5de099..fa5733907 100644 > --- a/lib/librte_ring/rte_ring.c > +++ b/lib/librte_ring/rte_ring.c > @@ -106,8 +106,10 @@ rte_ring_init(struct rte_ring *r, const char *name, > unsigned count, > if (ret < 0 || ret >=3D (int)sizeof(r->name)) > return -ENAMETOOLONG; > r->flags =3D flags; > - r->prod.single =3D (flags & RING_F_SP_ENQ) ? __IS_SP : __IS_MP; > - r->cons.single =3D (flags & RING_F_SC_DEQ) ? __IS_SC : __IS_MC; > + r->prod.sync_type =3D (flags & RING_F_SP_ENQ) ? > + RTE_RING_SYNC_ST : RTE_RING_SYNC_MT; > + r->cons.sync_type =3D (flags & RING_F_SC_DEQ) ? > + RTE_RING_SYNC_ST : RTE_RING_SYNC_MT; >=20 > if (flags & RING_F_EXACT_SZ) { > r->size =3D rte_align32pow2(count + 1); diff --git > a/lib/librte_ring/rte_ring.h b/lib/librte_ring/rte_ring.h index > 18fc5d845..d4775a063 100644 > --- a/lib/librte_ring/rte_ring.h > +++ b/lib/librte_ring/rte_ring.h > @@ -61,11 +61,27 @@ enum rte_ring_queue_behavior { #define > RTE_RING_NAMESIZE (RTE_MEMZONE_NAMESIZE - \ > sizeof(RTE_RING_MZ_PREFIX) + 1) >=20 > -/* structure to hold a pair of head/tail values and other metadata */ > +/** prod/cons sync types */ > +enum rte_ring_sync_type { > + RTE_RING_SYNC_MT, /**< multi-thread safe (default mode) */ > + RTE_RING_SYNC_ST, /**< single thread only */ > +}; > + > +/** > + * structure to hold a pair of head/tail values and other metadata. > + * Depending on sync_type format of that structure might be different, > + * but offset for *sync_type* and *tail* values should remain the same. > + */ > struct rte_ring_headtail { > - volatile uint32_t head; /**< Prod/consumer head. */ > - volatile uint32_t tail; /**< Prod/consumer tail. */ > - uint32_t single; /**< True if single prod/cons */ > + volatile uint32_t head; /**< prod/consumer head. */ > + volatile uint32_t tail; /**< prod/consumer tail. */ > + RTE_STD_C11 > + union { > + /** sync type of prod/cons */ > + enum rte_ring_sync_type sync_type; > + /** deprecated - True if single prod/cons */ > + uint32_t single; > + }; > }; >=20 > /** > @@ -116,11 +132,10 @@ struct rte_ring { > #define RING_F_EXACT_SZ 0x0004 > #define RTE_RING_SZ_MASK (0x7fffffffU) /**< Ring size mask */ >=20 > -/* @internal defines for passing to the enqueue dequeue worker functions > */ -#define __IS_SP 1 -#define __IS_MP 0 -#define __IS_SC 1 -#define > __IS_MC 0 > +#define __IS_SP RTE_RING_SYNC_ST > +#define __IS_MP RTE_RING_SYNC_MT > +#define __IS_SC RTE_RING_SYNC_ST > +#define __IS_MC RTE_RING_SYNC_MT I think we can remove these #defines and use the new SYNC types >=20 > /** > * Calculate the memory size needed for a ring @@ -420,7 +435,7 @@ > rte_ring_mp_enqueue_bulk(struct rte_ring *r, void * const *obj_table, > unsigned int n, unsigned int *free_space) { > return __rte_ring_do_enqueue(r, obj_table, n, > RTE_RING_QUEUE_FIXED, > - __IS_MP, free_space); > + RTE_RING_SYNC_MT, free_space); > } >=20 > /** > @@ -443,7 +458,7 @@ rte_ring_sp_enqueue_bulk(struct rte_ring *r, void * > const *obj_table, > unsigned int n, unsigned int *free_space) { > return __rte_ring_do_enqueue(r, obj_table, n, > RTE_RING_QUEUE_FIXED, > - __IS_SP, free_space); > + RTE_RING_SYNC_ST, free_space); > } >=20 > /** > @@ -470,7 +485,7 @@ rte_ring_enqueue_bulk(struct rte_ring *r, void * > const *obj_table, > unsigned int n, unsigned int *free_space) { > return __rte_ring_do_enqueue(r, obj_table, n, > RTE_RING_QUEUE_FIXED, > - r->prod.single, free_space); > + r->prod.sync_type, free_space); > } >=20 > /** > @@ -554,7 +569,7 @@ rte_ring_mc_dequeue_bulk(struct rte_ring *r, void > **obj_table, > unsigned int n, unsigned int *available) { > return __rte_ring_do_dequeue(r, obj_table, n, > RTE_RING_QUEUE_FIXED, > - __IS_MC, available); > + RTE_RING_SYNC_MT, available); > } >=20 > /** > @@ -578,7 +593,7 @@ rte_ring_sc_dequeue_bulk(struct rte_ring *r, void > **obj_table, > unsigned int n, unsigned int *available) { > return __rte_ring_do_dequeue(r, obj_table, n, > RTE_RING_QUEUE_FIXED, > - __IS_SC, available); > + RTE_RING_SYNC_ST, available); > } >=20 > /** > @@ -605,7 +620,7 @@ rte_ring_dequeue_bulk(struct rte_ring *r, void > **obj_table, unsigned int n, > unsigned int *available) > { > return __rte_ring_do_dequeue(r, obj_table, n, > RTE_RING_QUEUE_FIXED, > - r->cons.single, available); > + r->cons.sync_type, available); > } >=20 > /** > @@ -777,6 +792,62 @@ rte_ring_get_capacity(const struct rte_ring *r) > return r->capacity; > } >=20 > +/** > + * Return sync type used by producer in the ring. > + * > + * @param r > + * A pointer to the ring structure. > + * @return > + * Producer sync type value. > + */ > +static inline enum rte_ring_sync_type > +rte_ring_get_prod_sync_type(const struct rte_ring *r) { > + return r->prod.sync_type; > +} > + > +/** > + * Check is the ring for single producer. ^^ if > + * > + * @param r > + * A pointer to the ring structure. > + * @return > + * true if ring is SP, zero otherwise. > + */ > +static inline int > +rte_ring_prod_single(const struct rte_ring *r) { would rte_ring_is_prod_single better? > + return (rte_ring_get_prod_sync_type(r) =3D=3D RTE_RING_SYNC_ST); } > + > +/** > + * Return sync type used by consumer in the ring. > + * > + * @param r > + * A pointer to the ring structure. > + * @return > + * Consumer sync type value. > + */ > +static inline enum rte_ring_sync_type > +rte_ring_get_cons_sync_type(const struct rte_ring *r) { > + return r->cons.sync_type; > +} > + > +/** > + * Check is the ring for single consumer. > + * > + * @param r > + * A pointer to the ring structure. > + * @return > + * true if ring is SC, zero otherwise. > + */ > +static inline int > +rte_ring_cons_single(const struct rte_ring *r) { > + return (rte_ring_get_cons_sync_type(r) =3D=3D RTE_RING_SYNC_ST); } > + All these new functions are not required to be called in the data path. Th= ey can be made non-inline. > /** > * Dump the status of all rings on the console > * > @@ -820,7 +891,7 @@ rte_ring_mp_enqueue_burst(struct rte_ring *r, void * > const *obj_table, > unsigned int n, unsigned int *free_space) { > return __rte_ring_do_enqueue(r, obj_table, n, > - RTE_RING_QUEUE_VARIABLE, __IS_MP, free_space); > + RTE_RING_QUEUE_VARIABLE, RTE_RING_SYNC_MT, > free_space); > } >=20 > /** > @@ -843,7 +914,7 @@ rte_ring_sp_enqueue_burst(struct rte_ring *r, void * > const *obj_table, > unsigned int n, unsigned int *free_space) { > return __rte_ring_do_enqueue(r, obj_table, n, > - RTE_RING_QUEUE_VARIABLE, __IS_SP, free_space); > + RTE_RING_QUEUE_VARIABLE, RTE_RING_SYNC_ST, > free_space); > } >=20 > /** > @@ -870,7 +941,7 @@ rte_ring_enqueue_burst(struct rte_ring *r, void * > const *obj_table, > unsigned int n, unsigned int *free_space) { > return __rte_ring_do_enqueue(r, obj_table, n, > RTE_RING_QUEUE_VARIABLE, > - r->prod.single, free_space); > + r->prod.sync_type, free_space); > } >=20 > /** > @@ -898,7 +969,7 @@ rte_ring_mc_dequeue_burst(struct rte_ring *r, void > **obj_table, > unsigned int n, unsigned int *available) { > return __rte_ring_do_dequeue(r, obj_table, n, > - RTE_RING_QUEUE_VARIABLE, __IS_MC, available); > + RTE_RING_QUEUE_VARIABLE, RTE_RING_SYNC_MT, > available); > } >=20 > /** > @@ -923,7 +994,7 @@ rte_ring_sc_dequeue_burst(struct rte_ring *r, void > **obj_table, > unsigned int n, unsigned int *available) { > return __rte_ring_do_dequeue(r, obj_table, n, > - RTE_RING_QUEUE_VARIABLE, __IS_SC, available); > + RTE_RING_QUEUE_VARIABLE, RTE_RING_SYNC_ST, > available); > } >=20 > /** > @@ -951,7 +1022,7 @@ rte_ring_dequeue_burst(struct rte_ring *r, void > **obj_table, { > return __rte_ring_do_dequeue(r, obj_table, n, > RTE_RING_QUEUE_VARIABLE, > - r->cons.single, available); > + r->cons.sync_type, available); > } >=20 > #ifdef __cplusplus > diff --git a/lib/librte_ring/rte_ring_elem.h b/lib/librte_ring/rte_ring_e= lem.h > index 663addc73..28f9836e6 100644 > --- a/lib/librte_ring/rte_ring_elem.h > +++ b/lib/librte_ring/rte_ring_elem.h > @@ -570,7 +570,7 @@ rte_ring_enqueue_bulk_elem(struct rte_ring *r, const > void *obj_table, > unsigned int esize, unsigned int n, unsigned int *free_space) { > return __rte_ring_do_enqueue_elem(r, obj_table, esize, n, > - RTE_RING_QUEUE_FIXED, r->prod.single, free_space); > + RTE_RING_QUEUE_FIXED, r->prod.sync_type, > free_space); > } >=20 > /** > @@ -734,7 +734,7 @@ rte_ring_dequeue_bulk_elem(struct rte_ring *r, void > *obj_table, > unsigned int esize, unsigned int n, unsigned int *available) { > return __rte_ring_do_dequeue_elem(r, obj_table, esize, n, > - RTE_RING_QUEUE_FIXED, r->cons.single, available); > + RTE_RING_QUEUE_FIXED, r->cons.sync_type, > available); > } >=20 > /** > @@ -902,7 +902,7 @@ rte_ring_enqueue_burst_elem(struct rte_ring *r, > const void *obj_table, > unsigned int esize, unsigned int n, unsigned int *free_space) { > return __rte_ring_do_enqueue_elem(r, obj_table, esize, n, > - RTE_RING_QUEUE_VARIABLE, r->prod.single, > free_space); > + RTE_RING_QUEUE_VARIABLE, r->prod.sync_type, > free_space); > } >=20 > /** > @@ -995,7 +995,7 @@ rte_ring_dequeue_burst_elem(struct rte_ring *r, void > *obj_table, { > return __rte_ring_do_dequeue_elem(r, obj_table, esize, n, > RTE_RING_QUEUE_VARIABLE, > - r->cons.single, available); > + r->cons.sync_type, available); > } >=20 > #ifdef __cplusplus > -- > 2.17.1