From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756721AbcHERly (ORCPT ); Fri, 5 Aug 2016 13:41:54 -0400 Received: from mail-by2nam01on0054.outbound.protection.outlook.com ([104.47.34.54]:30391 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752141AbcHERlo (ORCPT ); Fri, 5 Aug 2016 13:41:44 -0400 Authentication-Results: spf=pass (sender IP is 63.163.107.225) smtp.mailfrom=sandisk.com; infradead.org; dkim=none (message not signed) header.d=none;infradead.org; dmarc=bestguesspass action=none header.from=sandisk.com; X-AuditID: ac160c71-20b1198000000e72-24-57a4ce4c20e1 Subject: Re: [PATCH] sched: Avoid that __wait_on_bit_lock() hangs To: Peter Zijlstra References: <20160803181128.GH6879@twins.programming.kicks-ass.net> <11007730-3fa5-139a-8091-655743894ae8@sandisk.com> <20160803213006.GA11712@redhat.com> <17b65ff9-215f-ab74-9f5f-15dbd308d054@sandisk.com> <20160804140938.GB24652@twins.programming.kicks-ass.net> CC: Oleg Nesterov , "mingo@kernel.org" , Andrew Morton , Johannes Weiner , Neil Brown , Michael Shaver , "linux-kernel@vger.kernel.org" From: Bart Van Assche Message-ID: <16207b90-2e6c-fe23-1b4b-3763e5cf0384@sandisk.com> Date: Fri, 5 Aug 2016 10:41:33 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2 MIME-Version: 1.0 In-Reply-To: <20160804140938.GB24652@twins.programming.kicks-ass.net> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprKIsWRmVeSWpSXmKPExsWyRoxnka7PuSXhBjOuK1nMWb+GzWL1Jl+L NZMesllc3jUHyPt3itFi7/wGFout+1sZLY73HmBy4PA4/OY9s8fOWXfZPTav0PLYtKqTzePE jN8sHu/3XWXz2Hy62uPzJrkAjigum5TUnMyy1CJ9uwSujI1d6gWv+CqWNW5jamCcwtPFyMkh IWAi0T/9B2MXIxeHkMBSJomP+9dCOdsZJZrmXGWBqVr57joLVBWjRM+1RkaQhLCAo8TW/Z+Z QWwRAU2JlW332SCKDjNJPP83iQnEYRZYzCSxddJnNpAqNgEjiW/vZ4KN5RWwkzg79RJYN4uA isTsa9PBakQFwiSm3X3LDlEjKHFy5hOwek4BV4kjuy6B2cwCFhIz559nhLDlJba/ncMMskxC 4C6rxP4/T1hBEkIC6hInl8xnmsAoPAvJrFlI+mch6V/AyLyKUSw3M6c4Nz21wNBErzgxLyWz OFsvOT93EyMksgp3ML6+7X2IUYCDUYmHd8G6JeFCrIllxZW5hxglOJiVRHijjwCFeFMSK6tS i/Lji0pzUosPMUpzsCiJ816M/hgmJJCeWJKanZpakFoEk2Xi4JRqYGwQt/2oZRcd8OnvUiH/ Y77C/HKrtUTi1/vNTSx4NVdi9q3zf5m//P3mlhP1pyUxPiY7KujdnTNGN3ufKiprdnRXnuj+ foPhZdEaOc7OSc4pu2cHlMs02rzcOT88brY460wT09lZPJ7yW77uef2+bpJy2PPNIZIuu4QX ehe0H2PcZMDlc+uykxJLcUaioRZzUXEiAAm3p96oAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFupkluLIzCtJLcpLzFFi42Lh2siRonvh/JJwg3NvOC3mrF/DZrF6k6/F mkkP2Swu75oD5P07xWixd34Di8XW/a2MFsd7DzA5cHgcfvOe2WPnrLvsHptXaHlsWtXJ5nFi xm8Wj/f7rrJ5bD5d7fF5k1wARxSXTUpqTmZZapG+XQJXxsYu9YJXfBXLGrcxNTBO4eli5OSQ EDCRWPnuOksXIxeHkMBiRok5k3pYQBLCAo4SW/d/ZgaxRQQ0JVa23WeDKDrMJPH83yQmkASz wGImiev33UFsNgEjiW/vZ4I18wrYSZydegmsmUVARWL2telsILaoQJjEtLtv2SFqBCVOznwC Vs8p4CpxZNclFoiZZhLzNj9khrDlJba/ncM8gZFvFpKWWUjKZiEpW8DIvIpRLDczpzg3PbPA 0EivODEvJbM4Wy85P3cTIziwOaN2MF6faH6IkYmDU6qB8WDrPbtDoU4bjF/GHjvOc2eN4cxs XaNSmZwnDAeYcxsOhLbL6ciIf/ovL1S4XSBMLVbj/SernmmTD0zLKnn42nfPkz13S7zm1ITZ ZX2KWT/B64Zjy65UB/n8qgmPj9bNnqFk3NpupNq+ZnG09V/RIqcU53cf9u72i1zQ/+Dath2f FvdzTlBaocRSnJFoqMVcVJwIAATZ6lccAgAA X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:63.163.107.225;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(7916002)(2980300002)(438002)(377454003)(199003)(189002)(24454002)(53416004)(106466001)(586003)(8936002)(47776003)(64126003)(7846002)(2950100001)(11100500001)(77096005)(31686004)(33646002)(92566002)(4001350100001)(2270400002)(97736004)(4326007)(36756003)(7696003)(93886004)(65806001)(23676002)(86362001)(50466002)(68736007)(76176999)(356003)(230700001)(8676002)(81156014)(81166006)(31696002)(69596002)(54356999)(83506001)(87936001)(50986999)(2906002)(110136002)(189998001)(305945005)(65956001)(65826006);DIR:OUT;SFP:1101;SCL:1;SRVR:BY2PR02MB411;H:milsmgep14.sandisk.com;FPR:;SPF:Pass;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BY2FFO11FD055;1:6Kk4Rkl6MsJAIIl5vS5PtxGQ8GVflUFP+zEjo6xGTLzsAiYnsUGKmSNy39l12AHZcAlueOSz7KuecDIg9Zt0edpXdL3WLJTLao5/lxH067cSF726F9DkbCjvt8r5POl9M4uc27ec10eX9LOGzOwaAdnvek4E8tiHxQRuFeF6SoyYP7jgrYxXa0Y7v6qnvo6mpv2DGCe3z3YWozssA9bc2GnhIQSS3G/JJWufFZrdpMF7gKx7AAHe58+Ll4lcyatSnHzWcTfH9KrRWFCxpgxGWV2qy/zQWxUSBToHEwZe0MNZ28qgdozAbDI5wXliB0ryGMAjPZCXAIxfSdw1Tb8z4vHPdeE1AM5pomzwbQuOVQ61wIeifCMQiRCXjaHpvBmR3bZIIVyrw76lBa3ogFcTkRkLXGihqWUNrvSJXLnVF90woLqLHF46y69CO62xKOzNWjV3oMtE7S10ZEnExbQjEZRRWWxuaTc4XI5iCkE5IEM= X-MS-Office365-Filtering-Correlation-Id: 6a47e566-fbb7-4e25-a75d-08d3bd57c29f X-Microsoft-Exchange-Diagnostics: 1;BY2PR02MB411;2:thOzr49qcNSzZ4Xy72zMfmoLui+mlBw+VvAMzC0ef/0aMwsaMNiEKyUKq6Lp2EpAehhYEDynzkljMWvYI3tEihloB1PKo6UgozkUIgQyXH+XmG58mfif3iwoQL/t9KynQ8lMOQEv9AaSHjiC3/3pSXHx86kNRY6z61GLRCNYBenZ/8KR/3+EZAoAzseQfnJ6;3:GS7QuacOpLuHCf35YmuZAvYd/6DYbAioJB4ewXOxle6dyJ3RAkXtluZ2liTpigdjqGR56voafqcJRmTuu+OC4CefGli22eVOYMw9+X73a1zOsYwSZEl3tPGEajTA1KOpsoBzCiJ+1EvbOwLRsMB5bI7I0yDCAqtaou2XoPquCJN1SQDKHBI+z66Qb/zaEbCw1a0Ug22e9EcWszIc4NDyrEl7fLrF0zzUBC0I3bsfRejH6ZLCeURKeB66RVAZM00uf8+eV5x6sIg/maLW0SLNow==;25:Kl7rUSyU2TB+OiYb2jbDOHH2AEoTFlIpOR6COSWvhLi0SiNrlHdNCKbIX2gHWuTEKnqGIbjMDOxav0ogRo9n2qbEAggCWYfDMlvtIxJEgc7I1SmeKSWzyByWS6Iuukb4ODLxcswxqZVSFs0KBShyVjzL5ugFRM9fBM4MQ14XP/AKHLRz6OipEQA0kviHQfcXhlbEkZZHcH60Xlh0ZbUWRnczqHLhsSrL7Ou31IFk+FHohm8p/qQULPeBclXCsrGBc+vo28xv9h7Fh0zmQf3Hq0pe8GpPUQ+h0GJZHZWWz7BoXv+7CpFtgsbXIrML8KxCuYgCajSWtfqlvJLNxzFGmcELQuxfEK4nJkyCYDzR/CWsejal7hnTP6eVR3hjKYzcnoe9b295oxdAWtZk32Rx61t3DjwKrrDuCuUcxMvh7L8= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(8251501002);SRVR:BY2PR02MB411; X-Microsoft-Exchange-Diagnostics: 1;BY2PR02MB411;31:ZRPL5alLQ6/suhJ6au+jKQMnOGeZyUN4XGIO2a6OZ0fhi7ZKRLnpwoiWWgL3DXjP+H/0yBIFk+OdH/A2NbwFeHPrW0rx0fBNNTzw76hIvkijNn7WLoXicwtD69OWQn6jaKzVZndgg+khDqvfTqZ05TzSq8x2EO93tqJwKnOq7VJRw6WlqpChTASDUHpF2UCdIAYbg/oS/4oPyIpgiYReaBXywVm9lq/XqCbUMA2MZH0=;20:mv380DYv6Avni4zZ7o0AYvNVvqFWORCW9bkiVyYYe3MpP3cXU4u3rHULJ20FbWwScQPnFm0DZ8cxR5BoKWwcrD2P7eOIE1YCdKXeZRQtmPV6rZz8QWkCT5OmY06wteuzcG3NEPzUJkjb/0joxIUIVxk0wDRVg2hzHbbRHbz8RFdxfPBHPwqSzIb0agEejJ2oDQtfo0+vAOe79WrrkdgT6BH5737ytqCa7rcKR5QJ1G5iLJ97XDr7Hk6FfqoIpy8p8ZsDpE91yoZ3HDzEUtHbyDP5AAm/D9CKoJcG1+9nyyAO0tgFbpwhLWbhavEugdAvpd5PwEodmDiWnZrTaukxOWrAe2BDz1x061EQLPBSd5d+gbNlHP+c6hdcFPJQBRNe9FDaylR+9ifWC1Q/6w+l+CIVDtWTDBLUYOz/t6VJWqHtAx3TbpnUlmIDls+ABuVpBycLlPOFHXYD7nDMy9Dp8vwmCFch31IMWhQrT1I+C00wjN1aLi5xwacDfz3VGnJQ X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(13018025)(13016025)(8121501046)(5005006)(10201501046)(3002001)(6055026);SRVR:BY2PR02MB411;BCL:0;PCL:0;RULEID:;SRVR:BY2PR02MB411; X-Microsoft-Exchange-Diagnostics: 1;BY2PR02MB411;4:FPW+4F9JnmyRODFBqh8sHSo2C5SWi4YIb4fN4FyDTaB3jhTibGZDg/RlkWbB2Lv/voFphjQ2JTL6rrSUyboP+xlJrXV/DjLHv3IVAxkKbULASh3few2f/Ncoddlr4YYg9Dj+QdS6lAxOv9/FSyFG0X31mYTSodL8Qjxzf22TqGqLBle+l3AWno1WheSYZNd83P0/YPfcRZeSHPzCyok2/4lY+qvwB5b7XcRNWK/gIz8I6fXmaHjMBaX9cCPWKxreggdE5bUSpnfmcqSjWT/kBKfQpxsYt1ucvNuUK7CMpDESIQkPyPnbzYWPnTaVNATJaj7kPXQ8M10w0b6KwLebXn67gyRCVUlDvlb8R8YgrbWT58s4BOHBvTAT8xXOUgus2foDJKTPMWqLM+h4Av3G6n7qGY5qBxed1hI50HibAc4= X-Forefront-PRVS: 0025434D2D X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtCWTJQUjAyTUI0MTE7MjM6amxyRHdURzNmVXpHOUppSkVyL25OWkpMZjBU?= =?utf-8?B?UHc0ZVpaN3dkbm9kUFNOdGJJR3V3Tjd3WnZDdWhMKzEvSGtheFprUTFUNEZ5?= =?utf-8?B?THVMbGZYQ0RMN3FHQ2ZYam1QdG1xTys4M0lld2g0UkdueFIrSUVuRHZ3MWQ4?= =?utf-8?B?NyszV042V0kzYzQ5Vys5T1U4SEpGMFBPeTY2S3haQUpJU1cwNGhBNG5sQjlD?= =?utf-8?B?MFFNUGZLV09nZld5THo2VlZFWkVyajZrTEhRbzhveE0zcTVPYjhpdkpib3Vy?= =?utf-8?B?OFRZT2VsR3Y0NHdaZktUek1DWlJ3bmVvTkQyMnRzR0VJb29vL3RRQjlvelQy?= =?utf-8?B?eHNMaEd5T3ZhOGRmdkxNRmlmbS9KcDUxaVFDUzZxU2pQb1RrS21PanIvOExq?= =?utf-8?B?NjF5YzBMbXc4NnRsL2s0NXY3ekxTcDRNNjlHTi9maGYyc1FaZW1Gd09mZTJ5?= =?utf-8?B?V0pVOXB3QURBQ1NCak00WkNoR3BVbGZxS1R2NjRVV29KcSs4U2ZrdmRPZEdN?= =?utf-8?B?QVcxa0hBMVNxWlJCcGpyZkRBYkIyNXRJcmdVcTh2RFgzSk93YXk2WmxGZzFO?= =?utf-8?B?bDQ4RFhBWktQcVlOYlM1RWVER2R0Q0pFMVlSeHBsRGxWVEk5R2wvSGpSUmRX?= =?utf-8?B?K1RUbmkrbTlCY1pwUllJUm5ZNWNkVjBVL0ZiVGJ0TTRyOG9QUGliK3doWmZa?= =?utf-8?B?STNzZWJjTThSQmVwSy96d3Y3Umd2TEcwZ0pHNXZiaFhkU1lBZVlEaG9xUlZw?= =?utf-8?B?NzJ0UG1WUCtvR3hDTVlLb1JLVkpISjhLQ2p1ZzhVRi9FUFBtazE2K3NRRXRL?= =?utf-8?B?ZUZ2SHRtOUhKMkU3Kzl4cFBrK3c3N2RpMGc3bjFKQ25kVjVDZ0hjUmlVK004?= =?utf-8?B?U1BOTzlKYnpmT2JreFVjQVQ2eDRVTkJsYm9OaHFzeTM0OUxIMnFETWVTSUIr?= =?utf-8?B?QlhNdWVtUUNnK05uMHhXcGlPMlV4U0RXNm9qZDIyWEpsemUxbzE0c2RlWWpF?= =?utf-8?B?L2lWVzlxOGtGdnZkVTBMVUVHYW9lVjhqWDE1T21hT1hvSmNOMWhKM0c2b2hF?= =?utf-8?B?Ym01czB3UnZhc1FZSzFWZk9Ra3pPWWhab0FvSCt1QWhHRUVPTFNmTlJnWWRp?= =?utf-8?B?MU4zZys4S3RnTkh3aG5WWk1YSmJldnArL2xGSWYvREZGN25nOW15NWx6dEk2?= =?utf-8?B?ekFUb1RQWXJYNyt4N285RWR3aDh6SzBnd2I3THhQNWNvNWNBMlJWSmxMQS9S?= =?utf-8?B?d282ZkpkSE0rUi84MkhmTkNVRDhzRTZXRzBIUzNzb0FGeDZYMTJVVmZlZGRE?= =?utf-8?B?M0JNekdaU2JTcHdhd0dtUmMrbVpJdEt4RDU0TGtaRUJWV2dtcmN6QWFlYXNB?= =?utf-8?B?TFFJQmhFZU9EZkxiU1I1dVNUR3lNSVQ5U0NjWko5TjY5dkZyVzhCMnQ1UFNz?= =?utf-8?B?UFNzTkkwdzlCYS9GSGRoblZRWmVZVnh0Ym4zM0dXaWREdmdVbGltbnJmcUpV?= =?utf-8?B?dUZTd0RYU2ZrUzk0Vm14WmFGMFNHRC8relJ2bWIxRzZaM0xWei9MUG5pbTBK?= =?utf-8?B?UngrdjI4NkF2UVI0cTlicXM0eGFsWWxhMjJUL0V1VE8vTm5nb3UzRHpWYVlB?= =?utf-8?Q?3FYrujIIJfd89wirPn9?= X-Microsoft-Exchange-Diagnostics: 1;BY2PR02MB411;6:pmVNchsV1C9nKO8pzKUHk7LZnD0RYReFbM54EbcGeVnPjd4veYBjzGZzF9rQE+X/c5ySg2yM6/tEUnZg8vFXuArL4zFmu1XdFxIhXj0l1DAIgENRayPb0L0nw+LD9BGiRe+qGtZpvINiNn+5gZuMG0Eh47Jdr7ROpQ+YcEtGEnreBh7yxLr5sgJ5PDi1Knop70KuIaDoqjx++pHLUApZRis324cA0sQ49hSVriGwwokb8R7O4FpvvHL2489krCNwZhkE7HeRhv+ZXjNwvDzPDfy6MjQl+jrxXBH7Z5vC5rufsNnBlp48j3gNInHAbRw9OCqvqOYxbL1dU20Xy0Xtzg==;5:s10iy/OdlUpzSrtGL1zHdw4BVekw8SykJqnpsRv+qqbcG33bqhl9K27fCNSEHpXSrhADJ022AaLj1yTKNWtJCf8vc0vFwx+rKpVOor9q8/Yw30Dljs5ggl9yqIMMrh5H1MGnTNslaMKWdbB2Rkg2iw==;24:giBAMXC+TuNBM8EMtHVDBgwqnrQrepwo9n+e1StuxTX5oMHqkXj+g/Jer0+yNwNsZBCy4cBlPEueu45QJQ1kid5UhU9euNfbl66+FIR1N0s=;7:gcaOuG2BD8aQzFoeK9oKDl7kwtG+wCfaj6yQA1ar1rUzIQQz3PsEjBM11QdaNUyUPOjbY7JSEaIXHEYZF1uhd8O4CW5td1wOoYaFDW26qKONbm+IVJH+AKp7AUzonk4hY529QU3iZmLQdgEQqhRde23+JMRfgk+JmrxbiAfsZKoYKsS5SGIWkKCz8Yp5DfHgaUh1E5yO4OCFAndCniDZ86VMUDL2i1oDScaI5SkSmTau6vpAajkM/ymOHYmWkN3v SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BY2PR02MB411;20:2StWl6Unf/GEd7Kgu2Ua5vEJCSnfi+kTG75++e+gePH522c60tnWBxK24uinjZl730FOaP/NP1apyG4FRd3OYDqx88mFm9oYlnwls2ZrSoiAJPOtbqnclrlVMn/kVprKuZaiwfV1pj1x0K2dZmDtYfO4JXyyfqs8rtDZDskx4bbEQ512ardgEidbZ5tglt+GwGJmtdCbKLi+qR6ouWEoucRUp7ieGK5QAkJrAipefjgEkQCMsOWfybuCBXUUbBt8 X-OriginatorOrg: sandisk.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Aug 2016 17:41:40.9271 (UTC) X-MS-Exchange-CrossTenant-Id: fcd9ea9c-ae8c-460c-ab3c-3db42d7ac64d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=fcd9ea9c-ae8c-460c-ab3c-3db42d7ac64d;Ip=[63.163.107.225];Helo=[milsmgep14.sandisk.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR02MB411 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 08/04/2016 07:09 AM, Peter Zijlstra wrote: > On Wed, Aug 03, 2016 at 02:51:23PM -0700, Bart Van Assche wrote: >> So I started testing the patch below that should fix the same hang but >> without triggering any wait list corruption. >> >> diff --git a/kernel/sched/wait.c b/kernel/sched/wait.c >> index f15d6b6..4e3f651 100644 >> --- a/kernel/sched/wait.c >> +++ b/kernel/sched/wait.c >> @@ -282,7 +282,7 @@ void abort_exclusive_wait(wait_queue_head_t *q, >> wait_queue_t *wait, >> spin_lock_irqsave(&q->lock, flags); >> if (!list_empty(&wait->task_list)) >> list_del_init(&wait->task_list); >> - else if (waitqueue_active(q)) >> + if (waitqueue_active(q)) >> __wake_up_locked_key(q, mode, key); >> spin_unlock_irqrestore(&q->lock, flags); >> } > > So the problem with this patch is that it will violate the nr_exclusive > semantics in that it can result in too many wakeups -- which is a much > less severe (typically harmless) issue. > > We now always wake up the next waiter, even if there wasn't an actual > wakeup we raced against. And if we then also get a wakeup, we can end up > with 2 woken tasks (instead of the nr_exclusive=1). > > Now, since wait loops must all deal with spurious wakeups, this ends up > as harmless overhead. How about adding a fifth argument to abort_exclusive_wait() that indicates whether or not the "if (waitqueue_active(q)) __wake_up_locked_key(q, mode, key)" code should be executed? __wait_event() could pass "condition" as fifth argument when calling abort_exclusive_wait(). > But I'd still like to understand where we loose the wakeup. My assumption is that __wake_up_common() and signal delivery happen concurrently, that __wake_up_common() wakes up bit_wait_io() and that signal delivery happens after bit_wait_io() has been woken up but before it tests the signal pending state. Bart.