From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752545AbcELXNp (ORCPT ); Thu, 12 May 2016 19:13:45 -0400 Received: from mail-bl2on0144.outbound.protection.outlook.com ([65.55.169.144]:4896 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751111AbcELXNn (ORCPT ); Thu, 12 May 2016 19:13:43 -0400 Authentication-Results: hurleysoftware.com; dkim=none (message not signed) header.d=none;hurleysoftware.com; dmarc=none action=none header.from=hpe.com; Message-ID: <57350E1B.8060304@hpe.com> Date: Thu, 12 May 2016 19:13:31 -0400 From: Waiman Long User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.12) Gecko/20130109 Thunderbird/10.0.12 MIME-Version: 1.0 To: Peter Hurley CC: Peter Zijlstra , Ingo Molnar , , Davidlohr Bueso , Jason Low , Dave Chinner , Scott J Norton , Douglas Hatch Subject: Re: [PATCH v2] locking/rwsem: Add reader-owned state to the owner field References: <1462580424-40333-1-git-send-email-Waiman.Long@hpe.com> <5733AC64.6020306@hurleysoftware.com> <5734E45A.4030904@hpe.com> <5734F549.7080009@hurleysoftware.com> In-Reply-To: <5734F549.7080009@hurleysoftware.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [72.71.243.221] X-ClientProxiedBy: SN1PR10CA0050.namprd10.prod.outlook.com (10.164.10.146) To CS1PR84MB0309.NAMPRD84.PROD.OUTLOOK.COM (10.162.189.158) X-MS-Office365-Filtering-Correlation-Id: 3db3276d-9503-4146-1b91-08d37abb0e82 X-Microsoft-Exchange-Diagnostics: 1;CS1PR84MB0309;2:szf7Pb44IRe4UBTsspk+i75YdmELGkEJIE5KEY0zkImnhVo9kCDxA3CybW2m6RZ1in1kwvxsPd9Tw67amQMkO0sTCscyTh5CdaPWrS5t99kfUJG8DcAjEzeD1sxfeGdMSg8IhwrjHjBGwuFa2ZqKV/vEaiTrF8v+lgkU2bnRgaalbi5bDZCRW6t4YejEUqGk;3:0+Lzx93B1sTfh77vHtMJaaC1B9ztjwTqh8hVibIq/vtBwVG+JDKBl6QwQp8a+jAPMPhtdKPVIbKJIYAVq5p4r/Ee5fTF09/jka8T+DyFRTJrp2HbQZ04HRaozzEHxoQI;25:Wgu/TGnq9MICjlW1/dmLSVvfmThjoS01PFydT8DIzXvX5RIuDG7qh24G6epWC1y1gCeDAqxJVOD2JYMCwNyFNJ/WSXFYZ76drQYvqLPyjN0nWPHTTC1ZORd2Lvk58JdzBck7QuGHmKKP/Ab/wg2NaQSPYfHZiUOLsCZoa3dC5D96n0EuBsLA9RoEStEOLjH+9pRA6t9A9cgNytzVxFqa7+towgrxEv0FyuNVgY5Om3VZt2p4FVogq92kyUDL8oMGauD2/YT3iGWjJyxpQV6RuenxaVTB4r7DZ61NT1JnOdsgXPqqcyBgpO0OQtGUWPkJSvkowgZ5w80uMXJbPKdIAQ3SIXataC1sdk3UG/dks8JpJ0OZE1fqYMzYssacjOm0gFAn1I4MFxvbubM3pu5FoW4JQo1mnryDCKolzzfDFvE= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CS1PR84MB0309; X-LD-Processed: 105b2061-b669-4b31-92ac-24d304d195dc,ExtAddr X-Microsoft-Exchange-Diagnostics: 1;CS1PR84MB0309;20:Q0p5Db9w8V8zULYDbRV1dvc7ySFd753oo8XFtb0Hgv+WAyNvQEgexKn+N6p/dcr1CyMnevLFNk+QVD5fCnSg/5L+4zx0GOOvZEoPQBDWTh4QQK+WvfGH5AHSiKV39yC7ZLr2OM02uu38KG0IV/wJXi6WOObfh3+GNATgEHzR5Ssh2uC1JMr43x9N7CSnjxgi0jXdH3nTyCMZ3mTuM2AErQ1+p9TrxBFLARGRqHW9uIjxja0YLmVlXkDKHyGmt6vQ+3jop2XFqA9mNtXasleT0b/9cBCNRlF16KbKB50fzmaCGGKx6SbDUfKWjH3Me1/zyOEnygnX5ibOxovxdeIEFw==;4:84Amg1WH8f+Uwlz5q9e62mJY9FM0H9abp2DWZQsolkh8B+xnmjnitSdfuaFUNJXmR8FbdSEkRhVn9OdiumvgPjFEG0XVMCYHDcWtqBPyx1x3lj/IcIlsVu7iW2YHip188Rh3hjYJbGhBuwZ8pCYXSX1n9a4a4j6nfUgc1Nm1CvgABQNs6zYxOladq818Qv91wFCEmpz7gHwrO1ROky61I3j5RRbtbGaYoTJUX6XnFY0OL0L20TT3QFCbrEfWY08sPHCfvjNgJBKen7dQmv3hnjycpIxukwlhvKnGBzArejp3UhsTmrfQQyub5EGCfQbsFEu1Hzqgpe5v7iItqGpymeczpPtOtvwN8pm6eMgqX3AYHp0QWWIsAxgeVSnxdIxi X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046);SRVR:CS1PR84MB0309;BCL:0;PCL:0;RULEID:;SRVR:CS1PR84MB0309; X-Forefront-PRVS: 0940A19703 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(979002)(6049001)(6009001)(24454002)(377454003)(23676002)(5004730100002)(83506001)(230700001)(189998001)(92566002)(81166006)(8676002)(586003)(3846002)(6116002)(4001350100001)(2906002)(110136002)(4326007)(99136001)(80316001)(33656002)(76176999)(50986999)(77096005)(2950100001)(86362001)(42186005)(87266999)(36756003)(54356999)(64126003)(93886004)(5008740100001)(50466002)(65956001)(65806001)(47776003)(117156001)(66066001)(59896002)(65816999)(7059030)(969003)(989001)(999001)(1009001)(1019001);DIR:OUT;SFP:1102;SCL:1;SRVR:CS1PR84MB0309;H:[192.168.142.129];FPR:;SPF:None;MLV:ovrnspm;PTR:InfoNoRecords;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDUzFQUjg0TUIwMzA5OzIzOmdlWnBTc1NmeUFCdjF4R1BMZjhZSVR1dGgw?= =?utf-8?B?dTcwTHQ2bkNZV1dULzRoRTBObDJtamhkbUNnSllpU05OVnlhK3dGTkQvTHIv?= =?utf-8?B?WXhUM0VoakswYzlFWXFEbnRycG9XcTJOeFMxZlF0OUVYbkRxR0F2bDZTTjJm?= =?utf-8?B?MjlJTlFaeDI2NW1jMThsU2QxYkZVU1FJNlVGZ2ZRbitHQi9uVjdLUjdtc1Bo?= =?utf-8?B?M1JORmpqWFFlbUo1N0FLMGQzY1J0ckhLUFcwci8zd2Z6T0M3UllsQlZ6eEFz?= =?utf-8?B?U2R2ZWJCejRJRlJsVm4yUW9xRDVkc09SRVR3MlI4N1JQZzRuTWZUOW9ORjl6?= =?utf-8?B?Z0pKOWRxcFpub1l6MlBQTTduUW92cDBveWljUWdzZ09UZkE1WitmODZocUsr?= =?utf-8?B?Y3FFYk1NaDE1cHZFSnZHaTFkZmRnR0lEemlNVVhNekZSS1NOTkNpdlM1OFJm?= =?utf-8?B?WHFQOGJaY0NMalE0WjhJcUp4ZThFL3FLbnVRN2tiWERJNlA3dm9jN29UNm1a?= =?utf-8?B?SEpGRU1vN1E2UnM1djE4UGNSRG5IdkRWK0loMlJBeGc5WG8vS09DcDRkK0Rn?= =?utf-8?B?b2NBQ0VHTWRaRWdzNndleTVBRXhmdEN1QmxwVTJWVzU0bWZYbk9wc1NsV0RT?= =?utf-8?B?UkNTL2NoNDhvbGErblhaRzdzMUNFMjd0Wjh5cktlbjRjWGtxc0lIZ01hQVMy?= =?utf-8?B?L1NNQzM2OXJGWm9hMk9qcnNLQ0piZy9UWk9qOVl1OW1CT1MzNWdQckM4Ympy?= =?utf-8?B?N1JXU3pSZFFwZUxyMDNqMXU0SFlxVTYyb1RTZ3M4bjl5SUh3UmN1dUIvVG5V?= =?utf-8?B?Z0laZVpHaDJIVkcrdnF4bnIyMWYxVDRzRnlWWm9OTnhCaTlXMWRNOXdINDNh?= =?utf-8?B?N3dBbUY3SFovSVB5ZmRmM05xM2FpVldQbnlTdCtaTzBrNTZvY3EyNnRqLzR0?= =?utf-8?B?eCs1cUNaNWFYRndudmJRYkZIclJkaVM2WGlBMG9Yd2pBRlRhWTQrRW8yUWZo?= =?utf-8?B?VHhQY2YxL0U0UUtGS3NaelVUYjVTaXJIQ3RscFJMdlEzMkUvMWU0ZzVNNU5i?= =?utf-8?B?Y2JSdHhIRk1MQjhxd3IzM3RmcThZWUQ2SmdvMU5yU3YyWFpUZDlYY2lxSHF5?= =?utf-8?B?VFZVeHJPV1NlcnhhOFRaZE10R3VZdEVSc3IrUkFETHNhZ3hKT2hGMzJ4dGhs?= =?utf-8?B?YzlGcUxTNktCdlhvRTRMZ0RDRVFTeU1JaDFLd2t1Z1FiMFpnSDcxWDZqeFJ1?= =?utf-8?B?dGdqbm4vbi9QZHQ2OUFuNm9MQ2poTEM1M3lpbHJneE9CUWplYUlmMDZuQTkv?= =?utf-8?B?blZtdGZ2YjVxdWdEL3l5NFVML3A3dFFiY0NFcTF1K1crWCtYQ0pMVVZUMlZ3?= =?utf-8?B?aUpwTXpsTHpRTDJ1NTBYaW9jNkExRk10ZWpxQlAzUUt5R0N6eGpjL05JNUYr?= =?utf-8?B?U1Q1Wis2WUI2a0YrWDRZSWs3VyticVFtSVVpaDFwY1hmZDQxKy9MNERjQUJ4?= =?utf-8?B?aUFwZlZ2c2d1SHVyNThSbWdrNDJ0ZGhMbksyQXphNW1UcGt0Vkw1aUNSN1pp?= =?utf-8?B?UDJ2NmJHUENNcklRTDFwWCsxWFF6ZHBGUVlzYlRvQUE5VDFhcC9qRzQrdHFk?= =?utf-8?B?QksrZjhlaW9jTFZOWmNnRzlvKzIxamZnTXhINER6OVUralhpdy90TmNnPT0=?= X-Microsoft-Exchange-Diagnostics: 1;CS1PR84MB0309;5:2wRpB2A2Y0OrdrLyFxkqOI3+v5tQQTMprG62PxPzqtEl+dRWL3St8fJ+HE0drdgeAjyvIkMEOJxrJqaOoFMra7Mq1f6cQ+XuQCJiEYb+0tDgDFjiUiiGF3gA7QYMjWrFgaz8v+h3EJ1YpNGXlo3KqQ==;24:FiU+LCJSwqeyzSwl41sYSxg6T6oZyc7KYU6qxTMD0Bw4N+/EltHDQS1dJN5IG7wkuzOx04w3qQ03rdrD6QDbRuKPTBeDLBuai477NSU6xPg=;7:IoR19UlCbadyb6539YMfgt3PHE7XYvXQc8cM4POG+Z7T7CzhNzGkymoWZIuRhT3AIGY8F14ohD4NvyL16YUxV/Q7U2ACQZ3ZxpLVvqbBg4Y0Y8ODTV2Mjy8LeyNMQSwBIipYC6zb5LDgRdurDjOI4VtoI+MnWKe2i1yLVk08uL78o0SM6NZi1+JuwYSia9wD SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: hpe.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 May 2016 23:13:36.7125 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CS1PR84MB0309 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 05/12/2016 05:27 PM, Peter Hurley wrote: >>> Arguably, this check should be bumped out to the optimistic spin and >>> reload/check the owner there? >>> >>> Or better yet; don't pass the owner in as a parameter at all, but >>> instead snapshot the owner and check its ownership on entry. >> That will make the main optimistic spinning loop more complex. > ?? > > Simpler. > > while (rwsem_spin_on_owner(sem)) { > if (rwsem_try_write_lock_unqueued(sem)) { > taken = true; > break; > } > > if (!sem->owner&& (need_resched() || rt_task(current))) > break; > > cpu_relax_lowlatency(); > } > > > > > bool rwsem_spin_on_owner(struct rw_semaphore *sem) > { > struct task_struct *owner = READ_ONCE(sem->owner); > > if (!rwsem_is_writer_owned(owner)) > return false; > > rcu_read_lock(); > while (sem->owner == owner) { > .... > } > rcu_read_unlock(); > > return !rwsem_is_reader_owned(sem->owner); > } > I have been thinking about something like that, but my inclination is to make as few changes as possible to the existing patch. I did add a new patch to streamline the code as suggested. Cheers, Longman