From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.8 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,URIBL_SBL,URIBL_SBL_A autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2B965C43613 for ; Mon, 24 Jun 2019 06:41:23 +0000 (UTC) Received: from dpdk.org (dpdk.org [92.243.14.124]) by mail.kernel.org (Postfix) with ESMTP id AC31420674 for ; Mon, 24 Jun 2019 06:41:22 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=marvell.com header.i=@marvell.com header.b="KT6NWNfM"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=marvell.onmicrosoft.com header.i=@marvell.onmicrosoft.com header.b="dZextDiR" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AC31420674 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=marvell.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=dev-bounces@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 6A4AA1BF2E; Mon, 24 Jun 2019 08:41:21 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by dpdk.org (Postfix) with ESMTP id 9E5041BF2A for ; Mon, 24 Jun 2019 08:41:19 +0200 (CEST) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x5O6eHGO001585; Sun, 23 Jun 2019 23:41:15 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : content-type : content-transfer-encoding : mime-version; s=pfpt0818; bh=cBw66sOiIoXo7+kmb/HbIiYYqXvIpbgmaeXQu1bqD9I=; b=KT6NWNfMA6wxjK23K9Nfjpm4q3PtoJ7f71eGJNI8EuXKePWcfRQG9pIH3zJeqhVc4mGX L79DO5YtzdjPtgmCPEd2Vw0xZhfXlAV3X+I+az3XVv2XD/gD496YKJ1OBIHl/hkmbyvy 8RG1+BTj4J1CkHoFacRYM3IZoCRDUJJJK8HA66lVTfxVJvRK+nzS8/VeI4OZ3KKOt05M D92aHEfuNNQwXVdRd4ey4VdaElTfOqphMwG+ZqSGIfHT7gb87sN8oMGuf6Q6P8KObeJk zPRXfcqe2zakGcNssIxX1f+WoqoQhoaa0lQDcZWSJvjmCpo53BZTnJOC5l+A7z6jzQFY WA== Received: from sc-exch03.marvell.com ([199.233.58.183]) by mx0b-0016f401.pphosted.com with ESMTP id 2t9kujdkaw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Sun, 23 Jun 2019 23:41:15 -0700 Received: from SC-EXCH01.marvell.com (10.93.176.81) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Sun, 23 Jun 2019 23:41:13 -0700 Received: from NAM04-BN3-obe.outbound.protection.outlook.com (104.47.46.54) by SC-EXCH01.marvell.com (10.93.176.81) with Microsoft SMTP Server (TLS) id 15.0.1367.3 via Frontend Transport; Sun, 23 Jun 2019 23:41:13 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.onmicrosoft.com; s=selector2-marvell-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=cBw66sOiIoXo7+kmb/HbIiYYqXvIpbgmaeXQu1bqD9I=; b=dZextDiR5sWSML4eR4dSJr/S3vbivi6hVoxM+t+GpG/qr3dL2VuVneiS+faZ82tkV35NZvMb0e+B+EYVlH5Njs9PdIAUSkzoWK7zAaPnPh5DVn1JVTm05FkxDRL2sIUtctpG3PVYw03b7Lmlgjxozp/2zDEupcmL3+dMRvK1lSE= Received: from BYAPR18MB2424.namprd18.prod.outlook.com (20.179.91.149) by BYAPR18MB2728.namprd18.prod.outlook.com (20.179.56.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2008.13; Mon, 24 Jun 2019 06:41:08 +0000 Received: from BYAPR18MB2424.namprd18.prod.outlook.com ([fe80::75fd:a528:a1bf:bef4]) by BYAPR18MB2424.namprd18.prod.outlook.com ([fe80::75fd:a528:a1bf:bef4%3]) with mapi id 15.20.2008.014; Mon, 24 Jun 2019 06:41:08 +0000 From: Jerin Jacob Kollanukkaran To: Phil Yang , "dev@dpdk.org" CC: "thomas@monjalon.net" , "hemant.agrawal@nxp.com" , "Honnappa.Nagarahalli@arm.com" , "gavin.hu@arm.com" , "nd@arm.com" , "gage.eads@intel.com" Thread-Topic: [PATCH v2 1/3] eal/arm64: add 128-bit atomic compare exchange Thread-Index: AdUqVpABcLyZ0lTxQfaR61ir9fMMZQ== Date: Mon, 24 Jun 2019 06:41:08 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [14.140.231.66] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 08080f4d-29bc-4626-8a0b-08d6f86ef08d x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600148)(711020)(4605104)(1401327)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020); SRVR:BYAPR18MB2728; x-ms-traffictypediagnostic: BYAPR18MB2728: x-ms-exchange-purlcount: 1 x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:4303; x-forefront-prvs: 007814487B x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(396003)(366004)(39850400004)(136003)(346002)(376002)(189003)(199004)(13464003)(71200400001)(305945005)(7736002)(4326008)(8936002)(6306002)(14444005)(81166006)(8676002)(33656002)(256004)(52536014)(25786009)(66066001)(6436002)(9686003)(55016002)(53936002)(5660300002)(486006)(2501003)(476003)(74316002)(966005)(81156014)(229853002)(86362001)(6246003)(64756008)(6116002)(66446008)(66476007)(66556008)(68736007)(2906002)(76116006)(54906003)(7696005)(99286004)(73956011)(110136005)(478600001)(3846002)(316002)(66946007)(186003)(55236004)(14454004)(26005)(102836004)(6506007)(71190400001)(53546011); DIR:OUT; SFP:1101; SCL:1; SRVR:BYAPR18MB2728; H:BYAPR18MB2424.namprd18.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: marvell.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: Qqq0PEqk3duinb6wuQqhsjEvUa+q3B0oOhPZTy4hjRjKZCF3lMQm3+f0UT2CMpHKS8rL3rYCNkMwQ+mLZwndB5cOxsUukJ9dj+n9xeVxThWBrbrgPmrq1XSACygh2rWfSi9KK20rQD18S3rBk664K0HL9Ytt8V+U/2c9nDw924OYx3tFLB2TXpRAhGClI5wCppkqcu6E9aLvEdESprWZH9c+u44cqe6x+wthMQS5gr6uPnMoUjcmU+m3XNTSXpUAVNtovZQYrLUODoLc2Zph7A+eg66fop6hafNpUysKY3HRc2eUxEasEX+iMwhSGvUlEkkTILG8gwWk8FcH45zgOZRKff0aoTJRYDCk5ZsD3pT8xqtelCXzIVeWoUJ5ssomd8GATSi88SQoKXZdTi/NpoYS4pK8HhJBz6FBooKkqoQ= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 08080f4d-29bc-4626-8a0b-08d6f86ef08d X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Jun 2019 06:41:08.3803 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: jerinj@marvell.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR18MB2728 X-OriginatorOrg: marvell.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:, , definitions=2019-06-24_05:, , signatures=0 Subject: Re: [dpdk-dev] [PATCH v2 1/3] eal/arm64: add 128-bit atomic compare exchange 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" > -----Original Message----- > From: Phil Yang > Sent: Sunday, June 23, 2019 8:46 AM > To: dev@dpdk.org > Cc: thomas@monjalon.net; Jerin Jacob Kollanukkaran ; > hemant.agrawal@nxp.com; Honnappa.Nagarahalli@arm.com; > gavin.hu@arm.com; nd@arm.com; gage.eads@intel.com > Subject: [EXT] [PATCH v2 1/3] eal/arm64: add 128-bit atomic compare > exchange >=20 > Add 128-bit atomic compare exchange on aarch64. >=20 > Signed-off-by: Phil Yang > Reviewed-by: Honnappa Nagarahalli > Tested-by: Honnappa Nagarahalli > --- > This patch depends on 'eal/stack: fix 'pointer-sign' warning' > http://patchwork.dpdk.org/patch/54840/ >=20 > + > +#ifdef __ARM_FEATURE_ATOMICS > +static inline rte_int128_t > +__rte_casp(rte_int128_t *dst, rte_int128_t old, rte_int128_t updated, > +int mo) { Better to change to "const int mo". > + > + /* caspX instructions register pair must start from even-numbered > + * register at operand 1. > + * So, specify registers for local variables here. > + */ > + register uint64_t x0 __asm("x0") =3D (uint64_t)old.val[0]; > + register uint64_t x1 __asm("x1") =3D (uint64_t)old.val[1]; > + register uint64_t x2 __asm("x2") =3D (uint64_t)updated.val[0]; > + register uint64_t x3 __asm("x3") =3D (uint64_t)updated.val[1]; > + > + if (mo =3D=3D __ATOMIC_RELAXED) { > + asm volatile( > + "casp %[old0], %[old1], %[upd0], %[upd1], > [%[dst]]" > + : [old0] "+r" (x0), > + [old1] "+r" (x1) > + : [upd0] "r" (x2), > + [upd1] "r" (x3), > + [dst] "r" (dst) > + : "memory"); > + } else if (mo =3D=3D __ATOMIC_ACQUIRE) { > + asm volatile( > + "caspa %[old0], %[old1], %[upd0], %[upd1], > [%[dst]]" > + : [old0] "+r" (x0), > + [old1] "+r" (x1) > + : [upd0] "r" (x2), > + [upd1] "r" (x3), > + [dst] "r" (dst) > + : "memory"); > + } else if (mo =3D=3D __ATOMIC_ACQ_REL) { > + asm volatile( > + "caspal %[old0], %[old1], %[upd0], %[upd1], > [%[dst]]" > + : [old0] "+r" (x0), > + [old1] "+r" (x1) > + : [upd0] "r" (x2), > + [upd1] "r" (x3), > + [dst] "r" (dst) > + : "memory"); > + } else if (mo =3D=3D __ATOMIC_RELEASE) { > + asm volatile( > + "caspl %[old0], %[old1], %[upd0], %[upd1], > [%[dst]]" > + : [old0] "+r" (x0), > + [old1] "+r" (x1) > + : [upd0] "r" (x2), > + [upd1] "r" (x3), > + [dst] "r" (dst) > + : "memory"); I think, This duplication code can be avoid with macro and casp/capsa/casal= /caspl as argument. > + } else { > + rte_panic("Invalid memory order\n"); rte_panic should be removed from library. In this case, I think, invalid mo= can go for strongest barrier. > + } > + > + old.val[0] =3D x0; > + old.val[1] =3D x1; > + > + return old; > +} > +#else > +static inline rte_int128_t > +__rte_ldx128(const rte_int128_t *src, int mo) { > + rte_int128_t ret; > + if (mo =3D=3D __ATOMIC_ACQUIRE) > + asm volatile( > + "ldaxp %0, %1, %2" > + : "=3D&r" (ret.val[0]), > + "=3D&r" (ret.val[1]) > + : "Q" (src->val[0]) > + : "memory"); > + else if (mo =3D=3D __ATOMIC_RELAXED) > + asm volatile( > + "ldxp %0, %1, %2" > + : "=3D&r" (ret.val[0]), > + "=3D&r" (ret.val[1]) > + : "Q" (src->val[0]) > + : "memory"); Same as above comment. > + else > + rte_panic("Invalid memory order\n"); Same as above comment. > + > + return ret; > +} > + > +static inline uint32_t > +__rte_stx128(rte_int128_t *dst, const rte_int128_t src, int mo) { > + uint32_t ret; > + if (mo =3D=3D __ATOMIC_RELEASE) > + asm volatile( > + "stlxp %w0, %1, %2, %3" > + : "=3D&r" (ret) > + : "r" (src.val[0]), > + "r" (src.val[1]), > + "Q" (dst->val[0]) > + : "memory"); > + else if (mo =3D=3D __ATOMIC_RELAXED) > + asm volatile( > + "stxp %w0, %1, %2, %3" > + : "=3D&r" (ret) > + : "r" (src.val[0]), > + "r" (src.val[1]), > + "Q" (dst->val[0]) > + : "memory"); > + else > + rte_panic("Invalid memory order\n"); Same as above comment. > + > + /* Return 0 on success, 1 on failure */ > + return ret; > +} > +#endif > + > +static inline int __rte_experimental > +rte_atomic128_cmp_exchange(rte_int128_t *dst, > + rte_int128_t *exp, > + const rte_int128_t *src, > + unsigned int weak, > + int success, > + int failure) > +{ > + // Always do strong CAS Remove C++ style code comment.