From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-eopbgr30060.outbound.protection.outlook.com [40.107.3.60]) by sourceware.org (Postfix) with ESMTPS id 70C373858D39 for ; Mon, 1 Aug 2022 11:06:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 70C373858D39 ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=FLTVHoDR9Z/uEtaYEMm4eyNpTh1ad4PN4/QFJvAzLgHul0SAUnFXNHSPyW2NBpTXykc9/ysfJHWYCZVbxRn7BgYY7mtlxAXEbTBd0x5YCKaGAyKR6ZFouBGTC3uBHhrA1oKRY2KpihnT7U70YAYuT5lxl8j2PC9O+yKqISDM94XlhjIFgCHY/ZtrcLTRJ+vAJkqjOtzByRcNN508d14ATrsYZnr9LXq+F6alGEPKQ43ENYEpA9t0BZUAVw8bNWkiKhN7hSKcarR6QDWBl2hrnUO/aLwloqlWbtv4paL3SXkNrrBfmWPpakpOCdCMIqJdfyZ47Ql7PmyZdWolNYxUnA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=h1YjlkK0lvrDysdEiCrFsj0nrd8gKYBFmmy1RWRASnc=; b=S07OHfExbrl0/Au6aDWwjXHidcgxCAZ29obMTHVI4lPFlASXyMJOHZ4ZMEWJh+C7vbBsNqkctHsLwI+w6zrd1oTTFKE/0dHunOnx1+qhvmQdb2vvGTwQ4V4oc1Cmf47t+asHgIcQZRYrYVA9qfzM6/VofO7VNSN4U/oMhAHcvhTJZxv4Q20OEqvJQPceEBckLTG6VlqLLi91FlYGu2Xk7eysad3rpEUOC3WeL3ZP7rVlcS05AvewBw5uk21wHO81fW2RR3UCPL6QZdSfHkNWnJMD7Jpgz80GqjvjZq6d6FhCa3IKSXIaMIrZXvt+92Kg6DUHUwrELJz//Aa3V3lD7A== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=sourceware.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) Received: from AM6PR04CA0031.eurprd04.prod.outlook.com (2603:10a6:20b:92::44) by DB7PR08MB3067.eurprd08.prod.outlook.com (2603:10a6:5:1d::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5482.6; Mon, 1 Aug 2022 11:06:17 +0000 Received: from AM5EUR03FT010.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:92:cafe::be) by AM6PR04CA0031.outlook.office365.com (2603:10a6:20b:92::44) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5482.16 via Frontend Transport; Mon, 1 Aug 2022 11:06:17 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass 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; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by AM5EUR03FT010.mail.protection.outlook.com (10.152.16.134) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5482.12 via Frontend Transport; Mon, 1 Aug 2022 11:06:17 +0000 Received: ("Tessian outbound c883b5ba7b70:v123"); Mon, 01 Aug 2022 11:06:17 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 9d8eddefd56685f8 X-CR-MTA-TID: 64aa7808 Received: from 49e7fe9e8f6d.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id EB5B26A5-F32D-42CE-AECD-B0DDF392F598.1; Mon, 01 Aug 2022 11:06:09 +0000 Received: from EUR04-VI1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 49e7fe9e8f6d.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Mon, 01 Aug 2022 11:06:09 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GsVRGEp9kExbZbqlyF6cSAH3qFaC6Un1fvnQXxAB3C9yOZHAtTzQOvAziepZ1aAb+eMVNO1tdHe56+9IH98tiNV2Z0n9HTqgCyaTpFH8gb+tBlGn2qXsH+WQeK9yHLdVYOcsO2xl3MeTaaQfVtYqnUeD175i/DVk3QDgSq0zqXGhKRB6+RsIxYTvG4aNHJ9xdKuSBhI5itp7XWDPfLOiiooBw+DhdFrDYF4kh14auftvfG7/BGwlQ7VAX1XZOpZuuQqsr4LklCi+eUv9516vvaogl8iQlgY00YEyGDq+bU/cAcKT+Oi/KNop8UAr0jnM5fp7stU3/tqosNnKppmZXQ== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=h1YjlkK0lvrDysdEiCrFsj0nrd8gKYBFmmy1RWRASnc=; b=NRGcGFXvbDpSe8ZChtdx1O7LdR6ldrqysuPLJpXK3J2JxB/gX07RV9UbH9sApiZOlSEiEtFaovF2LWOXes9KrR2aJt7CA/zHGcYbbpPQetWs6YXz0lGgueMz52LHhsxE2Yxnv7jRZeo0PAgJjq/FE2kTOKdC40UVjN8lS+RtOx/J/wVXyY/8Diy9jwZMjWrxyTmbiEEQ9/gDYhU6Q2pKm4UYkGK+OotZKPSB2q5iRrAM069zkBNBUUrPIlJhTEoXud1TcDy2tyNAGlTVhF4b0uQ0JdSgZgORpW53Pmeiua/vi6STxAxj5LkVL6r79yHv9ZUTGCL+8kUkqmzDS6KlWQ== 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 Received: from AM5PR0801MB1668.eurprd08.prod.outlook.com (2603:10a6:203:3c::14) by VI1PR0801MB1806.eurprd08.prod.outlook.com (2603:10a6:800:5b::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5482.6; Mon, 1 Aug 2022 11:06:07 +0000 Received: from AM5PR0801MB1668.eurprd08.prod.outlook.com ([fe80::845f:5b9c:410a:f581]) by AM5PR0801MB1668.eurprd08.prod.outlook.com ([fe80::845f:5b9c:410a:f581%5]) with mapi id 15.20.5482.016; Mon, 1 Aug 2022 11:06:07 +0000 From: Wilco Dijkstra To: 'GNU C Library' Subject: Re: [PATCH] Improve performance of IO locks Thread-Topic: [PATCH] Improve performance of IO locks Thread-Index: AQHYe1UOi6DbewpxBkWYPihtt69Daa2aNonL Date: Mon, 1 Aug 2022 11:06:07 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-GB, en-US Content-Language: en-GB X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-MS-Office365-Filtering-Correlation-Id: bff8ee00-0381-466d-6224-08da73addb64 x-ms-traffictypediagnostic: VI1PR0801MB1806:EE_|AM5EUR03FT010:EE_|DB7PR08MB3067:EE_ x-checkrecipientrouted: true nodisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: NZjNiquIJDtbyz+pEK1gxEhc0cpLUy5vttt/zIYQ+NZ1Xkqzl8L0mlAdKoFSdh/9/WnP9XHwdE1TcdNNASXLFUbaLbWQpmXFBrnFf78GlcKfGjhJACRZjZepqMdPl5E0AUMuDshVGgZ9uAkBM21dgAfxsK13/x/9o8bye8stMtQXhIgY0BhieuZGOGqwT8KBsBBeVts7jipV4fPUzXCPHv9UJLBB7gCIJRJSlInEhejaAY+vC3gd02quK96omOxp2vxpBf37hD3wbrkuJ5rsSXCyS24jQ+C6qg604J9/pXAnO6hn7ISzgAPw4SBi4+GEPsZdP99gUy+DkVnGBHKaBga9F4H/yN0cMPMMZ/iJx8Wj6oj2SjCIp847GbRy+SDkZKZvVLCzZTPp/pd2UURa7vMWbOQ1LA6t55SOyCf18dU9GoJCuxdoV+36ZEHgnCakMSdkr32Cev+QAdAUF+sEK0ABmukvtEMP5G5SigXjNGl3zcxU56YOYs2oex4ozrtcARgXnYuPb2DVpTGBH1z4v9WVeRB+YZQq2REvSPvxrlwn/aVBBXydF5cjfQNgGOp2p8HpMz6LDZv5PWdn2Bl0UWRtL27ZiG280Jbq5ybcGr6VZa0omRPOLmfNtPPm3hSRx0A9RpAOg2utVXW0SJlcuYq8XfmXojr7IgR8u6r7YMiqpcqlJusoxQGUV/gOpw4NVdZTcGLLBrNUhBd6w75KfMPIFhiPxsgKbfhGazZceCzeB8vDqA/RgD01Ilunm4u0v38WmAe/+3anCcvx/E+U1OkbbiAo7RBSljttW/pXxLI= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM5PR0801MB1668.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(4636009)(366004)(136003)(396003)(39860400002)(346002)(376002)(122000001)(2906002)(86362001)(55016003)(5660300002)(41300700001)(71200400001)(186003)(26005)(38100700002)(7696005)(6506007)(9686003)(6916009)(478600001)(38070700005)(52536014)(316002)(66556008)(4326008)(8676002)(8936002)(66476007)(76116006)(66446008)(33656002)(66946007)(64756008)(91956017)(83380400001); DIR:OUT; SFP:1101; Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0801MB1806 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM5EUR03FT010.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 8ddd9cc0-80a4-48b7-475b-08da73add54e X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: oXljOcaTKNDPB7FY9OXaohsCeoJ3SFeXQdeiZ24592ONsWyNi1j7QI3CAfFLoW4aBnNj3AhSNpIIgXpX9QuD73lrc67W3FRpmkQLdx1uXFxuFWTsn4nhl21zBW3HpWNgp0uXP9w8KlJelQwHRl8UKmjJP/+um8t1VMq67qBMTHxB8ocQUkuDaGY62XCq6akdscfAX/9EemcMoMuJ5af7dZLFSOMdtP9keCZESjyo/wm5An4s5/yyeKuSaAEdwrEj/rVWQ0/codXXgGUE0gHs53c0GxUtbcYNcFBvaGhMVGP6Rt/FO4BIz7/Lpw/unBkX4wsrnhzbYtSRHJyJ+LMSIu/ii+tWUMhx5XwJIv3oSrDnTh0v8kIzFP+Ig85QJE63DaCz8QD0PQH/2swxwGfD8vfOzOOb8XKxb2aV8iWZOAQC+eHtSbOMRAuq15RKkdtlGJ9TT176uuZpghkOQMIMYEh+IrNxe5qjnZ0kKkaa5TTZqco3VzMVuoeKAEy8eFYu+DzfE/iDCXEJvN++RQ7fxuwooJ4AO4y5ILYeWEJCTFEABuTWl9Sd70K6Bk+n8ed3unC0G6VaTB+HsYJsox2wYAIHwQEcanAixo+LenzZfQVFmGfQuIKg5Nsh81IPT9ITt7pcaZIVX8j5bkuFYEhJ85NCQGfhm93lyZsssgzbLMJAYmtUbuGbOSONgyTmb99MEGKkUAIiSWBOkxlxb0E5sv8g1NkAUHiEgDpTirpaMDEgr0LQiA9BdBKu/4kGNykmV9zwBz5Hs+RUE+82bUK8JaFW57nzZi2g3l2EjsXU+Qw= 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; SFS:(13230016)(4636009)(376002)(136003)(396003)(39860400002)(346002)(36840700001)(46966006)(40470700004)(40460700003)(356005)(9686003)(6916009)(82740400003)(40480700001)(36860700001)(316002)(26005)(55016003)(81166007)(41300700001)(5660300002)(4326008)(70586007)(70206006)(8676002)(6506007)(52536014)(2906002)(7696005)(336012)(47076005)(82310400005)(8936002)(86362001)(83380400001)(186003)(478600001)(107886003)(33656002); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Aug 2022 11:06:17.2798 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: bff8ee00-0381-466d-6224-08da73addb64 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-AuthSource: AM5EUR03FT010.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3067 X-Spam-Status: No, score=-9.7 required=5.0 tests=BAYES_00, BODY_8BITS, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP, UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Aug 2022 11:06:23 -0000 =0A= ping=0A= =0A= =0A= Improve performance of recursive IO locks by adding a fast path for=0A= the single-threaded case. To reduce the number of memory accesses for=0A= locking/unlocking, only increment the recursion counter if the lock=0A= is already taken. =0A= =0A= On Neoverse V1, a microbenchmark with many small freads improved by=0A= 2.9 times. Multithreaded performance improved by 2%.=0A= =0A= Passes GLIBC testsuite, OK for commit?=0A= =0A= ---=0A= =0A= diff --git a/sysdeps/nptl/stdio-lock.h b/sysdeps/nptl/stdio-lock.h=0A= index afa0b779c81d7dd915f8edb6c0974e4f231d4e0a..45823cd1629d3e3efecc64a7d07= 706a6e6de9af1 100644=0A= --- a/sysdeps/nptl/stdio-lock.h=0A= +++ b/sysdeps/nptl/stdio-lock.h=0A= @@ -37,12 +37,18 @@ typedef struct { int lock; int cnt; void *owner; } _IO_= lock_t;=0A= =A0#define _IO_lock_lock(_name) \=0A= =A0=A0 do {=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 \= =0A= =A0=A0=A0=A0 void *__self =3D THREAD_SELF;=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= -=A0=A0=A0 if ((_name).owner !=3D __self)=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0 \=0A= +=A0=A0=A0 if (SINGLE_THREAD_P && (_name).owner =3D=3D NULL)=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= +=A0=A0=A0=A0=A0 {=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0 \=0A= +=A0=A0=A0=A0=A0=A0 (_name).lock =3D LLL_LOCK_INITIALIZER_LOCKED;=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= +=A0=A0=A0=A0=A0=A0 (_name).owner =3D __self;=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= +=A0=A0=A0=A0=A0 }=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0 \=0A= +=A0=A0=A0 else if ((_name).owner !=3D __self)=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0 \=0A= =A0=A0=A0=A0=A0=A0 {=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= =A0=A0=A0=A0=A0=A0=A0=A0 lll_lock ((_name).lock, LLL_PRIVATE);=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0 \=0A= -=A0=A0=A0=A0=A0=A0=A0 (_name).owner =3D __self;=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= +=A0=A0=A0=A0=A0=A0 (_name).owner =3D __self;=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= =A0=A0=A0=A0=A0=A0 }=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= -=A0=A0=A0 ++(_name).cnt;=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= +=A0=A0=A0 else=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= +=A0=A0=A0=A0=A0 ++(_name).cnt;=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= =A0=A0 } while (0)=0A= =A0=0A= =A0#define _IO_lock_trylock(_name) \=0A= @@ -52,10 +58,7 @@ typedef struct { int lock; int cnt; void *owner; } _IO_l= ock_t;=0A= =A0=A0=A0=A0 if ((_name).owner !=3D __self)=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= =A0=A0=A0=A0=A0=A0 {=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= =A0=A0=A0=A0=A0=A0=A0=A0 if (lll_trylock ((_name).lock) =3D=3D 0)=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0 \=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0 {=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= \=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 (_name).owner =3D __self;=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 (_name).cnt =3D 1;=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0 }=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= \=0A= +=A0=A0=A0=A0=A0=A0=A0=A0 (_name).owner =3D __self;=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= =A0=A0=A0=A0=A0=A0=A0=A0 else=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 \= =0A= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 __result =3D EBUSY;=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= =A0=A0=A0=A0=A0=A0 }=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= @@ -66,11 +69,18 @@ typedef struct { int lock; int cnt; void *owner; } _IO_= lock_t;=0A= =A0=0A= =A0#define _IO_lock_unlock(_name) \=0A= =A0=A0 do {=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 \= =0A= -=A0=A0=A0 if (--(_name).cnt =3D=3D 0)=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= +=A0=A0=A0 if (SINGLE_THREAD_P && (_name).cnt =3D=3D 0)=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0 \=0A= +=A0=A0=A0=A0=A0 {=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0 \=0A= +=A0=A0=A0=A0=A0=A0 (_name).owner =3D NULL;=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= +=A0=A0=A0=A0=A0=A0 (_name).lock =3D 0;=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= +=A0=A0=A0=A0=A0 }=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0 \=0A= +=A0=A0=A0 else if ((_name).cnt =3D=3D 0)=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= =A0=A0=A0=A0=A0=A0 {=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= -=A0=A0=A0=A0=A0=A0=A0 (_name).owner =3D NULL;=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= +=A0=A0=A0=A0=A0=A0 (_name).owner =3D NULL;=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= =A0=A0=A0=A0=A0=A0=A0=A0 lll_unlock ((_name).lock, LLL_PRIVATE);=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0 \=0A= =A0=A0=A0=A0=A0=A0 }=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= +=A0=A0=A0 else=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= +=A0=A0=A0=A0=A0 --(_name).cnt;=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= =A0=A0 } while (0)=0A= =A0=0A= =A0=