From patchwork Fri Jun 16 16:26:01 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Szabolcs Nagy X-Patchwork-Id: 21053 Received: (qmail 3265 invoked by alias); 16 Jun 2017 16:26:07 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 1117 invoked by uid 89); 16 Jun 2017 16:26:05 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.4 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 spammy=HX-ClientProxiedBy:sk:AM3PR07 X-HELO: EUR01-DB5-obe.outbound.protection.outlook.com Authentication-Results: redhat.com; dkim=none (message not signed) header.d=none; redhat.com; dmarc=none action=none header.from=arm.com; Message-ID: <59440699.6080900@arm.com> Date: Fri, 16 Jun 2017 17:26:01 +0100 From: Szabolcs Nagy User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.8.0 MIME-Version: 1.0 To: GNU C Library CC: nd@arm.com, "triegel@redhat.com" Subject: [PATCH][AArch64] Single thread lowlevellock optimization X-ClientProxiedBy: AM3PR07CA0135.eurprd07.prod.outlook.com (2603:10a6:207:8::21) To AM5PR0802MB2483.eurprd08.prod.outlook.com (2603:10a6:203:9b::22) X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM5PR0802MB2483: X-MS-Office365-Filtering-Correlation-Id: 38fc2773-fa54-47ef-1d9f-08d4b4d4629e X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500041)(300135000095)(300000501041)(300135300095)(22001)(300000502041)(300135100095)(300000503041)(300135400095)(48565401081)(49563028)(201703131423075)(201703031133081)(300000504041)(300135200095)(300000505041)(300135600095)(300000506037)(300135500095); SRVR:AM5PR0802MB2483; X-Microsoft-Exchange-Diagnostics: 1; AM5PR0802MB2483; 3:K4ndce30pxPIcorghy/IKOdDOf0J1Gv9fQqfqR3VMweBed0wtKgVXw8d8t9JleTu4vEzlei69xyBYkHOhr0Et5IJ6sc6HSLXmpa02Xo8FxjE2fz6HIqaVZFWDxjawolTc0fPmWH/1MgAlMt12jPVQ9ujFLjuXtU/VJbdwm9UyNjEHmW9YmVTqw1eNGCgO4/V9uDLsqe7PBd8xOrs58jkvsCdDu+SNeP28zXqj0qfcqFTs1e7/UjidkXVNg1T91X5z7CXKSjFawgRTLNNAokuUUpzoMQFHCyBn/5I+xpjmFvd5pP1uDv8hkSpARmrveaSHbBVUMy1NoK2V+lIatLoRI6K6et3SiSpnIIzzINZ80Pjo1aCxGTD2FnkMGgcLUydhSugTBLjWvB00qRYjpIk3MEdlo4JtscrAvAliPduihJUXRHKBHB2XiTrOsODQh+F08ZQ42uzftNUIJy0mOVNqd+RojW6DVdNUy3FvyBeX7KMZKuVI3xQKXuhz6NG2XxCYm5GgVjxxzcvjLWcSBYkcyKimPomwXIKL+b3gYt9wBKUTfCEqnXTShkfMr0EilNyAFWw7A6Qq8Dv4RPL0dceyl4Qt0DWCZxboLkp5Cd/ns3uyvgpah8fElJ4k5YWvr8D4jSYtKW79vhjvlVd4xvIqDgqVqVC/89XbDT5Beu9M56zIGd6+27S9/d23gneZi2puYC7LhLYCJRPw7BPb9hFa/Ubw9VquqV4f5LfgMeN9vK4ihS+9Oc7n8YWNZpHvRASWbGuH8Yn5OA5o0aAX+h/UDoLIMYwKkvR9HJSN0/JfU0= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM5PR0802MB2483; 25:1OTK47tjTNT84aRcGhY1V9QDkyuZv2edR67q5xd?= =?us-ascii?Q?1vF+bxE7V6hXJFIhFtlWo9wmwV+40EldkRpHKbW08S4r5AfM8L7XRa9T+t8e?= =?us-ascii?Q?0NTwIJw46XQtyLSrs5SQIfOUCl+ZDA9jJFWcnc3wc2PN0by89VQHmJrHC5I9?= =?us-ascii?Q?59drLEOudR7FsBegLf+PweJjjd+MRplYO0KzzRUrso4Dt+6jPab6YJPyE370?= =?us-ascii?Q?RTQ7LFFEj1HYOSqBG9at/A28hLTOfEt5ZuX9kxqK88tBgZw8zqfNnEgq1h1x?= =?us-ascii?Q?MlzmDECQcfhY3ATBcJVIVDTsELTUR7jxrDc8wfu99l0gex0CzKv4TaSqbVXl?= =?us-ascii?Q?VuiDKG3veOLzijFvgr+I6vxJ8tAcR73RifHudfC5TKwMMUNvnR8P4WUd7Ddp?= =?us-ascii?Q?Pahs3oNAd4JhVvIEzaCrTPYQ/TPFHDmCnUotzpLUXUf5tisRad41oXf5qcf6?= =?us-ascii?Q?WWa4qjlUsRP5SftlwvhVw3wSOfIVRrMxQwhrt/6onoM/vWJ3i+PRXcAJN59t?= =?us-ascii?Q?f+16cORIVrdqIL9NusLWQSOvlhaOOEIBNxtPRPcO+M7E/nsqIbCqjLd0wAN8?= =?us-ascii?Q?lObny7mFQM5rUjRI7wrrSvBKL7QzrICObg182IH3t8RWvqTqpEVA2oMOYIg+?= =?us-ascii?Q?3toU5fP7PCGxe5voeTM2d8ZPVLZHrzSHdF/PQ0wmHzp8KQPD3prgUhy+Vx3Y?= =?us-ascii?Q?mMT5QGEtIqtM6WiKe6Y9XQFmHKJlLr56KHu4oko+p8lbtPqraduqy6Ug0Rtv?= =?us-ascii?Q?GFnO5Tpy8hev49cjIF9AagOkaqgB5z4DUFVi/G4WMw6SIfzVwJClVKRPEp9f?= =?us-ascii?Q?00gN2qSyrOsYyPPlYA5aSZ2lb7/FLCQx+pgVB5bIsB7KRWlopmAeJxP0SUN+?= =?us-ascii?Q?8ZvNZ3t7NQa2kdX9O6QGT823ywaKgBoWJ9hO16l1aEgs713YHh6qs+d8tVw8?= =?us-ascii?Q?YQQJRX+krko4ac830X5GPZ3IQJX3pGeW9UhQLANE2EQ=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; AM5PR0802MB2483; 31:tWqK47N7dZFeCDzM60f+kDrPwhJBub3VfoEUSrPMlq108HwAAkc5P9hi7Xfw4+HgyBy0Y3UCmgMpZ9RMAnXENGuZRrD38tWoQTSwbzaNSRXKv1MxjK2G8PYLt1yO8uSeG8Whyd8jJ8NXPcxjeqcv0HJe8uVqDTQbtITdtFpl5TqkPf9GzvPD3This/JJF0T1aNg+UyhSZSb1BMmyV/dceGhOAmwOJ3taoJoQvN4xnKFldXIZgdpw458+xthXPGV1KaEaCXNd1kX/se04j5pDyABnC6riM6BEsep9scSYT9LTit+PCw/TiyRvJPzexv5FpyvDRmiy1lGM44OqUwGLBJKty5YyddqEaJnhj+0TJ5IBfUS8dad/yo9B71kpaygaj3eU7nsXTtug0YTgiOY6eKZd2l2CiVPXE5wP0pkTZLmPyksM1EHxVUAA5OBqlUAlSbMTjU5CVoTzuvjK5b8bidp7qE/k6AzH3YWWROGsDrf6g8vxCSzlDFqTbvawZZn99vL6LNckjL8vGrWjRgqxgD/XSuRXWuZiA5zwrRmjRWmUkcljWhyDtd4BhYcSBXOskaQCpvDFGVJd4I7jrMpCckD0a1kNVqJS4ft2n1ZFW9QxGS6OLEw5CQa1SXpB7ONV2jbKkwkL7MeMH3isTm4wBJ+EkSPjENJAW3tfGfqp3fpKtlxezocaAb9XObICiNEV7nGKDS0z46TqU3wmV1HyTw==; 20:WEGzTveamXg8woB9WANyYYLVVo5r+n76r6c2kO0GA1a92Vyhv0LmkY9tChwtqU7HgktgQERdGmfvbmX7IvH0w+28nixa16HPnH4omEhD5m/2kCxZ1l55OczuUu/oVm0vxdVfr4Nb5UxVCWNMZgCmMpm6PeDtTLmrnejYrmi9Tp0= NoDisclaimer: True X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(180628864354917); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(102415395)(6040450)(601004)(2401047)(5005006)(8121501046)(93006095)(93001095)(10201501046)(3002001)(100000703101)(100105400095)(6055026)(6041248)(20161123562025)(20161123564025)(20161123555025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:AM5PR0802MB2483; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:AM5PR0802MB2483; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM5PR0802MB2483; 4:/3ZPn2a2rNTP1s6D6Tbcx9Ogk8N4IxcKS7lL2y5K?= =?us-ascii?Q?zj34wix7dQ2QwumILruulQnQ8d7wLnZ8gYpbd7hAwOxBpnfyJ7/FvCxmJfqN?= =?us-ascii?Q?J5A5WkkLpVwmBpE++gHKgb587Q5hJGjggIcDmlf6mOhpB4auaGQ1qPbEKokK?= =?us-ascii?Q?Q/FecSRwpag+7gUCTWIglnREcShKGiAhRXh0sxSLB1n6v3H/KK5O+0Hibr1v?= =?us-ascii?Q?dbrSk/O0VkulN+gPGdoAS3MLMZkGFSwG2gJNQGlNWx9cUH8cBem7OZjDuUxY?= =?us-ascii?Q?phxCu+NXmLEiQEiiWz6juV9wQpKAv9nr4BtDyjDG27HdqGIELeMMdbUoTRbK?= =?us-ascii?Q?70xxKin4MGWMBCVpvfGXHJ4TTQLe8GU7EKr6DYisBmx2vw+kFN9afe1FDd/C?= =?us-ascii?Q?tzzF2B103qXGT/s6TCsjk0T440R9bU8HAGJHAfl5ejpjJO3GQZc2FWt2Gog+?= =?us-ascii?Q?PO9n6XbcIKr8ztyL8mSj0dpmiZ7gddL8V8/hKmq60b3OI4FEz3PMn9try3hp?= =?us-ascii?Q?07Xo7YUbNT//TpZZ1dGbhcWqlBp2w+na1LGfJ8yATwk1o3Mc/NUnX27XBGjB?= =?us-ascii?Q?nCyxH0npXubla++mQv59BNT730cBwBH5r+/S7IjbmYpfj6ZQ3zxgjuKkFbox?= =?us-ascii?Q?aM3zyrQ7SDlHJeMZB1Gniv12qHSDedJ9qjjH/ez2WpF++0JmnAxtSoLe3Ie7?= =?us-ascii?Q?gXYmH3lrLh6nYdQldWmiVFByq/IzZN805/ZLaaocNj5j1Oq+MkRUDtEJkZfD?= =?us-ascii?Q?zo8e0/2mxC08vxyj2Q63nJri41O/kP56z7d0TyVY5URkYEJtOUJYP9CISkjv?= =?us-ascii?Q?iXPYY3yQmBSMRIifV7Ko/nfN62xDOgk8P2tI8bYnFW5O3yxK/jJAAyO15FYA?= =?us-ascii?Q?4HTMsYBroyE8Zln+NJzidmVHXp51fELzCZ6DIbF7AhG0tRP1ayUhaRPhuxF3?= =?us-ascii?Q?Auiy19VX4T4Mtg+xRJ8H2w6pJcm3O+G1mu2/u/XgzxN2+pAw3Q8Q0K72veGK?= =?us-ascii?Q?8rqH48xVxC0acmNM99cETi3EhD6YENfW8gZPPk63jCfY7M0kR74lCLMVmeZL?= =?us-ascii?Q?azRYvcpYS0lb8DmuRMFsHi8LDifwwGiaOUlJ8+0oGRzGRAJtdqbCOoijzE0K?= =?us-ascii?Q?OjJsxU6wGpeSfND3Sjykpv7vPs7sUZU4v8BdOS/0VzkZ+OOPB7vuuwThVzeU?= =?us-ascii?Q?e9G4pHsK3D5nD6GV5fxuN+S3KUjgI8T4IqFlfrBDrtbHN/rTjBGsFL3BeQ?= =?us-ascii?Q?=3D=3D?= X-Forefront-PRVS: 0340850FCD X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(979002)(6009001)(6049001)(39850400002)(39410400002)(39400400002)(39860400002)(39450400003)(39840400002)(377424004)(4326008)(4001350100001)(966005)(5890100001)(4610100001)(189998001)(72206003)(25786009)(7736002)(83506001)(50986999)(305945005)(86362001)(110136004)(5660300001)(38730400002)(99136001)(65956001)(65806001)(66066001)(84326002)(478600001)(53936002)(6666003)(87266999)(6306002)(77096006)(36756003)(6486002)(6916009)(2476003)(54356999)(122286003)(65816999)(8676002)(2906002)(117636001)(6116002)(64126003)(59896002)(270700001)(568964002)(81166006)(21490400002)(3846002)(42186005)(62816006)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:AM5PR0802MB2483; H:[10.2.206.69]; FPR:; SPF:None; MLV:ovrnspm; PTR:InfoNoRecords; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM5PR0802MB2483; 23:hC1+R/nj1De+q4fPz0vYawDNPapDpaEIpzpvBRA?= =?us-ascii?Q?LQ8Jrqwss+s66bX6sHI7D16g/LEe8htfImQnzl1jSfqwdVlT4pjjmG6xfuch?= =?us-ascii?Q?Oq8DyQ663lU8jgY5XaSoItBZHRe43AdyEeq2KQDufaOarQ7VPOj9awGHYYSQ?= =?us-ascii?Q?dsMs0v4GkNxPS/2B9eO1AecMFqNV2vibPvg2JqCNvlJSs1fTfbTrUvvsaWr7?= =?us-ascii?Q?+LXjgE81fXKFysDbTEpg36pQSV7RpI0xTUTkkrNMaRtDsHQW4hXowGtIaKt6?= =?us-ascii?Q?FZth1IlRSobx0isPQIA4z4tsHoLxKdpJGwRABXaD8mnTNJoHxYnAuHW9kF/4?= =?us-ascii?Q?823hwb1U/OoAuMOmYWKmLhCq2kmyx/YlT1i+dnTloWv8bUIQFTATn0IY2mh0?= =?us-ascii?Q?Vk7E9NoyyGrHUaOk+jcAes0gI0m6JnqjhoWCynIL0YOLKDeQkx5sRjS+ABnW?= =?us-ascii?Q?qnL5nNjWpPBS17opcFooUN/XBiJ8Qu744CP3doeOx5g2hpJKGil38sxXJo3S?= =?us-ascii?Q?fvfN8rzVEfR5OatHgc8k9a3wlFlkzdBysojgm+ohb45cHx/PyWfzNgpNioA7?= =?us-ascii?Q?bmBtvO6uPqoFq79RDs4YEUnS+BlLy+h5os7F/OlizRSiHO6CIgIyVOzM79tn?= =?us-ascii?Q?fbYewdA41Yz1ixo2HV9S2+oLvbRoSQAG6BydTrCz0GrJD/ABAn41ayS55Bkx?= =?us-ascii?Q?dMb43tP3h4wVD13i28WJuEP6aR1rnM48dK9j4ncrk1eYANDKtIG1OgdAmlHR?= =?us-ascii?Q?vWBgLdU1L0f5TvtjG+l6n4NC60QDRoDED61kQLA7OFNe3t+Oorqqatt+l2DX?= =?us-ascii?Q?hwAADQZuTfZVYF70gsVWooqWq5+rQqpL2STMFaELvKLCVqO27eBkcFnBPI/Y?= =?us-ascii?Q?inwd1EKwutyvo2msHpDrnd3DDCr/lKY2Af1uZONF2H3aNJRnMTBpsL0e7rAy?= =?us-ascii?Q?A1Wu8Hh+RLKThw7lOrG+0DNHix1LF/eo52TptBJRVsKKrxRZDS0SsyhlmySL?= =?us-ascii?Q?OmUaKwIzhU4s0VqxYxf/7MoptJWuF6dtPxNQJMC7ySdPUjPjOLEmh7gLmnmf?= =?us-ascii?Q?sUk8R6jogE1QD2o3VDUPiXbHrt9nc/I9vTY5Fb/in3mtLSJ12CnQRdb6+RRD?= =?us-ascii?Q?OZ/nu+TH245YiHRFrIbCaTXaOfFsOXhT6pn5IrsGr2dJ77RTljTYO8P41i5A?= =?us-ascii?Q?iiviSxJYrrFGfZ4fI1g35ELyH3vC/XwJjtmNlJ/0b6C7IT2QRpGfxajoG32Z?= =?us-ascii?Q?wk5K6LfOUi2pLCGeDj+S8Ezkj+YWWJgeUU7Dv/t+lrU7mGFSTkodI6h36QDG?= =?us-ascii?Q?J4f1Kr0wCqlJGgogQlWud76CyyF8mlxyRtp3mCtJEYtm5zBEcTXGnVx3iyCz?= =?us-ascii?Q?SSgOt/Y7Dgtt3OAALyKXp4pV30ED4DUqyIZgRwmd1NTDA3yDGmoxqnKDtIjY?= =?us-ascii?Q?UK+5z7xXnoI9E6KFg5Kj31MtmjtwSMr2niVoyOncRhMT9FFqkpq0YtaeYw22?= =?us-ascii?Q?6YgOkfW/im75lZYulgq9j+Eu5QWAqfPEUHRg=3D?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM5PR0802MB2483; 6:X1dT0p7cyHYqesYGsw51zVnkCdkDTHSkHdpVuYHw?= =?us-ascii?Q?ZWwiYaOLnumTSeV2C2ojBbrl/JBtJCuXbSFrE6+jgFvVaKywZicOtGaaNvYC?= =?us-ascii?Q?YoAJYZ+lvAZhNQ/bZ4nBSBvUO6FMXMZIcv1vCPDTE40GL/OQtV9W2/nfEYbm?= =?us-ascii?Q?TW+KZidmMdljyBn1gklpacXsVYHDF5EuE274h4thWYGD/iAPYqKbRpv24yPq?= =?us-ascii?Q?1DR6MaakLmnSGTnALholQNesPSPgZ9ETcwKOr3hb6DznwMyf8VY+EW65xI5I?= =?us-ascii?Q?LJtAArJE6EQiHl8x6gdwnsr3/ImEppqHTMntC9qm7KeuWLkpDs2jxChnQxe7?= =?us-ascii?Q?Sb70rFlJdNrTUuY0XerRLA/QsiyVAuWZZPH8RSWKfE4cXtJ6Ic5z0ZiHYiBK?= =?us-ascii?Q?lrMFNL9V89XtbhP5kDp5UQfvdh8DBd3QA0yGLav/j9PfqlsUGlWPTr/DoPFZ?= =?us-ascii?Q?443oSaHJlOU8XFdWUlSzse8cpmpsrx2euxba1rW3Ui5KG0VAMsM8RXQ/aeLp?= =?us-ascii?Q?Ry75KIX3kHpCtk87Ndq44i6X78Oqjov2H1CP9qcPi1oKrrDUP1uoxaOQygpu?= =?us-ascii?Q?egkUZpAX2Bfou8QSZPCtKhA+Qa7+eTHNJ/u7k8H0VuJmgAtX+3qRu1qQv61f?= =?us-ascii?Q?zZTcBstuUJyOP21a+UK46PMnsS9iTjH13PiFb+eho2CI4CEEEZesuL5pAk2j?= =?us-ascii?Q?P2jYledkQcxr7UbefqftZTxl9MVKrDMG5FyAq9TscIB0+yXPJ2i1Lk2MxpSZ?= =?us-ascii?Q?te+8yHubrw6CHTzVWjyO3FPkxyad5wYqM6Q0htMtULMlb3+osAWsjMDKZDTg?= =?us-ascii?Q?1MzqUTDOC0hv+4/VgdjskRj1l6Ab6WmpoWeG43Vw42K0wCnp2/s7vBISQtgp?= =?us-ascii?Q?puSay3nyj6swGdkyGA8tcy6tO+letq0gcMsm2W4IwXfqoiafME7pTTXicOo4?= =?us-ascii?Q?O5K5RF93xCUTXVB8MGrE2Mg3TUaXC70qpvwoP17zsobWQaubeZAgJEb9MVDR?= =?us-ascii?Q?NfYdTLV+Y6PEXLiPi9Yw4s9k?= X-Microsoft-Exchange-Diagnostics: 1; AM5PR0802MB2483; 5:tdSjK1E6117BiXrNMohL9A7N5c6hmGbF85WVcIlNVxGy6NIYqhOtvk1ckyOesTi4qaXHLT4VlSLRV544CdZ2ebX7C3wjDimiT290XkU32ZT9/kmNGoWofRCbo482TjVO9XUv1L88ABKtpzgU3XpHvAODYxP70spGmVPBLlmfI3CgQ+s7JdortobQW4SFegnG1pNIHmQKy/mr9+KqT2sN/H9m+LOrK67ZHI7sURxzkF9+E0DAeO1ncf4Fseb1SX4YkG8952m1Tf333nXq3Fpmp0Ml9Z/JtNLyBqDS679ll0VmRxGyfaQVMwPVMj2iJ9EamwqO3AJ+8aA+vYF/qvdN56vI/TEFCgp17Ah0kh8nqLnAAuFOfwrRfUKQJPmmgs8zhQGprwsH1X+I+hPHiqU102jm0itxMW3RksVB724pnhn9amae2znUFxCEloWKFTDk+4+wxUKgp+mPmf2EBRtYK0JZ7oPIgs9tWx9g5zrEtnWTlCOWzckdxdM66AXCGTdw; 24:+YXnwToYAVSVHLK62pI0B9792qq9xbG+c6H0Erp0O/M/p27WPZcr6zYzJaAGhqcmp8LA8P1vmqTqiMRAzsCNwitGgyOwp05Yw3VlozhQZJQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; AM5PR0802MB2483; 7:nSF0PJVZpbblS8Gf3t5pbuiF41U6DC6vGtWYj386z3tXcwbI+t7aq+SLk4Ka1MsnFRNyEnan1+28yeugs13IgyEnNMVs8uTOyr0mr5chqHdvnGwK+5Ja8x0hUFfvaU1xIdLguww/dtDAg4W6Rw9rvV8fquugmyHbn72D2sfjAPlTocnEjuCwAQ9WKTfcK+1C3N0zR7w9s7hNGIr3d/9rx1Gj6CJoFWgNE4y8MP9RTUiA/a2qGPWoX8MUye3B3hHdU6V6X+sS/gZrYWgmdrLyxRBDgEGAZ/3ndJ+tIsZEJL/OkHj922BsL4nzbzNhu2Ef8wEHVo/bA8nIXZ2N3lhFW6lwxtLNQVjfZ1P0AqxbqthL/1a7IH7BjdUjRONoB6x+AcLM9kpmDppcdYSzUFZZpXbEAI9UOAJ7NT9KT2A13PulDQ1LaSTFeTOAk2B9jsjgufH6OppQZycBT2cCx8xnFPdt8XZB8t2w86Heit1suUAzOmtRtxEomBX3GzbN3PT9L3APGyT7nisHh6Lip4ojVruHu2Lu+CP96BKY/KYuqFVLB1Un1Z8Wt4QEW2mf4CKucoshdriHeBrBd8SLkSX1oBoaKWmFmmDioyFLoHDFmRXyh6QMNSWjbq2kpZnPcAhlPDyqoX6hsgqaJWFCJFwMgg6X+9PwFuoA5KIm01um+dGD43xeNoP5TL4oEStBnJ/MoxQmUhLfnCcwxfnd0ICBhHwjuf49VvlOTaBCQc4K1VNZ1j1Ln3HI3ZRhZznNpUPW7ZT8DB2XZ/dM8UrF0P3iaAs/rMdRek5MDgJjSSngwqk= X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jun 2017 16:26:04.5272 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0802MB2483 Do single thread lock optimization in aarch64 libc. Atomic operations hurt the performance of some single-threaded programs using stdio (usually getc/putc in a loop). Ideally such optimization should be done at a higher level and in a target independent way as in https://sourceware.org/ml/libc-alpha/2017-05/msg00479.html but that approach will need more discussion so do it in lowlevellocks, similarly to x86, until there is consensus. Differences compared to the current x86_64 behaviour: - The optimization is not silently applied to shared locks, in that case the build fails. - Unlock assumes the futex value is 0 or 1, there are no waiters to wake (that would not work in single thread and libc does not use such locks, to be sure lll_cond* is undefed). This speeds up a getchar loop about 2-4x depending on the cpu, while only cause around 5-10% regression for the multi-threaded case (other libc internal locks are not expected to be performance critical or significantly affected by this change). 2017-06-16 Szabolcs Nagy * sysdeps/unix/sysv/linux/aarch64/lowlevellock.h: New file. diff --git a/sysdeps/unix/sysv/linux/aarch64/lowlevellock.h b/sysdeps/unix/sysv/linux/aarch64/lowlevellock.h new file mode 100644 index 0000000000..7561a454c9 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/lowlevellock.h @@ -0,0 +1,93 @@ +/* AArch64 low-level lock implementation. + Copyright (C) 2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + . */ + +#ifndef _AARCH64_LOWLEVELLOCK_H +#define _AARCH64_LOWLEVELLOCK_H 1 + +#include + +#if IS_IN (libc) + +/* See sysdeps/nptl/lowlevellock.h for comments. This implementation + avoids some atomic operations in the single-threaded case in libc, + then the lll operations are not thread-safe nor async-signal-safe. + + It is assumed that in libc there are only private futex locks used + and there are no waiters on a lock that unlock has to wake. */ + +#undef lll_cond_trylock +#undef lll_cond_lock +void __aarch64_lll_link_error (void); + +extern int __libc_multiple_threads attribute_hidden; + +#undef lll_trylock +#define lll_trylock(futex) __lll_trylock (&(futex)) +static inline int +__lll_trylock (int *futex) +{ + if (__libc_multiple_threads == 0) + { + int oldval = *futex; + if (__glibc_likely (oldval == 0)) + *futex = 1; + return oldval; + } + return __glibc_unlikely (atomic_compare_and_exchange_bool_acq (futex, 1, 0)); +} + +#undef lll_lock +#define lll_lock(futex, private) \ + (__builtin_constant_p (private) && (private) == LLL_PRIVATE \ + ? __lll_lock_private (&(futex)) : __aarch64_lll_link_error ()) +static inline void +__lll_lock_private (int *futex) +{ + if (__libc_multiple_threads == 0) + { + if (__glibc_likely (*futex == 0)) + *futex = 1; + else + __lll_lock_wait_private (futex); + } + else if (__glibc_unlikely + (atomic_compare_and_exchange_bool_acq (futex, 1, 0))) + __lll_lock_wait_private (futex); +} + +#undef lll_unlock +#define lll_unlock(futex, private) \ + (__builtin_constant_p (private) && (private) == LLL_PRIVATE \ + ? __lll_unlock_private (&(futex)) : __aarch64_lll_link_error ()) +/* Note: lll_futex_wake depends on macros defined later. */ +#define __lll_unlock_private(futex) \ + ((void)({ \ + if (__libc_multiple_threads == 0) \ + *(futex) = 0; \ + else \ + { \ + int *__futex = (futex); \ + int __oldval = atomic_exchange_rel (__futex, 0); \ + if (__glibc_unlikely (__oldval > 1)) \ + lll_futex_wake (__futex, 1, LLL_PRIVATE); \ + } \ + })) + +#endif /* IS_IN (libc) */ + +#endif