From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753490AbcERS3x (ORCPT ); Wed, 18 May 2016 14:29:53 -0400 Received: from mail-bn1bon0139.outbound.protection.outlook.com ([157.56.111.139]:25275 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752779AbcERS3w (ORCPT ); Wed, 18 May 2016 14:29:52 -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: <573CB496.4010707@hpe.com> Date: Wed, 18 May 2016 14:29:42 -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: Davidlohr Bueso , Peter Zijlstra , Ingo Molnar , , Dave Chinner , Peter Hurley , "Paul E. McKenney" , Scott J Norton , Douglas Hatch , Subject: Re: [PATCH v4 2/5] locking/rwsem: Protect all writes to owner by WRITE_ONCE References: <1463534783-38814-1-git-send-email-Waiman.Long@hpe.com> <1463534783-38814-3-git-send-email-Waiman.Long@hpe.com> <20160518140436.GA6273@linux-uzut.site> <1463592095.3369.10.camel@j-VirtualBox> In-Reply-To: <1463592095.3369.10.camel@j-VirtualBox> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [72.71.243.68] X-ClientProxiedBy: CY1PR21CA0044.namprd21.prod.outlook.com (10.163.250.140) To DF4PR84MB0315.NAMPRD84.PROD.OUTLOOK.COM (10.162.193.29) X-MS-Office365-Filtering-Correlation-Id: eae85abd-32f8-464b-df98-08d37f4a6507 X-Microsoft-Exchange-Diagnostics: 1;DF4PR84MB0315;2:nZbJUh5XUJoaTygMmu/xh6Rwc4mWzb4F9YR7WjoNyYLkSsDVGmvDroVRxP9mI2xZUXzO48cMx0KSSwUtLDESX5sA8tP8FXHbudUAYiOthNcp9JI2l74zNAMdayK0A8o7J+DW5JAGmuA0t+n8jcT5gO1btZmkZcH3u24BmrQm0WyIWMJghPaMfj01gLSe3HTE;3:If0RRSGWZDjzD4qDNLd8d/0mNddLLYOaAVSBMgKjebNqBFnKS9UC2xw6S+z9nWL14+/fmNZqjzOGtBOdYvEanFzwG5sXteN3MfWfcdwVABeah5J75oBR8fFiItXQ3CLm X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DF4PR84MB0315; X-Microsoft-Exchange-Diagnostics: 1;DF4PR84MB0315;25:IdT9QmpXQFLO+bypDNoog3Q8HTtbBTCOVwNjXY679naIhB1WyK7IwZ2gwZNzTYPSXTdXgQEsmSX7dNcVSASYcQLCy8HQft/9pwvvqflIjMmEtkmXr+6x2IvaWosNHSGjayfg23fpmKapM3cxQK4MFVHIbZbkfT5/CLgXFMloiq3hkI7bz5HSjEr6KCEti3fwIRaohmr/7klq8xvgFMeee98IrukfHT19aMbJq19QMNsRrdYCNpwr+ppWfOMnPP6UtV8JO+IhSgun0qvb+4k9TeIZCB3GeiHszk+jo4MB3XC/GuKMvyshPkxDbuaY3i6SeOIa1MDtvHwK6OXjxkMed82QL61FiENDMQhTiyq2iUwFa3P7kIi8O9dSOo3ToKg18pwlybtzIB5KuACT7x2pevkBHMNtDhDA/Ht1oJ7cU2wXE7MrJebZH73YyGJJuMLWDd1iqC4nSv/PhWOSuBIRR3fEtldaG5HYdUG/I5PlGflx1AUHqZTP+SsEMSuQ0h27H6/SvpaOQ6wA41RJS9WuuYkdn0kJfQWnPiOM/OTrvPV4bHiaekt/RunUOvkuLPxpjbA1kMa/iO4H/c7C2/oQ+VXXaUya3/jd/Iz1Rb/Mzx2BbjuDXhnSCcdAoKlshoAVdiT35K/8RpmzwxVe2EIAM1paAlK3kzBy49dNUyvixvLjyVJioMMUZkMX6PbMB3M66V/7KwBITJENJ/lWSjnahA== X-LD-Processed: 105b2061-b669-4b31-92ac-24d304d195dc,ExtAddr X-Microsoft-Exchange-Diagnostics: 1;DF4PR84MB0315;20:SPOM6HCpJb9MYUkUg32LuRjf+zuXURyviTD+rM8iFCLDtmuKWxsTQjBNdkswQCuUBpq0KYahdIcLLWm8nWpl39dYdodsijDcrG9wxh3qKV5jaGxB3uSBrlresgBZeMhSYmqXwF0HDyA+Rut+pY2yPpQ0vfKoysOTllrlgryfqym5QFlgPMzRd9v2Ah/m2iEiaktnp/hnO3utvr11b0kwuzRUFehM1Xl/QBbS7kovcqiabTg3WOIMKwUWUxIhbafkASLs1HdWYFsIBR+OegIhNoWOogBaLmyL15rJ0c7PfA3nbE/OldtlXAn4hOErK5370sNSGvyQEwQuKZA89d5R2A==;4:QNEOSAv7xF3qNwpxjGhY/WyfK3lh1kxbGzte+Nopw+aTgmo1Tf/WXROUvsfGFONmuSs4qdvkiTanR1md2zFvJpveDxsnwbbGQQqOKu7VOTyqmR3KeUsO0MDNwAleIpMCribXW4QGDZnl3lklzgAvkGgg2VtJfAIsNgTVAy0n6lCg3NsWkDgS+vHxO2+d06TDccrsSoYlguSCaNI4LaVmDmNiyXxgBc6OtD1TDFA8bHvtikKz54T/2GyrXFTs6mgLEQuNToJW9jQ01xZE2hkr2VKfliSeH4JBpcdFOAiSGRlq2kv2idFjqg/bdP4zveBQjc0tXG1dT6n3e+7seTPASz/FJFcdunwGWUGAUVmB9mcpGXz3DfZ74bB52dhR7JjM X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046);SRVR:DF4PR84MB0315;BCL:0;PCL:0;RULEID:;SRVR:DF4PR84MB0315; X-Forefront-PRVS: 0946DC87A1 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6049001)(6009001)(24454002)(377454003)(377424004)(8676002)(5008740100001)(189998001)(6116002)(64126003)(54356999)(23676002)(50986999)(4326007)(42186005)(5004730100002)(230700001)(59896002)(77096005)(33656002)(81166006)(4001350100001)(36756003)(93886004)(7520500002)(110136002)(586003)(86362001)(83506001)(47776003)(117156001)(92566002)(2906002)(66066001)(2950100001)(50466002)(76176999)(7059030);DIR:OUT;SFP:1102;SCL:1;SRVR:DF4PR84MB0315;H:[192.168.142.134];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtERjRQUjg0TUIwMzE1OzIzOmk0RFUwWERlaXVJTktEbzgwMTlxWS9LTm9K?= =?utf-8?B?SnpsRmJQSFZzMndWY2pXZHhKU0lUcjcxM2xRekUvMEFnSlY3ZThGbiswUHBT?= =?utf-8?B?eWNSQ3g2RHlCTXVxWUJSWEVZTktXNVMvZVMzaC8yVTFrQ0orTHZDQUhGWUdH?= =?utf-8?B?UDg0TDRPWVc1eWJ0U2V3TXVSMW5kVEkrZmNxLzNqelUyampzbVphNWZ3Tllv?= =?utf-8?B?M1kyd1lhZitaZG42MWFpRENFa1hUTEUrMllpVG55cE01Ry80NWdWa1M3UlFV?= =?utf-8?B?Q0hobW5yS1ZPc1dSU1JBeStQR1RLSThOemVBNEltWjdjZG05bzZSSjM3M0xG?= =?utf-8?B?VWIyVTJScCt2aE90RHZ6WlRJa1pvRjM3LzZyNzRVMGtQS2ROSDdqcndQN2tk?= =?utf-8?B?ZWVqMzRsaGFYMjFMQXkyazduTGZ1ZmNHSk9NZWp2Q0V3VFkveFNUMmVlUXhD?= =?utf-8?B?L2NCdU8wTThSK0pTU1orR2F2RTVSTjVMZGwwcHNSS1FubWR5RHBQaGR0NCtQ?= =?utf-8?B?SVFiL041WjByTEc2VHdCUmZTbktReVFyY05CTERvL0xzZXpyQjBjT3J5OHRa?= =?utf-8?B?bnhuUzNyakp2ckZRbkVqMXozUWh5aDRSa05HYUp6d0YzaUkySm01OXlVcWVW?= =?utf-8?B?RExRelNPNnV5Qk1iVGo5UktjOVdqQ1JOODN5MjE4R0FhMHpNbDRnTVpvdWIy?= =?utf-8?B?VVNTM2EwcFRVa2VWNzczSDU2RklZR1pMc1g0ak51TC9aY0dNdFlrWi96WHlu?= =?utf-8?B?RkNTK25WakVTOFZKdWkrRGZhUGkzN0txNzdIWWxuUk1pTVE3WFdwNEQ0Uy9o?= =?utf-8?B?cERzUzMvd0NmNll1WWUrb3BLTnlFOE1oNUQ5RWl3VWFDWVF6VVRIY3QxRC9O?= =?utf-8?B?K3FNV3ZIRldYMkRQVURCTHFVNHROOFA1TC83dXJPUTh0VFNscGlnamRVUVNV?= =?utf-8?B?WXNlS2dLbTFZc3p0UUtKQ1daT0krYm1CcDRZZzdtcVgyTkJsQ01hWkZpTU9w?= =?utf-8?B?QXpib0FQcUJJZzZVRmxhbGxGbG10cTgzN0tCOVd1Y0hpc3VldFZWTFBpeEVO?= =?utf-8?B?b01oZUlZWlRYMm1vaGdrS0FpN1BQdWIydVdkRWliWmMyWjhlQ1o2YTIzUVFF?= =?utf-8?B?a2pxbTRacXJYS05VcWpPWE03SWlnVmNwd0RuVW1vcHRZMURRNWgwWnpzSEJv?= =?utf-8?B?U28xbUtZMm4zNnBLeEJ0SzNsejA1aFluNHNzNlFDRStNUnRVVnRUcVc5azNB?= =?utf-8?B?TGR0ZzVzZklpVi9wTVB4eU0zaWVJMERvaGI1cERxL0Q0b3pCWmRIcXJIT1Jz?= =?utf-8?B?OFREejNKcGNib1dzenpQSmpQWUZPM3FDUTAwNDBSbEdwZzYvSHo5cC9VajVB?= =?utf-8?B?RTRTL1VlbFVqNlZXUkF6dEgweitoV0s3eDRJb3N3PT0=?= X-Microsoft-Exchange-Diagnostics: 1;DF4PR84MB0315;5:E0tGDroizHdtiv6T3RdcICpPpki7L8xr92+jPbVJeS9m8Z4ZDzegbkCyQEmIPXwoPipS1g4ontAp6PnJuo8qKXoq3/IJ3hNJA2OL74UgzCtWn2H7oo/Pc35K9TMcGEbVhmdTRPZ/tprtVvNqsfNfvQ==;24:cPDl+H/i/uMzfSi3zHzmuGRnukQCgyZA2vWRDvrBFKY98j1bjBU8MKLku/YSLyaP2Ebpfe/u8c7CUeMZYAAzfxQfIJggA6GBwjhjUKuOT0Y=;7:fIq8CxO1Y9lnUWe+Cx6E/Je8QYlFHfiVtiDgm7pjkHoRK94ts6zZkO84O3Nl/mrsTZ7ZpKf395qe+D+JJ8VawrOjBkQx2dx4k1AaHbCyKz+kSWn09q22NqIJCMNvMBB0Y3g5reh56y6bnTI3xFiVeFoOFLNxGzFoi9CP1ILN+aVGC32WpXG+w+hiHOI2OUbM SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: hpe.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 May 2016 18:29:47.3700 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DF4PR84MB0315 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 05/18/2016 01:21 PM, Jason Low wrote: > On Wed, 2016-05-18 at 07:04 -0700, Davidlohr Bueso wrote: >> On Tue, 17 May 2016, Waiman Long wrote: >> >>> Without using WRITE_ONCE(), the compiler can potentially break a >>> write into multiple smaller ones (store tearing). So a read from the >>> same data by another task concurrently may return a partial result. >>> This can result in a kernel crash if the data is a memory address >>> that is being dereferenced. >>> >>> This patch changes all write to rwsem->owner to use WRITE_ONCE() >>> to make sure that store tearing will not happen. READ_ONCE() may >>> not be needed for rwsem->owner as long as the value is only used for >>> comparison and not dereferencing. > It might be okay to leave out READ_ONCE() for reading rwsem->owner, but > couldn't we include it to at least document that we're performing a > "special" lockless read? > Using READ_ONCE() does have a bit of cost as it limits compiler optimization. If we changes all access to rwsem->owner to READ_ONCE() and WRITE_ONCE(), we may as well change its type to volatile and be done with. I am not against doing that, but it feels a bit over-reach for me. On the other hand, we may define a do-nothing macro that designates the owner as a special variable for documentation purpose, but don't need protection at that particular call site. Cheers, Longman