From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751395AbcETUnY (ORCPT ); Fri, 20 May 2016 16:43:24 -0400 Received: from mail-bn1on0113.outbound.protection.outlook.com ([157.56.110.113]:48265 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751032AbcETUnW (ORCPT ); Fri, 20 May 2016 16:43:22 -0400 Authentication-Results: hpe.com; dkim=none (message not signed) header.d=none;hpe.com; dmarc=none action=none header.from=hpe.com; Message-ID: <573F734C.7050708@hpe.com> Date: Fri, 20 May 2016 16:27:56 -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: Jason Low CC: Peter Zijlstra , Ingo Molnar , , Davidlohr Bueso , "Paul E. McKenney" , Terry Rudd , Scott J Norton , Jason Low Subject: Re: [PATCH] locking/mutex: Set and clear owner using WRITE_ONCE() References: <1463696630.2587.95.camel@j-VirtualBox> In-Reply-To: <1463696630.2587.95.camel@j-VirtualBox> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [72.71.243.228] X-ClientProxiedBy: BY1PR20CA0032.namprd20.prod.outlook.com (10.162.140.42) To DF4PR84MB0316.NAMPRD84.PROD.OUTLOOK.COM (10.162.193.30) X-MS-Office365-Filtering-Correlation-Id: eb5a04de-57ca-4038-287a-08d380ed3f4c X-Microsoft-Exchange-Diagnostics: 1;DF4PR84MB0316;2:MA9jCm1BfP/rmONuOaaUXmLzTOljTgChKbwgOQW0BIQ1BmcVKvwF0vfkqNrKkUH2pBjrFmYF3OGV0ogjnOL9SYUvAtVY5wkRPhHIm1wFGkV1vcRte/UXBh8ToT8DpjkSqVji+5Wjk/1T0iAjW9v+AH+eeEM0YueFaZCvxetT7Hq09sRC3nq9aXbxvrqTk5qj;3:Q2yGJSIqZKjKiUdzwqxur6Mgdi0jw66uk8PHWPFGXOg8FPudBFV7neFj8yBAQH5GfInBfBgL30UOA9aKeSwm9bZL3BxfCjnTvQn/fVX316a+utpMSH7ok+6HKK36sqD3 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DF4PR84MB0316; X-Microsoft-Exchange-Diagnostics: 1;DF4PR84MB0316;25:uiXOKZOmBStVpjiffVx7tKsHM9JxonHTuFWj9XH+FQPulEVmIg66gwRKT+MiqSMB54eSoDoifjPdcBkj3uGOeU72ADNcpDrbHgkCdr3rtxFS2+P3j2ijnClekUxY2NVzsf38pUMXF4fQqcaC8Ujsy/K3cD7bD1pWKCEWU8dgGW3d1ph4OUkqpmXg5NFHZ9JsJGDTERUZw/XUKT8n8g9V0Uvyxrd6H/JBv+A48NJgi7Qhrw2A5Ismc1/4l0kXVUVuiaSQ5WkmMwSA6ZWGIi9epGJRnQrMltKm4Bc63efjjX78B/B+ORNT86WfkpKru3z4KtTGwwcSbtcYyzTyvIs+iQfrlq/ZNtjuB74r87E6xkWUE/JhEqItqXQNPW9f/FyD+RletDfpywf1e6AcimNpQF48jwDzK/U3sYIELV4LY+Wbg36ze6Xv4ZuFwqUdqxixqKsmohvredo/WXvMh9A2gkkhOgfXEz7wboT4gNhSNopRPbrha9hvniwP3ff7K9pkB4/0MqGEDrDZd1Td9FWy9XX4DQsvvlvjvDI6s9Vc2e13N97K5zrtbYFcVLiWBmo0UKcXIpF75GZiV4TxDrXEiiiQYoUE0b5KaVAfBC02AbGA4JRbcqw5CVXiU8m5CX5YhnDypvWjsLO2biGxkMKLTpMfhLLhICrANJsNnH4Zssw9ImwvMHx/O885H84zq++SVWWGMvZmp63EbGAIfghCAxYPn8XeH1+TnitPT7mq8ik= X-LD-Processed: 105b2061-b669-4b31-92ac-24d304d195dc,ExtAddr X-Microsoft-Exchange-Diagnostics: 1;DF4PR84MB0316;20:QsMAyM8bfwCxL1V8/Qc6NumAAM/XfIOcwIXGw167aFhyy1w049HcV+qTv66I/bgchNI8qcMKj3XPMKkDpmpWeD4w4tbtpAJlujQVVXiey1GDUgZappIHnaV3IBU+1aUlR6gHxC5Shpp5jmR/PsfdYNh+77EkTsP1Y20AmBR3hyaINWmvlGacLe9/KdTWlN+nq1yoXwG5JqQ/bCiBRMatXGIcpowopBTXt1xHo7o102fGB8NexJrytmmZOJKByn0P+jWNZNL88D8sqbiANTF7Yxm1n2zqfvCa2QLbqVnS95PaBQUyJggsGe2gVA/Hqnn4fIzgsOM5PVD1pWR7rr1byw==;4:TKc65+tGro3611g+QvsxuKO9kjkCqBBD7K5ERmz4m+es+jgES31AenWlCiRekpE4czS2wEq46YK+Ye5oQQKtjEdVGa50YxA/M9nNawNNgzj5p1MQfPGkr3wiw4S3/4/UNE1uLzI3/N4piGK39PlDecCrQnoP4ah3vNKdDL01VjNhvTd2R5etTvbNYpv8TTiixKrPqYqG1vXhYp6rTMwORLTtIPSHDjba+LAJOXZPQcovY1hF5AfzNPf009evt86KlPuTajLho4zDltPKJqk/q0susT8/nK98ggSEc0ZWpSDokum9RWeJkgyBIEeVzMboNVDkQRr9TQTXbHC+6HLqrITGr7a6U/Dh8MCiBsFee1Db5L66JKToJq0Zw83z0p7I 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:DF4PR84MB0316;BCL:0;PCL:0;RULEID:;SRVR:DF4PR84MB0316; X-Forefront-PRVS: 09480768F8 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6049001)(377454003)(24454002)(23676002)(19580405001)(19580395003)(59896002)(5008740100001)(4001350100001)(77096005)(33656002)(2906002)(92566002)(230700001)(50466002)(5004730100002)(117156001)(36756003)(3846002)(47776003)(64126003)(110136002)(65816999)(66066001)(65956001)(65806001)(54356999)(76176999)(83506001)(50986999)(87266999)(189998001)(8676002)(42186005)(81166006)(6116002)(586003)(2950100001)(4326007)(86362001)(8666003)(7059030);DIR:OUT;SFP:1102;SCL:1;SRVR:DF4PR84MB0316;H:[192.168.142.135];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtERjRQUjg0TUIwMzE2OzIzOlFmYlEvVHM5Y0cyNkdHdXFwYUtoU0ZjT2hY?= =?utf-8?B?Q0oyTytPamtpM3NQMHR2cmkwelRLc2prM1UrTGZ4aWJlTHl1RlMybld4RDQ0?= =?utf-8?B?ejNLejVmNXhqZXhRaE04KzR1Y0d1Ry8rTWZUOXJ6OHZDOVFZQjBoeDNXeUZT?= =?utf-8?B?bHRGZklyamUvdnMvdE1MY2NNWkV2VkMyd1lHQ1FQTXlydWxjakFTRzI2Z1BJ?= =?utf-8?B?aGlKd2NFM0xCVTY1ck4xL0o2VStocVF1L2RVUUJSWTdEL0hzRG9LUmxUWldF?= =?utf-8?B?Yml3d2hOVVBWUlY2ZDN6U3dwY1RBZlhNYzFVOWJQOU9oZWl3anQ3VzlDTzRT?= =?utf-8?B?b2FuOXZEejhnSTY4TDdyZ2d6T0hHWlNEaVdITDhFUGtOMzh2T1B5ZkpGNzla?= =?utf-8?B?L2dLRmZ4YWZjdURJamt2M25pME1nSTZFNU1JcTZwNmtJdG1keko3SzEvSFJ0?= =?utf-8?B?ODVETTFZWUdDL1BYRS9NRjlobzAwRngvc1ZnUVBKY1Y2cVZMRWVzV0czbHl2?= =?utf-8?B?dW9LWC9lL3FtWU8yM2dpWEdjY0NyRkt2bHZmTXF1L1pTdzlsa2sydzVwY1F3?= =?utf-8?B?Qmw3Uk5zaXVYTWlZMzJMdldTSFMyTmc4eUdSVTE1SFk2WXdGUDBPbldQVmRN?= =?utf-8?B?dllRbWprU01kMmNEVkY4U296ZG0yZjJ1RHltVEVDNXdVS2RSUS9SZnRoNEdU?= =?utf-8?B?WTFnWmtIRC9PaTdaZDAyQmdtNjNRYUx4c3YyOHRBS21iV2ZaNWRRVXU4ZXBn?= =?utf-8?B?L09QcTB2ajVaMU5wM2xXUkhHRGxUUzBrVFVLQWFTam40d0toZmdVUlU0Z2tl?= =?utf-8?B?UFZCeWdrTlpIUktzenNjc3QyWTZjWkZHWHpWU1puMG54aGY0RWlLTXliQWgx?= =?utf-8?B?MzEvdXE3RWlkUVFZTTROM1pEMjZMS0NBNjJramd1OHZrWnR4a0xNRU9ndWkv?= =?utf-8?B?dHlJZTk4MHJZTFFVU1gyVDJwOTBZUTNNRDVmQU1ycmdGUmtuKzBuV3ZTbTJ6?= =?utf-8?B?VFRWQ1RzdCtiT0hiT0xvQ1RPMElIQm1HU0dwQXFpTklTcXNteWo0cFliYVdw?= =?utf-8?B?RFZqY1lCZzJ2SjR0TkdBMGdBRHd2M2drbzdzQ3FzeVpRUHZoNjRkMVUvc3F0?= =?utf-8?B?dkp2LytDWmlxUTY3RDg1dDB0RERjYkJGTFZHOVUrbkRxOEdoNUpZWE4wQWJ4?= =?utf-8?B?OXMxVkttbUZ5N2d1clZEdHlieUJoNkxXOGVRcVVZY09XU203TDJqVndQN3NM?= =?utf-8?B?TTVYYUpyTFlYQTg2S29DVXZGc2xjL2o4T3ozYmRNWHVjSDBPSGNvNHdBcEpR?= =?utf-8?B?cFNrMTduUUJaWFRydGVaUGtCM0RmZ0p2QmVsQm5iQ3hKbit1amFhdGtQajdQ?= =?utf-8?B?SEFoakFwTG1ZY1BzM05VZFBONVJlTFVQRmkxeGRSQ1N5OHRNeVp3KzZacU1a?= =?utf-8?B?L3Y5Q1JzSnRxNDQxaU5xRDhHQjFqOTZJQWE2amFBclQxdzl1TCtEMWdYbmtN?= =?utf-8?Q?p4aBCHvHVhfyoJHAyGK7OiEcHBcuCAcCOa2rPwsIToAUxJ?= X-Microsoft-Exchange-Diagnostics: 1;DF4PR84MB0316;5:aXD+GilBaZAn+JV5wEV3xBISbDJddupkGKPoKsTCUYYrVnrBK4mvawTE15lixtDrWmtxUEOaehOz/aWV3qn6vYsynWvYu7myfUA28SVJAu68coXYOKS+HtHRJ9JEpu9O0sfM8viUPmBi4s3+csQg3Q==;24:VxDyrlVH9g066EB1052eAPAzJLHncGBKP5V8EVAP0OrsJRFtJ4ACBDwkT7SwuqjLQU5eiXUxgp/ANS9mbNjJWPN0zhwIoY+E04jLnGTkSMg=;7:B2bXlh/lMKwXjEwXnJn6It/SgFWwdO7WR0iw3KaT+CSJSom+bOZ5oCMTHmAXGxU+fkvCMwJfEQbrVXlo+8U21PvzcICyUOoZUWt2RpmSiFCJ/i4mP07QXhC5RJf0Xup2pfkVP5YX1C4qFhSmxHU4OjqHeYOWYxZtPx2e4+tqM6IGDXXtfpxOQsYQzLSNLXAj SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: hpe.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 May 2016 20:28:03.1306 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DF4PR84MB0316 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 05/19/2016 06:23 PM, Jason Low wrote: > The mutex owner can get read and written to without the wait_lock. > Use WRITE_ONCE when setting and clearing the owner field in order > to avoid optimizations such as store tearing. This avoids > situations where the owner field gets written to with multiple > stores and another thread could concurrently read and use a > partially written owner value. > > Signed-off-by: Jason Low > --- > kernel/locking/mutex.h | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/kernel/locking/mutex.h b/kernel/locking/mutex.h > index 5cda397..469b61e 100644 > --- a/kernel/locking/mutex.h > +++ b/kernel/locking/mutex.h > @@ -17,14 +17,20 @@ > __list_del((waiter)->list.prev, (waiter)->list.next) > > #ifdef CONFIG_MUTEX_SPIN_ON_OWNER > +/* > + * The mutex owner can get read and written to locklessly. > + * We should use WRITE_ONCE() when writing the owner value to > + * avoid store tearing, otherwise, a thread could potentially > + * read a partially written and incomplete owner value. > + */ > static inline void mutex_set_owner(struct mutex *lock) > { > - lock->owner = current; > + WRITE_ONCE(lock->owner, current); > } > > static inline void mutex_clear_owner(struct mutex *lock) > { > - lock->owner = NULL; > + WRITE_ONCE(lock->owner, NULL); > } > #else > static inline void mutex_set_owner(struct mutex *lock) I think mutex-debug.h also needs similar changes for completeness. Cheers, Longman