From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752993AbcHZObV (ORCPT ); Fri, 26 Aug 2016 10:31:21 -0400 Received: from mail-sn1nam02on0100.outbound.protection.outlook.com ([104.47.36.100]:32343 "EHLO NAM02-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750979AbcHZObT (ORCPT ); Fri, 26 Aug 2016 10:31:19 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=waiman.long@hpe.com; Message-ID: <57C05287.8000708@hpe.com> Date: Fri, 26 Aug 2016 10:30:31 -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: [RFC][PATCH -v2 4/4] locking/mutex: Add lock handoff to avoid starvation References: <20160825183734.113736626@infradead.org> <20160825184324.934871397@infradead.org> <57BF6A73.1050505@hpe.com> <20160825222328.GN10138@twins.programming.kicks-ass.net> In-Reply-To: <20160825222328.GN10138@twins.programming.kicks-ass.net> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [71.168.64.232] X-ClientProxiedBy: YQXPR01CA0049.CANPRD01.PROD.OUTLOOK.COM (10.165.103.17) To AT5PR84MB0306.NAMPRD84.PROD.OUTLOOK.COM (10.162.138.28) X-MS-Office365-Filtering-Correlation-Id: 76ece450-6fe2-4fd6-6a0c-08d3cdbd8d5e X-Microsoft-Exchange-Diagnostics: 1;AT5PR84MB0306;2:vLYTLnXBfHM6ug+CvigJHq5BsTItVDVecavsPG0ZleXgSpFCpCBx5H5Q2SHu5Wz18mxaLuBbo/PvD8Os4Q/H7EaLx0CxcbH/90Q3biTC23o9heBS0Jucb2N7Ve9BxqwcYA8GX2Apn3JYCgRvDJpP5gsJXbintl8mOixDeoqBapexQqNdurybSzStq1HU8Oes;3:ZajWETeziMMF8WUp7pAs5tmYQbh8CfbHVjrA5NCxjba3Kv4rcUBh4+u6IOshMleaP3A2LQcSS4Th6+CvF6NLwXhMYtJEgqApMH4/jHg9uCUiT9gS8YSzUumr+tDS0Os5;25:dtN/QFT/R7S2x2WE/nre3MRYY/163KJBM1twhEFCBZ7SE6auoGR2VtsP4l5g3EdHNkGdxjFzYfKPJnreQ/tj2BDzpjiV3q4czJcYYlOXuwlu4+ZwFuPqoNVyPxnDK3l2A899uw3cIaliH1P3L6VYhNzHfdK4OwKhIfu/wWuXajx56rYKpL/yk8jEWwzGmhc2cx41p/nkeiD8MKkiOr+zF+H3rjqy31YHs5wlyFvszMctxucCeGUo3LdSm3dBpn7kbAChe2LoEYXcaWLNj0ziV8P7aZ0fXbwY1PONaVeqY7XMtoxrOPsTAq/mvA7hhkEhjHskkFoYSKD3iJwdVOyjxHGLF6+2Dz92z1mc5qjoKi9zmupr59m2/g5lD743ssQK1T4B9BV821pN5ZIRZS0gS7x7dPgiVIY/EzHYVBdAPOA= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:AT5PR84MB0306; X-Microsoft-Exchange-Diagnostics: 1;AT5PR84MB0306;31:Op48tcMF25Zt9MvWNOcGe0PDLK+2hzwnFJzuzpazPmU4d1IV1R5rhU18Bypu0O7TN6etd5jq9rAUz4LCzVfmFCV9ra2WGTOYxkzT7VKWmEwllEz11uo4DU6HGbNE5ccypAM9e1myxZeI7vtR/uAecx+WIw8tkmVXzXH8QEGZbkm0m7OYur8ICaHMu0qDo4dGT2LN4tY3HvyiifyRj0cW3qYj1Ol+313KUX5hO6u2LnI=;20:TKnoSkhVO+DSAAdmr9MWbBbCearjNpK+K546scZqOf7YUUebBCOKUAeYrvVldYTbxekcViqEbURJw0LRiOOH7Y9HTGrpFIOgF86+qIBc9Q4dGORgM4IzaMVTzjD7DUecm9Uth42ZVOP5y0eidtinYLve5od0npMS+XwtcEdrUAZ3MUwdb07ufGF/4qBFapdyD++jCge0V7t9QGxaw0Vc9FPP1/vbiNIfGJ3dduFBQ2CAl6NnGH11FQ1d8FcEOk5I9JbPcpQ+ynA0p+euckr3DtC8ZEznx7KzuwC9c/3oKUacn/t2gPtZisi/XHjly02H2RqZygamW7/o5y62L7h6ry+2jOZJIakKVRbpjc4hzILkAHrIViu9Z6K8ztRn7NLXsLc+EC0cXMVyi0kbzpBZlb4Cu5K0JMNeZsb3o8XqRW7iSLcBxi1BIjgOO2I9cKHCFzYoWFxDVlHSILM1rtXEOuNzoQvx+h37z8Sb/tN1/e/Qc4HdjdRsff75Su1vUKH5 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6055026);SRVR:AT5PR84MB0306;BCL:0;PCL:0;RULEID:;SRVR:AT5PR84MB0306; X-Microsoft-Exchange-Diagnostics: 1;AT5PR84MB0306;4:E3kOM7eejMHGK2yFYYA4WV8ckMy/NJUvhWKaOXkit0cQTNtcDRL7D/t/o6Phy00yvQKcDJBSA/cC5nM2YwgQurP7dmFyyu2YWGiUljnk2SxQsYv6yzDf/2WtiTAMtfCtkwyoPf7vzbEz11Ht8N2dDDEaRrY5JKAD2MYaLh2yIrzrEW4LB0o4aoj31GbOK1yM7LUrRgoI791KhjHngppYToYhlTXySaXIqFCYk5rASE78gp3bELHfY9/zTGJHU6mTvk6Gf9TZ48zcU461xzPW7AZscFZdGoM2C8Q+UHWOkdIanSLqux6D/1eqiiqql78K9R6tdc+HPmB4HnTySH3w07pcTL3O/1KPjedqt/eIhhA2Gpx2KveCN1rELjewBY1OWq3lQOaPILWZ6Oi0X9RboQ== X-Forefront-PRVS: 00462943DE X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(979002)(6049001)(6009001)(7916002)(24454002)(189002)(377454003)(199003)(92566002)(7416002)(8676002)(42186005)(36756003)(47776003)(81166006)(105586002)(7846002)(7736002)(68736007)(81156014)(93886004)(50466002)(101416001)(80316001)(305945005)(65806001)(230700001)(64126003)(4001350100001)(87266999)(54356999)(65816999)(4326007)(76176999)(50986999)(59896002)(23756003)(110136002)(83506001)(117156001)(2906002)(2950100001)(97736004)(33656002)(66066001)(3846002)(586003)(106356001)(86362001)(5660300001)(6116002)(77096005)(189998001)(8666005)(65956001)(7059030)(969003)(989001)(999001)(1009001)(1019001);DIR:OUT;SFP:1102;SCL:1;SRVR:AT5PR84MB0306;H:[192.168.142.192];FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?iso-8859-1?Q?1;AT5PR84MB0306;23:XyoPt+3rnayPLRRAHeFW+lYC/biDQ2ihY75Jpob?= =?iso-8859-1?Q?O4DZyq7mqRV2jyOmEzgvy+l0cLVayoUithQgsHu9GBVZgA8j59dYvrWFaS?= =?iso-8859-1?Q?KwujxKXr8Q24iNALZs3HLUMJibGG79N9cwnozAEVcLH25tMqIHlUXFJuyU?= =?iso-8859-1?Q?2bSOL/NpLAHeLIH53AbEOX5LNQbH8unDVO0OAIYv0OyJ0lOgmrTp8yHiGt?= =?iso-8859-1?Q?uwsxRMEXG2dSUTrT28FyQhnF9H5GlUxuqQigXKLj1KKaiuvZDWKzeyvkKB?= =?iso-8859-1?Q?Ob79FXw+GOJNAH3d/ntyn/FPyWOX874gpKlSkBXdROfhhi7VkvET57gNZ+?= =?iso-8859-1?Q?8sVUwyd988P8TPhfavk7MlDNDmyLV35m7rmlVBfcaJCk647khLWAm6VKn0?= =?iso-8859-1?Q?PB6g12YpKqkdWN0qv53ZEUUBNLNO/DgXehhMNUwOlNno1kHQP8Sm3jhZo8?= =?iso-8859-1?Q?umgBEYyONAeRZUQ6b5XVLW155rqO2VhksFDmaWYFd5aSub6KbmimVk0Ox3?= =?iso-8859-1?Q?Wj7wXlxb0d8oeacZ5bw5gtPuq8LBJOtE7MhaigwT81VS35ATZ2M+LDoIhi?= =?iso-8859-1?Q?JA3fcwWQZQpXGR0jw7iKSce0thVmp4RyBt2PvWy/iRj7XvpvecMCC+o+6E?= =?iso-8859-1?Q?aYoEfcUrUFsyfhPXZRgjx6yS6FmjE/geT+sUPAUhCHKXukBgMUcKLQhrbh?= =?iso-8859-1?Q?KVlYwcFYOMOES6oKy3Rl3e+Jl5WoQf53J/jfSuuJpt+9s58Byizia+6HUF?= =?iso-8859-1?Q?ACxYqmIUi6VirHXBuy3w9gvwfiFGb3gJdzBqCs3iPwAzwykFH+i5FF1rSH?= =?iso-8859-1?Q?rhVFmHW21kwtyUDQJPaWWI8RWWji7VNZzDRcUDdOKWK3SbnP7ktOju6ZG7?= =?iso-8859-1?Q?T89UXWP6SQwNilbahiaEIJEptUmq4GILje+LuDEVH0wGnabhHHB06tGBQW?= =?iso-8859-1?Q?/whg12pgUgfkOBdjgvhEgeFsXUMIxhEKP2ZrmQDEpndh0LjB3rProIVKDB?= =?iso-8859-1?Q?lxdC/tyDsLjDb83o3cQkFvvnvPY/cCigFDkinx/glsIoucxLfeKazZWx9/?= =?iso-8859-1?Q?z6V6i3bSuyxgYsW5FhcLg06KRZ2bJKBA17506OU/poDW1zZ/4ETVZfTfzC?= =?iso-8859-1?Q?yzzsp9oOVjm5liouUM7THdg5DzYRNwFaicSPduay0VeG6gzpQwkGV2F810?= =?iso-8859-1?Q?BtX3uNSWpqQyI0aXdrqE2Y4m3IIKH+HAqnpYVJz92OIF8P74PAOTbOa9h5?= =?iso-8859-1?Q?pn3FXKZ5tOEomkidbbZs0c2BHPDB6f/F6bpQBXKNCcFb/i588gSzYj7aSk?= =?iso-8859-1?Q?5LYa9pwXVT4CRy0ldihogQTXqmlRkOy9q2wIdOivgloerbytH4B6+5HMlP?= =?iso-8859-1?Q?23FNwbrth70kuMFFPiV4mZ/GUiTG+41/bb7hYg/6OyZPORPqOQFG/ZioTK?= =?iso-8859-1?Q?4GojuqoSK7gkzUqb/6/nCWJ4ovzOBqsN0ddER4Iyzkp4JlUL5eLTd2i8U/?= =?iso-8859-1?Q?Zw7DRxEkBJvec7dBOo3pu/p0Sbl1xfSFCU6LOUGXp?= X-Microsoft-Exchange-Diagnostics: 1;AT5PR84MB0306;6:tahldrUGAXZ0KG4ryH+9Yr1H5CRSmpfop2zmBZIKGvg6oihSC0QYeB8gZ0Tkm41JFlt+Qntcfa9nYcVfXd6klU2f/GkZQTwRr0APvnTM6oiLxAO5Uitve2BhEL5oeR5/sE0dVT2hKyufu9kDKVlN6UNxullFzggtE/6D08Aw+pJ45j47qdorWzW2dKz0BP0NXZW8FaJoDAOKEX38w3k+x6tFE9ogN4hodPiSuGUOqSXnmoS4lxdHD0belkaXdl82chH58z/fcCw0Tobzm4a4/gRS4A2POM++4JDpqA7qi7AXnDOKBwZDjeABxYoZ/SnsSS8co8lu51Nhq/GafrIuqQ==;5:1FMnyfn0TzDRL0tNTzvtSjOTmD0AiAZjj30x1BxI82/C+NduJ3A2+ANdYRNpbx4deuEnGlCPJXGKuUgTAXCP3uPVM7kFJptWY5HkWbge+mFsSFXb+QUWId9KjHPuhNxDIowU/rNFBZ4Uozi8LcIgaQ==;24:eJXfec33XtHZVJms0XtGTA/r72e8pVzOkDegcZtKaCrRs3RUL7Gsn8HhOhdXtbkt5Fpt6Ms12TWuvzdY9F4O4F9FvcKqVkqjXp8FLbABX6Q=;7:JSMfqtmnFnObAm8AJbHS4X4i1Z/mgc7pUtF7+Ya1ownvMrKWit+E/YoONW/jLcIKxOkTpIjCOXMea20/Fp/wolk7LNgZaBu7qhYl18opMLVJenu+bR7xuUPsumhCGfId5kcjnO6NVouzXe96axdzJ5PFuu9ToxMhbfJ/5Vido8MdiRws10+/csDQcEE73TUwX5z0WDa846D9e6Zw4W8322FuOV2OEa4eV2Rk7PgIgbbNm06WSp3ZiDzBBoYX5PlH SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: hpe.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Aug 2016 14:30:37.3123 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AT5PR84MB0306 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 08/25/2016 06:23 PM, Peter Zijlstra wrote: > On Thu, Aug 25, 2016 at 06:00:19PM -0400, Waiman Long wrote: >> On 08/25/2016 02:37 PM, Peter Zijlstra wrote: >>> @@ -468,9 +496,12 @@ void __sched mutex_unlock(struct mutex * >>> DEBUG_LOCKS_WARN_ON(__mutex_owner(lock) != current); >>> #endif >>> >>> - owner = atomic_long_fetch_and(MUTEX_FLAGS,&lock->owner); >>> + owner = atomic_long_read(&lock->owner); >>> + if (!(owner& MUTEX_FLAG_HANDOFF)) >>> + owner = atomic_long_fetch_and(MUTEX_FLAGS,&lock->owner); >>> + >>> if (__owner_flags(owner)) >>> - __mutex_unlock_slowpath(lock); >>> + __mutex_unlock_slowpath(lock, owner); >>> } >>> EXPORT_SYMBOL(mutex_unlock); >> I don't think the race condition is fixed when we don't make sure that lock >> handoff only happens from current=>new. The problem is due to the fact that >> the MUTEX_FLAG_HANDOFF check in the unlock fastpath isn't serialized by the >> wait_lock. As a result, it is possible that the owner is NULL while the >> HANDOFF bit is set. Or an optimistic spinner may have stolen the lock in the >> interim. > You're right.. I'll try again tomorrow. Actually, it is also OK to handoff from NULL=>new, but nothing else is appropriate. Cheers, Longman