From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933916AbcJQSqG (ORCPT ); Mon, 17 Oct 2016 14:46:06 -0400 Received: from mail-by2nam03on0124.outbound.protection.outlook.com ([104.47.42.124]:57408 "EHLO NAM03-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S933347AbcJQSp4 (ORCPT ); Mon, 17 Oct 2016 14:45:56 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=waiman.long@hpe.com; Message-ID: <58051C5E.3030204@hpe.com> Date: Mon, 17 Oct 2016 14:45:50 -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 Zijlstra CC: Linus Torvalds , Jason Low , Ding Tianhong , Thomas Gleixner , Will Deacon , Ingo Molnar , Imre Deak , Linux Kernel Mailing List , Davidlohr Bueso , Tim Chen , Terry Rudd , "Paul E. McKenney" , Jason Low , Chris Wilson , Daniel Vetter Subject: Re: [PATCH -v4 5/8] locking/mutex: Add lock handoff to avoid starvation References: <20161007145243.361481786@infradead.org> <20161007150211.196801561@infradead.org> In-Reply-To: <20161007150211.196801561@infradead.org> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [72.71.243.218] X-ClientProxiedBy: CY1PR13CA0110.namprd13.prod.outlook.com (10.164.65.36) To CS1PR84MB0311.NAMPRD84.PROD.OUTLOOK.COM (10.162.190.29) X-MS-Office365-Filtering-Correlation-Id: 7522d68e-0dea-4bbb-ba3a-08d3f6bdd3d6 X-Microsoft-Exchange-Diagnostics: 1;CS1PR84MB0311;2:qSRzzLt9owZZx/hAHKVwJCniwzLmMU/mrXBTFwvjOCa4YOHtsOeVKA6xnWiHKks6f9K564rGtY3eswZ6wM/3f+3dzSYAqbfnbGpkVN6SlEACkKO0C5sBFHa39Abq4Yh46UXsUPhm9Meklo64eyr+b4vHZGt1DGh1vR+BeiBWWm8WXTyPK8ucONMnpXhW0DVsBDONHc7sz6fm3oRgYGGnJw==;3:jHQ1i4EZyDvvvK4p/2+32ICAV1npHX/yOr1nHVJr2j6UqzMld+zd6kuUQ2BveuYMDXb7a5z5o/sTIAXlw7lNtn1ZY/e1qJh2MKL2Vkafc8QZ2x9j0x+Lfo2508ImojJmRvBHyIKdF/hebnnq/0+imA== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CS1PR84MB0311; X-Microsoft-Exchange-Diagnostics: 1;CS1PR84MB0311;25:xy+4d5cOjUUaJCa75R7H7HRpVmU2HGrd5eo1kOy2oWrg+LRPrxDKnHBuL8UkE2Vs/C5YeAhoPbiTQfggmrEuYig/ypM9iYS26rjfgajV5qiRgpL91LRBXJ2dKX0h6/z7Ge3Qmg99GQ6+iTHW8Tci/EFHZG8lEUVTnAOiX9WK6CD+IPo4+IS2fdxbHa9u1yzqDvMmzLJwxUeInB+Vlz9qMMl8+NRGTFKESA0KyRn1h3l6dkY3PcLn4Lio4PhjTgiMxc83jKDIXrkaFg99kqB5IAPuRFexB07x4r1JfAk+PKPdT37Ff4FdG7CGESBr89X5D1+V/Qxxgp1imhbRglo8fKl4GF/qq0tR/V+R3N1CI/bupRfFVF5tju5TZ1GQIULv7OV7bmEPO7JDXEldECuLiyE3QfT3aGPJPTiBqwuIO6XuXBGWxbTQ5i8vxcSqIkaO7vNvtAKCiLH+6RAiCRpy0yKecVpHlr1kReNNGtdkuU/Mi7pJXhqIWIKvRpbmf5tkEPU0seR1KTMy8tVdN3oUUv9LAAfkUpUp5JzUZYEF74k0E2rnWykHgFGf//sQ1iv3a62FlrupopyC6JkQxpdzuccZT55BLMjSvsjRcjg9CAuf/hfbKqFbSOQOU8bH4cK57jyTt3j7z+yEkvqqkqzdcqimlZvije09BOwY2NDgRV2t4ow5/gYUjXsXKyN3yZxdbTHTSj1lT+8vNc8DobsGMoT6uN7R8GmBmiy7YYabzK8= X-Microsoft-Exchange-Diagnostics: 1;CS1PR84MB0311;31:r3HOsUAcasH1onNzjAOkORhaCIlA8wSXnqU3ws8ZcQI0xoV53MPljuOgJMDeAOvpUrChGTOQcv8vdY4a3YAV+nChpqqQbV3hAsCqf4GlMA0FhJz3pTYcF1UGdalc3IpqkWRFFW9MpYqEOke46ZPWjboJoqJc1se6a1gWWmCtiUz0De27keu7FpD3lmrRec0c8C6vSvjCoWOOxNgbPaudebLLYgK8C2OOYk/ifJBkct4ap6Ny6E2AXc7NlPRmG8CoqAFIW9CswQ1Mhpq/9AK8kkN6Bg6fZw2xKDLDLysNhBo=;20:cLVFBjSr1Yr4iUyCGvlTqZtAWkrW2DV5o8jnl3SHjBuGhvHDSSMkb6ub7v7NbWOqhDoqzsdy6NylCLGxZgg+gPAAowEpLyRaXFDFtJd0vFxR7UuzUIjbq4iVnN9U7nQsA5GFOG+uVtzne7kZSyyFD6A05zMDeMkTBX5Q6LZMetJ+vmTCvQ73Z2/ElMxVxZcWTlbUsfDyXjwIL9mFp3j4026YEl9Vupa4hj+YnpMsCM5+Udv2ZMA3yNVvueliFJS140uMA1beAI038X6FrIMAkr9msB3LwJKQRHPJw4T8EVPYx7mT9pU6FawpdsBCUFT5t0cjoQ1TPmYyXt8JI7exg5Srod+xNc5/iwh4zb6WvcuntI9HhEN8sYDPfibOrN1GAfjKrSFUp0fQWf3z3reoLLMTKXlA6KQ2q9Y6an09ct0vvbtawcyUHkTqedQXiRSpwsLO5R/E8VtDyRoOUL5tLcvCfWdRhd8N4iHV3uz7/D3TZBqf/iqltM5DzSo0kFEx X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(227479698468861); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(6055026);SRVR:CS1PR84MB0311;BCL:0;PCL:0;RULEID:;SRVR:CS1PR84MB0311; X-Microsoft-Exchange-Diagnostics: 1;CS1PR84MB0311;4:uoUGlA9FQLmZca+L2wPcuEqqIkPDQi0FGXHAfAJcFnxSbQCDcw4zFCkUXyGUOccPD2BwN+aLtwig7g+++M/KKMIqhphHQ4CFY4HpUONc+rWqtvsH2LZtVAwPuN5N72WWWfDhKgnRWTiMN7gqNMIHIWkTZXnTpzZYT7GOJ0uvOPD5W2aVTiR2C+T9Ks0jIImEHHeA15WXFgGz4v+7eejO+IrF6F3leSdUXnh2p4ftLYPqWQL9C97rmNt49dHUS07lxOaq9H53zr2NO0CQM16KBKBnKJeaptellf/hxnDUf/HYF6ld6YpXj/UGuhpdSJKVQ9Sb8+yVzGDRT9XjNSx+ZfFDMiSZKQDqwDuCV6yY/LbSAHJSkINkernhHoYqzdf+N5wZ7X2WBTeLj8Jls0gIU3cIVxF8yzxtKEQBKM9BHB4tJROk6vTIP4jwxstsMQjePnVuSxoKgm8blPj3PS7hjg== X-Forefront-PRVS: 0098BA6C6C X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6049001)(6009001)(7916002)(199003)(189002)(377454003)(24454002)(68736007)(19580405001)(4001350100001)(86362001)(230700001)(117156001)(106356001)(65956001)(59896002)(110136003)(81156014)(81166006)(4326007)(8676002)(6916009)(97736004)(80316001)(92566002)(19580395003)(101416001)(2950100002)(87266999)(50986999)(189998001)(65816999)(36756003)(76176999)(54356999)(42186005)(99136001)(23676002)(8666005)(305945005)(2906002)(6116002)(5660300001)(3846002)(50466002)(83506001)(33656002)(77096005)(586003)(7416002)(7736002)(47776003)(7846002)(66066001)(105586002)(65806001)(64126003)(7059030);DIR:OUT;SFP:1102;SCL:1;SRVR:CS1PR84MB0311;H:[192.168.142.146];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDUzFQUjg0TUIwMzExOzIzOm80UUQ0NmdleGUzYk1ralhWWmlwdjhzL2hL?= =?utf-8?B?TjlWRm1FL2hUbmtDMTQwZmZxZ25iQ0ZrT2hIdUpwQ0Q1ZXJycnlnZmhQSmZw?= =?utf-8?B?RlhSMmR6VXBNSUtLOHJQdGQxcjdNOUdQaXdFTHR5SUMwc3AwUGFPLzdKM0Nx?= =?utf-8?B?VHh4OVRSSHQrdE9TSjgyUFNDd2REYjVrdlVkTlBZU3RZMFVUOEdCdjdlVzBl?= =?utf-8?B?eFIvWEtGTmZOZ1hITTRSeVBzT2JrUnplVk56Qm1lS3lKNGdQNGR0MkprMWRr?= =?utf-8?B?RldyZ3pxLzQzSDBWZXZ0dUp4TmtkL1Q1YlcxK3Q2S1NTcDZXRWVzNXdheVhr?= =?utf-8?B?QnIwdjRIRDFwNmNFbmkvUmNOc2xxWHVhYTNBQ2J0Z0YvczdmODV6NllxdktZ?= =?utf-8?B?a1dCaFJzZVpNTVdUemNPTUxtL1paWHFDRU5GcWgxSU4yOTZETENpaVQ4VUxK?= =?utf-8?B?ZXhVZzNxaXVTa2w4VW9aSGtDNmswUjcyL0tjNUxnbTdlZHJvdEhIMHA3a2Y1?= =?utf-8?B?L3RZMHMzWFowSEdTOHFSTm9iNkhMRWxuUUo0WW1MRnVaa01iMjV4L3pVSHJu?= =?utf-8?B?YTF2dkNHRFNCU3VYNFBEYlV4L1RWM2tDMTJiYi9LYUNtMDJ5WUZMdjdsYUhM?= =?utf-8?B?MlRYRVRKaU1WeDVkOUFZVG1EUUFQTVkvSUFqUWxqYmRzRDJDaTh2ZElzYTBl?= =?utf-8?B?aHZJQy9sUW5OMnNtS3ZETHBHNWg0T2JXc3ptV0VuVUNrYWZEbk1OcmgxZmg3?= =?utf-8?B?WldNeE1SWmVMUDJ1ZnVPeFpPVjNVNkE5VXlvRjFEWnIzVE45Y3QwNzV4WitX?= =?utf-8?B?QzY0bjYxNHk0QlE5NmR2UEQrSmhDSmRMN01mZkk4MmZ5YmVHQncxRlBUeElR?= =?utf-8?B?eXV2SUxFdjVKK2lHdnRnM0xXZUF6SjBmS3N5SVhRWm8vQ3pLcExhWlJJM0ZN?= =?utf-8?B?TUVOUy90YURISFRHV1hkc3BrM3lUbVF3WTlzYk5FTjhYQWNqMXJvMi9FWEpT?= =?utf-8?B?bVZiT0oyRkw0V3hLTWFDOUttY3lvb2hGVE9jWlVZMS9ENzI1MTYwYlNWaUNn?= =?utf-8?B?RmZ6dGFabkNUZFRLUXlsVWsrMkowU3lqSGdXVXhnRitsb05DODNucjduMklL?= =?utf-8?B?R0hkVEN2dW55SFlUcUlhYUNvakREYTZpZjhkczNHZi9PTkdPY0EyTUdINGo1?= =?utf-8?B?VTRUc2F5UEZVZHVpOEZjNmFtY2FFOXlLbnJlSmJML09uaEpNL1FuU0ptcDRU?= =?utf-8?B?ZGRhV3pleWdTRFlIN2F3VWVXYmpyTSt1d3VwMXZ3Tm9HVkRVRDFYVkVXUjdq?= =?utf-8?B?ck40eVI5K3FlKzVsZ2hUUFFiSkgvUldYRFBOSnRtLzg0ZFZ2M09XUUR5QUxz?= =?utf-8?B?NmYxSURrRjNtaW1yNWZoM2ZQb3Jxc0F1Vzlzb1RLVGZHZHJvYjM4eGQyNmY1?= =?utf-8?B?b1pRQm1KL05VLzFMaVJuTTdqOVZYdWo3VjJ0WVJ2Zk9MYngrbVdTZU9jVjZj?= =?utf-8?B?bW41cGF4UExZTVZIaGVrNGlqTy9nZjU0NERqYU9WcjRWQnZqSDQwWmN5dURm?= =?utf-8?B?MkFQQUJWSHNZV04wV2g0T3ZzRzN5eWZMRkl1T1NqNnJ4Z1dMS0JRN2k0SEJk?= =?utf-8?B?TE9sMGJjOHg2V0pOY2FtVUM2OUZmM0Q3NEUvNTIycWtHNHVXVko1bU56TjVp?= =?utf-8?B?aEl5bWU3VFhRZjE5QzNIeEZaN1pKUWppSW4wOXA5Mjh2SmYyOVVXWlcxMW9w?= =?utf-8?B?dCtCRm1ZVm5qWXhHcGNBUFl4OERzOE5pLzR3NGJyR05TTzViWFUrZW1UMDNp?= =?utf-8?B?QTJtc2Y2R0JJb1JjSzNncDRGdlJVS1hBd3JnZXhxZU1MYUNIblc2Tmx2ckg1?= =?utf-8?B?SGpiZC95Kzl0TEZEdWxvbU96VmEzbXdTNFBqcTlNcGc1ODB4TmUveVVMMXB4?= =?utf-8?Q?zv4D5rFNlZZ5mojh7vkQe2Xh0XHoBg=3D?= X-Microsoft-Exchange-Diagnostics: 1;CS1PR84MB0311;6:szXwWNUXt3Ouc+Su4RF2lQlirLizQVz6vrWvYbL9p4ajYDQ7k9UcXKyzUxtYz5VzPeyrZZgMHfnbDwDnecClqrDqnMPAcX2iKOnE2qPNlWTeArE1dibMoGLu2myPOiSL+tb5duAzvjuPddZOAW+IGOuya7LvWBETyvyXJCrBk53xXLseYTsfzi+6Y9AdHnFedEZ/yTzAt4NZTG+mMoH7VNJ/4egKn0eRRNezFeprtRpcoTbcxgmDSeCvRlJJvNMC8r8RrhkUd4uSMUJ4HaSycChQYpQITZsB+iMn+aCtOblEN8z8pn5wuKKpTWM9MEHXop8gYWlja3dgkOYXFseYKZg+fy+SVv3IFPa868qENis=;5:E9PJVyyKIcLhTTp9TfLw4iSD5zCVQFLGOrQ9mBQ0mj/MD1kZvXg+AKnCz1axbCGlBuoVBH1h49eOrpQO8uVOkXvrQi6jtOA5UyIne/KuBhvj6adhlS/0QdJpbRCEC8pTB8N+N/LhF0LRv9Ixt2JkfiBBFuGVVkBIuble2/R6cZc=;24:6VgkaK9FRbfqWRDtk03jK6+kcE1uNYdQY1FdLcl9zs3oNMXSSA7a0+K18qMYLLWOnNM+pOUXgXH/IYbXnA7irrRG607oVtc3yZ00/J35lKg= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CS1PR84MB0311;7:9nCiDCKCWAKMnyJIWE8YFGOhSrR8b+MqEfF53OBaDB7eFneSAVRH0XPedykmwUDk2H5K3TfZlbvi1dN9NkcHZHdEjjmXxAOCU6knMFKnfI8KOetsjnxCQGNkaBVYWflGzlOtrqSSmYg5JzehqJhsmNcy7CZqEmIDQpzAgEkUaufb70YvAHe+MgbpD+ds0Ott5cMsa+iiFe1QOsmlpYbm9io2917oM4ow9V0stRtbBWguAsNLL3NGySu8yoX3qjsGe5YhJiZbRQgluKs2aKbI206HuHuktHKKglf2iw2jqKyziJY4Z8bYcmhS6ygIMk55tYlJ+C3hQMWgLMXx/mqIT6eNqQPWX8eHcH//IsIuQHk= X-OriginatorOrg: hpe.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2016 18:45:53.8717 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CS1PR84MB0311 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 10/07/2016 10:52 AM, Peter Zijlstra wrote: > /* > * Actual trylock that will work on any unlocked state. > + * > + * When setting the owner field, we must preserve the low flag bits. > + * > + * Be careful with @handoff, only set that in a wait-loop (where you set > + * HANDOFF) to avoid recursive lock attempts. > */ > -static inline bool __mutex_trylock(struct mutex *lock) > +static inline bool __mutex_trylock(struct mutex *lock, const bool handoff) > { > unsigned long owner, curr = (unsigned long)current; > > owner = atomic_long_read(&lock->owner); > for (;;) { /* must loop, can race against a flag */ > - unsigned long old; > + unsigned long old, flags = __owner_flags(owner); > + > + if (__owner_task(owner)) { > + if (handoff&& unlikely(__owner_task(owner) == current)) { > + /* > + * Provide ACQUIRE semantics for the lock-handoff. > + * > + * We cannot easily use load-acquire here, since > + * the actual load is a failed cmpxchg, which > + * doesn't imply any barriers. > + * > + * Also, this is a fairly unlikely scenario, and > + * this contains the cost. > + */ I am not so sure about your comment here. I guess you are referring to the atomic_long_cmpxchg_acquire below for the failed cmpxchg. However, it is also possible that the path can be triggered on the first round without cmpxchg. Maybe we can do a load_acquire on the owner again to satisfy this requirement without a smp_mb(). > + smp_mb(); /* ACQUIRE */ > + return true; > + } > > - if (__owner_task(owner)) > return false; > + } > > - old = atomic_long_cmpxchg_acquire(&lock->owner, owner, > - curr | __owner_flags(owner)); > + /* > + * We set the HANDOFF bit, we must make sure it doesn't live > + * past the point where we acquire it. This would be possible > + * if we (accidentally) set the bit on an unlocked mutex. > + */ > + if (handoff) > + flags&= ~MUTEX_FLAG_HANDOFF; > + > + old = atomic_long_cmpxchg_acquire(&lock->owner, owner, curr | flags); > if (old == owner) > return true; > > Other than that, the code is fine. Reviewed-by: Waiman Long