From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752193AbdFSSCf (ORCPT ); Mon, 19 Jun 2017 14:02:35 -0400 Received: from mail-eopbgr00126.outbound.protection.outlook.com ([40.107.0.126]:58438 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752087AbdFSSC2 (ORCPT ); Mon, 19 Jun 2017 14:02:28 -0400 Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=virtuozzo.com; Subject: [PATCH 1/7] rwsem-spinlock: Add killable versions of __down_read() From: Kirill Tkhai To: linux-ia64@vger.kernel.org, avagin@virtuozzo.com, peterz@infradead.org, heiko.carstens@de.ibm.com, hpa@zytor.com, gorcunov@virtuozzo.com, linux-arch@vger.kernel.org, linux-s390@vger.kernel.org, x86@kernel.org, mingo@redhat.com, mattst88@gmail.com, fenghua.yu@intel.com, arnd@arndb.de, ktkhai@virtuozzo.com, ink@jurassic.park.msu.ru, tglx@linutronix.de, rth@twiddle.net, tony.luck@intel.com, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, schwidefsky@de.ibm.com, davem@davemloft.net Date: Mon, 19 Jun 2017 21:02:12 +0300 Message-ID: <149789533283.9059.9829416940494747182.stgit@localhost.localdomain> In-Reply-To: <149789463636.9059.16943955939303454611.stgit@localhost.localdomain> References: <149789463636.9059.16943955939303454611.stgit@localhost.localdomain> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HE1PR09CA0075.eurprd09.prod.outlook.com (2603:10a6:7:3d::19) To AM5PR0801MB1330.eurprd08.prod.outlook.com (2603:10a6:203:1f::8) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 444e6aca-fde1-4035-957a-08d4b73d544e X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:AM5PR0801MB1330; X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1330;3:TfUgL/tBoTQj4FG/Xdpn+jP+fwMTVe6hpNlG+SE+MXkdvoz+Wzz2wB37uEU9SkeWvfSo9vKC86XxC+5C69OHAu2TLKuZohC/cO13Gg+NgOciNW5Mb14HNScXw3XIIsQmXnng7fuxY0MFDZr4IzVLZM+wkFRwAkqlMchaXpqn6TnEExZ+l09i6ugTz9xh0BE4KPag8CdiZbNs5nAKsEQB0qqM7OmO4I5VvBJWcxYcSzF3HI9qCGatZSiIzBmX+cQqDq5TH6yN2ZvbR8I5TcnZKrxlg86dUcqK/+x4b9cQP+gkdUB5kxz2lD8pZkGiKMJVk+Gqq4uspEFdsBfR5hKRBQ==;25:g92mosPF+RedhRXNgRq1ZzfYba+xki2igwO3dh1InyOlyBptWY0EYb5GoP53aeV4QLZO1AE7l4B73jkvPhRm2iji+bG6Y4GsZYPy7IigIbT3XB9AcpedYpCyQRGsNirCiykeBLRCPp+I+jWhwVt3pvtk1mxJTzSToccivYGWoeeyOle+3RJU1FnC/E3xsfNoAI4WSBa5VFVD30+sZkWY/k7sF4FoTMy4Yxx1+yIjz7bYZonGgnmmtlnxuEv5b6DLdCS+ZYHo3tJDIBFM8yIVvW/2S6GA3iorhiNYTNoau4/T0ZWTepKm3W6bHB3h0jrfz1YmhwvNMxr2dFYzKjzPc8d/2LrH0dkvJE+Ao1Ad2FFWQtbGLocgd5xcO/8lcpR28m0zMK6+AE8ztEs6hBySLShdwU5seZlrei4Js7pJEQ9CYI7sVCg1g2roNgEg/LKApsUMSnV7mUK87xD2WM6MZq2JpluAXPY3ukNxeEQ5GJ8= X-MS-TrafficTypeDiagnostic: AM5PR0801MB1330: X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1330;31:7mDBTy033btGrgSdqMfmZJBV0eryFrCaxkdDDGhIzB57g9P7SPWFi60xtg3tuqQ5EiQCP7VI6TeL2cUTipS85XPoUQnaTM99LBaZ7x4VopaZbcTGYiMrr0a4q4wuXJ/Gtn25OsZ4uoAghG6YZvk27zUc9N2Zf3DWqyBj4wEYw7bnm4R9za4aYhdtqlVqBYrWenl0wWQ+pc+Qu01wbXv7GXDoUyuIRuuSQgD7LdsX8iE=;20:HLyhDuygOlWClNQ2JhUKUFiYpL5nEIgfLxVgGrQYLBOyM7HVK3Lt0mqGoP/AocnhbJwLrpUFb6JpH0YAMSMP2ersXoGX4PwDOuBq4krcQRgSWRQPIhKHDZzHLlue8/fmPXdSlUjlSBKRnPtSpBy+6IMMJHnzC2eCf92VPgy/kAmXz6qQyco/Y/SoEYheMEiJu0GmDiIWf6W4YOv1w5BuxYVbGtWLB7L3McAUMCpk9AmYIX4QZ7iYg0aZuFEh6/TiNr/y6lbXbBT8qyJdtjBJECUmgt46duqcHWqR3gSDejtaxvyKs8tb9/eRypkCcBCNzXKPFVCAIOOfPqR2SLobz5/vmVJipSolLQGfykpVsl/OgrTeSXEMgnqamet+b6vB7qQ2m+qzCzVqIO5pxqXLjNnHlxVCECrHt9UepkEZems= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(10201501046)(100000703101)(100105400095)(93006095)(93001095)(3002001)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123564025)(20161123558100)(20161123560025)(20161123555025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:AM5PR0801MB1330;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:AM5PR0801MB1330; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtBTTVQUjA4MDFNQjEzMzA7NDo3d3FEYUpmZE9kSVVUQjUxeWJWM2RwaUdi?= =?utf-8?B?QTlSMjI2OUdLQittM1E2bW1KSlh0Q3cyTXhKbmRsL1dhcm1pcW5KL0VMdUtt?= =?utf-8?B?UkVtU1dIczJFWTlURm9aUkpOSHBGVXpoV1lVek9BR1F6dzZwakUzMlhkUXlz?= =?utf-8?B?S28xOG5mT2NRNTQ1L0dhR2drNVhSTU5IeGdzZS8vTCtsaDRnNkRORUxPbjRS?= =?utf-8?B?MjJNR2t6amNRMzBaQndUSjF0ellHclBnVG9qMTdWYlJXeVBoSmQvMm5QQWlq?= =?utf-8?B?TkNTWXN2Ym5Kamw3UjdOUXcvME1UTUtUY3J0WXluVDY2N1dObWdjb09icTJ4?= =?utf-8?B?R0M2UjVuUVVNVUtVaFZKVDFlT2J6UjBxK0FpZ2xWT0dpbVk2SzZHelgvVGpt?= =?utf-8?B?RFE5blY3Qk42VXZtbW1CYjNocDFnTmNIc0ZCczh0VFdFRWRlaU91RjQ0TWdB?= =?utf-8?B?UU9MVUgrOEpnZUpFN0gyc1BHVFpMaVVmT0wyellJK3dWM3VXUnA3UWNuaWJQ?= =?utf-8?B?YTdlRjk2MVZCV2dYQjZuaHY2akxjZFJKY2hBK0k4TTI2UG51anNmWVhLR0l0?= =?utf-8?B?VlR5RndwcEw2Q0c1bGRaT0lmSHhHaHpueXl0SFMvS213elFBYW05U2libzNR?= =?utf-8?B?NFZUb0p6THFmT2FYbm82N1MrcDgwRWJYRFNOdFJlRE1CMTZqVDdyRmNlWi8w?= =?utf-8?B?TE15dTJqOHBIbzZLSm02UjZGdnd5dG1pVm1tM0Rmb2tRbG9tbjRjS2FHdFB6?= =?utf-8?B?NTdlNVloM3dhMkpBMVByQkVsQjd5ZkVsZUo5Z0tpc3RocnNMalUxMTluV210?= =?utf-8?B?eGdmOGV6ZVBVZjZOTEd4K1EraHRldjNla1NBbU4zT1RBTUVSSW5vYTJQM2w3?= =?utf-8?B?RHBKaEhMRG5VZUVJcGU0OWh6WE12SFcwVUVJb20ybUV4OWtlRCtkb3lOaGQx?= =?utf-8?B?ZVVXbW9KUU9ybEVrR25odDBSUHN1NnlmTURHRUpQNFdnTVFyMGt5eTVDN2hh?= =?utf-8?B?TlZQT3gxbVJUTk9jbElMdElRSU5rYjYzWWJBU1o2Wm51TnJGSmpBYkpNcGtl?= =?utf-8?B?YWJoZ0U1MG1uRm80eW9MV05JK0R4QUhFWHJZbUJ0dlczNVViNkZ1dnh4enRq?= =?utf-8?B?dWhrK2lPWkxXWVpJRUpWemVZTWxrNjY5VW52UGtBRk5ML253NGJsOVZ3QjBh?= =?utf-8?B?MVdyMFNkd2oraEEwbkZiSnIzS3NBcnhETEZiVHp3bVFZRTEydUNqM3MvT0pN?= =?utf-8?B?cEI4T2w1L3c3TitoUWdFMnFWRHRkeUg0VEw4dk1wQnNubkdZWkZmK2wyTmxM?= =?utf-8?B?Q2ZuTUx1TXRFQXpEYVQ4cUlyckxyQ0dlNExEMzQxa0pPWDMrTGRhTjV2T3Ru?= =?utf-8?B?QnpGOHFNSkV2MjBRdHFEQ0V4M2Ywak1BZkFTV2V3Y3YvZUs1UU1hb2JaTEZG?= =?utf-8?B?R1RkUWJ0QlRDaGl1eTFidExrZ29GQXhyRWpETHl2Z01EdFBiWG5GbDVZa2dv?= =?utf-8?Q?AgWT550LaM7UGevMK/fTzjf1ujxdP6PsmVI7rj7cKJfRNCO?= X-Forefront-PRVS: 0343AC1D30 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6069001)(6009001)(39450400003)(39400400002)(39830400002)(39410400002)(4001350100001)(66066001)(50466002)(47776003)(305945005)(189998001)(53936002)(25786009)(5660300001)(38730400002)(9686003)(110136004)(7736002)(23676002)(83506001)(55016002)(103116003)(81166006)(230700001)(2906002)(33646002)(76176999)(42186005)(8676002)(61506002)(6666003)(7416002)(2950100002)(50986999)(86362001)(54356999)(3846002)(6116002)(6506006)(478600001)(921003)(1121003);DIR:OUT;SFP:1102;SCL:1;SRVR:AM5PR0801MB1330;H:localhost.localdomain;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtBTTVQUjA4MDFNQjEzMzA7MjM6ZENaOUMwUkhmRElVYktXSW43b244cDBT?= =?utf-8?B?L2NRYjFHNkZyUW5TZHRRRzVJR0ZrVlpNRmZJOTg1U0g4WmV5OG83QjdwNnhq?= =?utf-8?B?d3ZqM2pZQ3R4RytwTkt6VUJGUVlKWnpyMWNHQ0dHS0xFUjd0TncrZGtjbUl0?= =?utf-8?B?R1B4V0RNcGZobnhHN1lTNEczTE1PU1haYVp6cmYveG1jOEtDbnhoTEpQQzcx?= =?utf-8?B?M2doMy9Oa3lXV0hjUGJlU3B2eUxsc0FVaGU3VGxZREFiVmlScFc4Q2JkUmh6?= =?utf-8?B?S3VYMFVYY1VmUU1tdXJLT2hNc2tlOVk4WDU4ZUhUOWJET01GbEw2N3RETzh0?= =?utf-8?B?UXZ2Q1VNM0o4RVc4aE42MkJaODU2cDRDK3Qrc3paWCtDQXAzaFZVSFM2SVNB?= =?utf-8?B?Mm4wZWo1UklMaWxqVVBDNzArSDVhcEsrTnhPdmNQKzdiN0hXU3V2NjU4aSsv?= =?utf-8?B?dDZsV01la1hOODV5bVNvNFRtOXdiZ09PWUNvQzVVQk1MeldZd1Rsb3l6T29S?= =?utf-8?B?MkxObVN3dmhzVVFkSDJGMGNoYVhXUmw3b1VSQ25Cd2hHT1VpVk9hVUtHWEdG?= =?utf-8?B?UFdzMktEaGZXMlRlRy9OTStHS01hYXJGSXdlYUJvcXk4K010SFRkSGlVTkFs?= =?utf-8?B?VXF5dFpDTm41QjlnUVBFQXNTVitzRGxqbmJuN0xpb01sU0d3bnQvTkJ1SGNl?= =?utf-8?B?bXB2Rlp5c0lJWlRFakxoMm9mS25rK0J1bklmNEViSmhydEtMemFYV1hBRGZD?= =?utf-8?B?LzBBdlZHelVPbUJkSjdLWXBBbE1saTVFaWZUWmErVit0OXRCTG9QVldBcXlF?= =?utf-8?B?cFlHYmljRDltcXFaK1p1VG9SbHg5QmI3eG9wV3FnekxleHNiV1FhREo1L0U3?= =?utf-8?B?SlZBRTJNSmh2RE9iWHA4cWVhVFJzWHBsVExjSFBzZEczdEdvVCswNlp2aXRn?= =?utf-8?B?cUxOY2NvMnc0aDMyb3ZvQm5HN3NEa3pmb0c4Y3pYWDFwTEdYd1F0eHNxL2xY?= =?utf-8?B?VndYTkFzN043WmdDRER5cmJxU3gyekpsdUdRYklPbXRmT0x5cG9Gd2t1bkZC?= =?utf-8?B?bzNEMUpuaEVGdTJpMndDUldkcGR5bVM2QzJLTEtJK3ZxTEhOUU9rOWlEb3pj?= =?utf-8?B?N2FSemNFbXdNY0RqMzc5c1VabWtzSHlLUnhsa3RwN1BSVVdjUXorZ0UxVlM0?= =?utf-8?B?OWpleGxoUzBKWG5aUHVMbWUzQVNJd3d0Mm5nWTdNZGhTTnVaS3FnaE9jdVZY?= =?utf-8?B?bDdCbzVldk1qZ1BUQ2dKZTFVU1lzOGlsL0RFWnZqaTlSbVMxZEdBMGZLY3E1?= =?utf-8?B?dlNMaXFBdk9JMDhVdXE5WUx0aFk0MXFTclJTdGtKditvZjJISEErNk1sQU9E?= =?utf-8?B?WjRIM1U5WjRtczRiR3ZWRFY0VU9ydHlTZmxqS0pUN0F4cURqYW85eDRHTVFy?= =?utf-8?B?VFhDaVFSZll3OVptL1JTczloa1NEYnRKZ1Y4YlJjVXpqNDlOMkxDd3hlK1RS?= =?utf-8?B?NDQwSjJBPT0=?= X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtBTTVQUjA4MDFNQjEzMzA7NjozTTBhd2huQWFieHN3bmtMTm9FZEptejhv?= =?utf-8?B?cnVSU284VG1BRDU2RDBJUEhVbVpPaWFvcmdpWWM5RUc0YXhkRHJrZWwrZHdX?= =?utf-8?B?VU5GWHVUMUEwWGN0aU1EQ2hIZ0NGY3hZWmhkZVlHc0xrbmVKNkpZYlVkYzgx?= =?utf-8?B?SUFUSFZrNjVvK1NtZDE1ZFVFc0VmSjBKUmtPU0g2OUgwOWhyb0pobExKM1FO?= =?utf-8?B?Vmt2ZllSeC85c0RseFFOa1FZOEVtOEk3QmttT0VoS3JGa0dmdHJDcDcwUTFy?= =?utf-8?B?bWxiSEwrY0ppWUdHZW8vYnc1cEQ5cGhsQ25oMGZUZytxUTgrZEsrLzR6MDV2?= =?utf-8?B?N29NUmpSVXZuNURPbVpaclBoUUNOM0lMM2t5a3RtNVJ6Q3J0WUlPRUx1UjQ3?= =?utf-8?B?TjdPRG5mSXFBakV2U3hMeXZHOXFLZnBHQXUxWFMzLytGc1VnU2p0NGhMeWV3?= =?utf-8?B?dzM0SWVaRjVHeUpFTWhJUWFVaDBVTEZoc2lGV2o4WEQrRVd3Q2pIb2tCYUt0?= =?utf-8?B?SUhIdU8wd05uVlBTUkpxQUhWU3cwQWdOamdoWXZldzJlVlUxU1B0M3JZZHN6?= =?utf-8?B?QlcvalRGSlBrSWhPVk9OOGZ1K0crNkJvSUdtRHdxaENKdmVnUHdEbEFDY2Mw?= =?utf-8?B?L1JxZGFGNCsvcEl0STR4Z09DQzJrZVVxR3Y1a1BqVHlFV1I2UmliWlJCMDU1?= =?utf-8?B?TW0wMDVzSkp1QmlLOVI2cFRHODhnSjJPR2NBbmZuOFo5UWFvc1FzQXRMSitM?= =?utf-8?B?azNFQWJyRzFKd0xBS1Y0M2loUUhTd1dIUVBFbFNOSzUzU1BqcTgzaitKRkxG?= =?utf-8?B?bVVpY3FobVpkdXYrSHozYS9wdy9qc0x5b2c3dTcrTGZPZk1sOGxGQTZCMzBi?= =?utf-8?B?MlBOelE3QnlGQ2dvS256c1ZsVDhpN0FrMlQxc1RZRzBWRnc4NUpVWnpQR0dI?= =?utf-8?B?WWVveTVaaWJjRFJpRUIrMGdJbzk3NGdxS05XSHJaRlBKK2c2eENwMWdKVXFw?= =?utf-8?B?Ky9SYmtvZGpHMUpkMVdSaVd2bVZPT1hoMlAyTXdSOVpZQStLSHVqdEJuakxD?= =?utf-8?B?bnF4SkhaTmZPby9ZVjZNS1FtSjFQbnlaTHFnOGdCQTVldXloMGczQlRhTXND?= =?utf-8?B?SHZPaGNxS1k5ZHR1NHpBNWtiTGVmQkk4ZTk0NmF0N1ZPdkhVTldjSS9JbEx5?= =?utf-8?B?alNuTElTeDdMNHFJK2hjZSszSVhaZzBEcm9SKzVLK1Zaa2pRTW5nZU8zd2lF?= =?utf-8?B?TC9mNHZMUVV4bHZEYTdPVGpVbnQ0UWNqZXFBS3JZMUlKMXVjaCt3NUZVbHRp?= =?utf-8?Q?A8X9FfGcupJulg/4tURHrZjH8qCVxV+og=3D?= X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1330;5:8U2cjE8fOeZLooQiMooFq/BsmcYznyxZovISOZu8nH8S+Q7H3GwX/d3VAoNJGVGnk+fIW2gxkbjLoyKn3jgktAJWpr6pK9tDdOOiMSXIcE4282tgxzDZn1ZzzHDROcuX9SI/YJ/pySqTM/1t/LKVbgxeveaRO4vKi9i8y4gMvaDnY3HJnDyOzjUOBjQ5ulNqGLP2Fw1ZnY6g7Z3KguFMtTRncObZvXxupNIalQcjLUUq0S0JESj0yp7qmO6LWGsyAD8tZhgvmFnTl8c18r0BAqxPjVcTLcwcJZ9ouux8DxDkX6cyCnhELjaybb4WnVEvXfJakA9x+nX89dVvLMzHg7MegaEByS9n2oTRVMxENFxMwqcPUKYdoOVK/ml5u3yeMLShACqyczw9PR4hEcbSE+mPu7LtJ8gQgVxDec/0v+vDW1hLmbLg2k49I19F82JNwt3s0PYdG2jSgHz/OFvgjJ+z/J69urLzgw22n9rgKXThgMyDU2H7nO0X0xKjn1Tw;24:xoe5h2naKMhEfOhcBLxe6Yu/I2CJh+3wbLdL6m6hIdAo2v2/8UaRyl7owDffDPjJsQQVH+lb3lmhM3F6HwSgzxgXlJ0zQjea72+3KKUqoDc= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1330;7:V2cPHExO6P6LjvpQ+8hffP9dOIi75NpAUyqix2QoaitmaeCberzClapjY4zqxvDgW0auu5fXXEG7Pf3n4K9TYNlYZO0NXz3OsJsrpj6DfKqa+2wn7zgcsKBj9pE4MYDGfJDE2cT+GS3/XVmVi65n6Cg9bYPIlxMK4sRxtFBYUBIrjKX9rPKn3cbt2Jx/butQTf8GjHQ3xsOFxxeg04mYoF3Zo1WDveOElmCFMrUKxShK23k/gEqig1Uf2SiKjGt7Dwxb84L4zOx80jhvcfAMbPoMluoKdB7olwsAXFWVi7pwB4+xZoby0cyCqDE3076A87286d93Nw9ontOlSkVACnS4+VJAJxL+HdOlwr0MVnq7EjO9g4oARwo0C0q7WQOklcL2k3xQm0POPYUtuYsBp6/XFJFMmWsXvJqBwk3oRhaha/6GItcgGcqDmCVTDXZO1PWANroebGdRC5D5nCGfsKdaFfJP4MiJfb5TPLDwGztALtKuQm4R3DnZHKUtO7xW246Rsm1pm0OzOktcRDfb/YANcU4+Oby5/sxLJmb1bIyR0atKasQNTQCclv85ItXFvl5mli4h1BeUzsFGdZrZqcIeXDC+0peXFJwuhBZ8/8j07GQfPaTQviUvL2A6m4pKN7PJWbx+fbSkaiznGwMF5ewUj7rCisc8PBLK3q91Nam8V9ehrr+LKvLB/P3w4wF799iHBOqAZD04SYagsFBuUycoxkvAvXP4bRh5TBKPfoMYUK1rFK3lnPiJ9HTzmFIGSqWHBhkk24zlW8CJvtpNvZ9EiwX7S3dBz+D66PsfZu0= X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1330;20:iJ4pSd29WkZ0XXuJPadk1q5ucEmAmtaRiqlo/hVOxKr7L+Z524FdpEbh3URfzQ8oD47IhCHZdIVFFgeBJkpxIJixWDbU0pm0LfISAtyz9RgTCZwpzStdpMY7galjHPx5IXgeA0XHMA4uUO0psgfk8R8xETU483k+cp+u+EUEs5Q= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jun 2017 18:02:17.1093 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB1330 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Rename __down_read() in __down_read_common() and teach it to abort waiting in case of pending signals and killable state argument passed. Note, that we shouldn't wake anybody up in EINTR path, as: We check for signal_pending_state() after (!waiter.task) test and under spinlock. So, current task wasn't able to be woken up. It may be in two cases: a writer is owner of the sem, or a writer is a first waiter of the sem. If a writer is owner of the sem, no one else may work with it in parallel. It will wake somebody, when it call up_write() or downgrade_write(). If a writer is the first waiter, it will be woken up, when the last active reader releases the sem, and sem->count became 0. Also note, that set_current_state() may be moved down to schedule() (after !waiter.task check), as all assignments in this type of semaphore (including wake_up), occur under spinlock, so we can't miss anything. Signed-off-by: Kirill Tkhai --- include/linux/rwsem-spinlock.h | 1 + kernel/locking/rwsem-spinlock.c | 37 ++++++++++++++++++++++++++++--------- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/include/linux/rwsem-spinlock.h b/include/linux/rwsem-spinlock.h index ae0528b834cd..e784761a4443 100644 --- a/include/linux/rwsem-spinlock.h +++ b/include/linux/rwsem-spinlock.h @@ -32,6 +32,7 @@ struct rw_semaphore { #define RWSEM_UNLOCKED_VALUE 0x00000000 extern void __down_read(struct rw_semaphore *sem); +extern int __must_check __down_read_killable(struct rw_semaphore *sem); extern int __down_read_trylock(struct rw_semaphore *sem); extern void __down_write(struct rw_semaphore *sem); extern int __must_check __down_write_killable(struct rw_semaphore *sem); diff --git a/kernel/locking/rwsem-spinlock.c b/kernel/locking/rwsem-spinlock.c index 20819df98125..0848634c5512 100644 --- a/kernel/locking/rwsem-spinlock.c +++ b/kernel/locking/rwsem-spinlock.c @@ -126,7 +126,7 @@ __rwsem_wake_one_writer(struct rw_semaphore *sem) /* * get a read lock on the semaphore */ -void __sched __down_read(struct rw_semaphore *sem) +int __sched __down_read_common(struct rw_semaphore *sem, int state) { struct rwsem_waiter waiter; unsigned long flags; @@ -140,8 +140,6 @@ void __sched __down_read(struct rw_semaphore *sem) goto out; } - set_current_state(TASK_UNINTERRUPTIBLE); - /* set up my own style of waitqueue */ waiter.task = current; waiter.type = RWSEM_WAITING_FOR_READ; @@ -149,20 +147,41 @@ void __sched __down_read(struct rw_semaphore *sem) list_add_tail(&waiter.list, &sem->wait_list); - /* we don't need to touch the semaphore struct anymore */ - raw_spin_unlock_irqrestore(&sem->wait_lock, flags); - /* wait to be given the lock */ for (;;) { if (!waiter.task) break; + if (signal_pending_state(state, current)) + goto out_nolock; + set_current_state(state); + raw_spin_unlock_irqrestore(&sem->wait_lock, flags); schedule(); - set_current_state(TASK_UNINTERRUPTIBLE); + raw_spin_lock_irqsave(&sem->wait_lock, flags); } - __set_current_state(TASK_RUNNING); + raw_spin_unlock_irqrestore(&sem->wait_lock, flags); out: - ; + return 0; + +out_nolock: + /* + * We didn't take the lock, so that there is a writer, which + * is owner or the first waiter of the sem. If it's a waiter, + * it will be woken by current owner. Not need to wake anybody. + */ + list_del(&waiter.list); + raw_spin_unlock_irqrestore(&sem->wait_lock, flags); + return -EINTR; +} + +void __sched __down_read(struct rw_semaphore *sem) +{ + __down_read_common(sem, TASK_UNINTERRUPTIBLE); +} + +int __sched __down_read_killable(struct rw_semaphore *sem) +{ + return __down_read_common(sem, TASK_KILLABLE); } /*