From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751300AbcGNOwV (ORCPT ); Thu, 14 Jul 2016 10:52:21 -0400 Received: from mail-bn3nam01on0110.outbound.protection.outlook.com ([104.47.33.110]:25328 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750897AbcGNOwT (ORCPT ); Thu, 14 Jul 2016 10:52:19 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=waiman.long@hpe.com; Message-ID: <5787A718.5020901@hpe.com> Date: Thu, 14 Jul 2016 10:52:08 -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: Wanpeng Li CC: , Wanpeng Li , "Peter Zijlstra (Intel)" , Ingo Molnar , Davidlohr Bueso Subject: Re: [PATCH v3] locking/pvqspinlock: restore/set vcpu_hashed state after failing adaptive locking spinning References: <1468496357-6400-1-git-send-email-wanpeng.li@hotmail.com> In-Reply-To: <1468496357-6400-1-git-send-email-wanpeng.li@hotmail.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [72.71.243.160] X-ClientProxiedBy: BLUPR0401CA0006.namprd04.prod.outlook.com (10.162.114.144) To DF4PR84MB0314.NAMPRD84.PROD.OUTLOOK.COM (10.162.193.28) X-MS-Office365-Filtering-Correlation-Id: a7b45810-12a0-4388-a4f6-08d3abf67358 X-Microsoft-Exchange-Diagnostics: 1;DF4PR84MB0314;2:EszWrJ9ohVVr3ZkHyqZgpnJdsAfdepNoldtQ93Wf6ytdpzIsfZ693scNGMlsMz82XnBHoojXxW3b+rjP03hWZHD76KuGXMHjCZlkwLcng3iX2UEB9TFstAD1AT7uyHqE/U5y6gDNrURECtSvLt4ghdv+AcPaqU7g7KDlrXujw2rNvAQps4wvUQeNnyXVcvp5;3:X6bS/eci05nPjnGm/D9hp12eGRmVXYCD10Hg/qyzJ7oADBb8vYQgkfnu4ungCZSMkoe8CY9IDa5mxvJXBGVh/C50YArYmeu1QBDaZxxgFDVhwBJEnkFBNritF3BVWRZb;25:OaFdPUn2bK5zxaEbB033VSlBjI6LaRx4+JvkmrhMry98gwWbO/nXqu+rMfcF+3KhK7MeHbq/1ZGX5WFppwWHPLqGHjWoKtu00Rh2BA2y9TJRxIdHYjPYKchECj+Wy0WJJ3jxDs6cemtrOv+TUA2ksCV2CeCrh8Jblb+0FpPVDWzaZcHqH4rGtMiUUsW5PUqwumhyVhx1sSwlfC5HU1zHgaZ8N22DkSrQTGzCokbLzy16XuBFYJ353iXDZymDTriZhsrQ0z2Cg32XiDrpLtcWNR3QUjrRXKafd+BLhgSsQzStH3fA7y2S1/rbYkLqFltRShb5YCbBSIlpUWjfPPawpOQWvCEYcrE2i+bBmmKc/Wc2ZTCUyuLWcdhLQVbfpesijqXXFA6XreRlzA0sTXAOFV+yagOxM6y6LsSE6rhkXOs=;31:GQm0h+MuAW9o2e6QF3aVaWnnwuYE96jPSDW/uMpoLMjOMvkIS1POpi2GO7bFlksYFMtU0AAzXPycEph6QNOFVLlJ5lymeuypMhosdg4+gEsL35W1/LI2/SeS0f4715l24RWVLhig1avwddmk/aA/dFvF4TM+Avicn3+6BTfwb9+ZDpaW4b1tKF1ESM7drM5uMUIpJPHod50nFj0m8M1h5Q== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DF4PR84MB0314; X-Microsoft-Exchange-Diagnostics: 1;DF4PR84MB0314;20:speu4TWt6vxu4apw18j3twuexn7sVRnVYDhlmf9n9bcXq9FXszmV5Pp4p03SzVc+KpBxJuII4l64zgPVHCvv57fyC21E6tZDazqCC9db09eRfsqAKrd9iqqhI5k2iC+Yp3CAtRa/9AW+SwNETWIuWk2j16OhQQWeQeKDcneeGAY2kXXGvWRXCEa0BLScPRf+ovgpygmomSwcO8jrF9VM3oJJjqpvKWEHxQNWTrZSvwU4Rbam4XrPqSTQtmIeZVnW2ur+32SPPOeoC1q20ksNKE9cG0bwr6VCVoe22JGkkoWOCBNFEEt8a7ez7EIr3pfjaBHeQEiYKeU1OPvX5kPr/q/oLsUE1mqvn32LWO9Vyg0Ne3KCdEFeyDRgHwUI4aQJTqtg6JvdytoRwUm04fpNOEMS21ZmNa1IocltfEXJarikLfvdzhL8tRlnizDvvbR2j4DHFzhludoLdpof9pCwNNQF51u8JUG7aocAljdFwbyqBaqrDc4GtACB3VAacmQW X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(227479698468861)(194151415913766)(104084551191319); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6055026);SRVR:DF4PR84MB0314;BCL:0;PCL:0;RULEID:;SRVR:DF4PR84MB0314; X-Microsoft-Exchange-Diagnostics: 1;DF4PR84MB0314;4:8PDO0c3F7IDemnCHvu+ZNnarMLMzxsCqWaSw0ejrTUJPYVZajcgvmpi7XE8SRjS9SnJB6olIRxx3ttJYrusjC4PgqOxQsh1L6dGj2w6CGG3ES42SeKqB7gUz+JsGXRVXgeuhHwHHgGquR7DasIXW0WuXTcUFObbNEEJZik/gQX60CUz2Av0ibLk4x/uBBGAWUgoWT3TZboRlLcfyrAWvSvc7ZnWOYw6zxBl+CeVYig15ONpC8T/QZ8v/71zews/l/5JcN3NZi32qjUtv765ZcVt2gQoOAorhAoMz4bVmvCZpt+KdhbtqAPBS6x0j4ahUVwLP/WyNomL2soe6W8LuVkhe+CvM3ichFi9IFNUy/pQ+mxO8051KSpFWExAaLH8W5CGlnVwgkO4BjKiz1E5YwlB50KMd+BB3xvcegvGBo/EoUAmGIjsmwlzlSX6ZT7RWPQsQt9Xk37E1nEN27Nm1JBHpoTykyXRFtVNZWsIl1b3LGbgp9CDpP9Bqr8kLxtcm X-Forefront-PRVS: 00032065B2 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6049001)(6009001)(7916002)(24454002)(189002)(377454003)(199003)(50986999)(83506001)(81156014)(81166006)(92566002)(117156001)(54356999)(7736002)(8676002)(76176999)(86362001)(2950100001)(59896002)(305945005)(65816999)(87266999)(7846002)(101416001)(36756003)(106356001)(47776003)(105586002)(68736007)(6116002)(189998001)(4326007)(19580395003)(65956001)(1411001)(42186005)(97736004)(586003)(110136002)(3846002)(4001350100001)(77096005)(23756003)(33656002)(65806001)(19580405001)(50466002)(2906002)(230700001)(64126003)(80316001)(66066001);DIR:OUT;SFP:1102;SCL:1;SRVR:DF4PR84MB0314;H:[192.168.142.167];FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?iso-8859-1?Q?1;DF4PR84MB0314;23:foRk0sund5y9/DjbtLujH/97dGPS49YM93hl7Vl?= =?iso-8859-1?Q?iZXeXUKY9NY4IMdB0vWLndEOe0ntUTWFWIZBSocgXyS30wmgEOnf54d1bC?= =?iso-8859-1?Q?kilJH5+NdneGxPEy3zd9B1VHYzDEH1XDN6S8sf0ia5lIqn4JXSRZ1/9R4s?= =?iso-8859-1?Q?jY9XytGSAsNEbDDzMkcFBQ/wO3QIepA7qtSRYWZv31qafLQ/pUYoV8g32b?= =?iso-8859-1?Q?LdDeFx8BjGqMdzwJknlQaqgrzkkSU26D6w25UYUIKAtG/Pm57H5oaaE9Et?= =?iso-8859-1?Q?eDz2M3S+aBYofl49ZZb0UiuowxW1i43hzv1JPqcLIrnPnK0GEq7WB2/j7U?= =?iso-8859-1?Q?gEuFeQT1CCxfoLc1nCfNU0LjXT7S+ZymKIwqMYTHLmsV7r+GiGWDNs7KMa?= =?iso-8859-1?Q?Ssz+UbM50e9Q091rT85uy6quI4YBMuGdJ/mVSVTUaKkS4F3QWmUm2HjdP1?= =?iso-8859-1?Q?QA5PTG0KaO0QTfvT7F4q1P35QQJtJJB3B4EcxANmzMMDkF7ifk9TKqO6Xw?= =?iso-8859-1?Q?YdV1jL7kwzJ4SkhSLmI3+nmmjdE07IKhFfSLarSBGFKtF1wSGna9b34WcX?= =?iso-8859-1?Q?zKPLpcMv96i5bRDYH1mZ1oqY7SXH7bNolb78SZyCNMUSa3rNnbxRF4LQO5?= =?iso-8859-1?Q?/wVpIOAWMMifK5QBlC6bHY4GHDP9KIWCiXZ9v/XE5tOtUl2H5HDT2X/xgd?= =?iso-8859-1?Q?TXOJKw12o74Klx7WuYEHKlOCpNoGkZXWdGfd7ow5H7r06tZIaZHHhsqwb2?= =?iso-8859-1?Q?NCWLKeQX1pSZ5z+twC82veTp1XS96W17KUdLdKLg2Xyv6yqaqTzJmG+fER?= =?iso-8859-1?Q?kC6z8UEANYjJ0eZWC7G9+ZUc60Zeop3d0CE3AFXSUeZ+kYpqU8M2pGbAUc?= =?iso-8859-1?Q?faPlWBbDumK3LS8+3iMXXd4Ccw8fFiYvL+hi0CddLY3a5bfjy09mfK2tS5?= =?iso-8859-1?Q?b4ncb4xzdKvhbin8jr16Cju6ucN9cMvIhfqr/IyPiVA4+bG8U0UrLRHVHU?= =?iso-8859-1?Q?mhsl1ixxVHpoyJUTpdgQqFf7B/rtvaa1Kv4oloLwYClDaA5kAszU6lIuER?= =?iso-8859-1?Q?6QEImE4pusMN5GGhcioLWyTOtaNwgto8AFJRJG31kpkKbR+MF2l2l93JoB?= =?iso-8859-1?Q?Kc/bVDafuEX1+VkR+6Tqu9DpHhoB3AD8tagRSapYPXSHMtpld1zyaLQlQe?= =?iso-8859-1?Q?xqaBTfPdR3gZqwcSVFWXb50A9uLOh3nbFIfACfiiwL+/UIH90tHj+GPqAj?= =?iso-8859-1?Q?3FjHBEnLLlQ/1uqgw+WYW2yRpivSuajHONixZN5wpRd83sKi/81Cv/ZdxB?= =?iso-8859-1?Q?pThYZyFuDWaIxydgWV3fEZpgh7JAzZNBhNBdLlETzHmgRqRLJPgfX6Uez8?= =?iso-8859-1?Q?f3TChTFX+LJ0FD8JiVohMj4m2ICU7?= X-Microsoft-Exchange-Diagnostics: 1;DF4PR84MB0314;6:iCp/1cUsR2uo//JDj7yIPSvLdAxF8/xcUFChOsZHb69uR34kROgzjBznCz8t5W12AxEUszTIw5+67aLofNGkhJ0KKngTkiMi4/dh6SrX/Hsx/P8CG7zN0kjhYkIG1jUAeYlbIpqdvGZ/a6EBllLyiQoxQrDB19diBIs/arSyfbMBczY5n6cxz/41ZBTHu8/C31aUKuAL6UH1G/OVRy2xEiCaQyjAPvCJrr8+hnc2st07EKGV9siTP84k3QzWM/x2c7vSuIM9hhl7HUm8quPZjhIA9Hd1nBjymPOK2KVTUhnNLHpfM+mxqL9UV2PGQzf+70q2mXeo+RMV7NN7HZ1fEg==;5:z0IukbngVevjO5myq6rj5xSyHYqKloFIXjXOiwx72HFDOJkPC9WE9DDEac2i2yLF0XrJ6WGP3xp9J1cXgNPVHGIc8yQjdSGiPKTCqG6yZdBm7GawHq/FlxSzwOLOFC9GHyTGZuke9SpDZGOyO0+aXA==;24:hA5ry3b5oeS4s+gFR+SMH/zQMqtLZ11wO67q6szoxRBp8marh1a8Nxsc1PM+urGNeTeTfY0s5DWnn0TamppaB5tsYVnnHo3oGHkqyOhXCQI=;7:B14wXzugBEVh3i0skbWmeN26Nrn53UrHN0SCCUURt4NrSy/n1RNjdeGluceXkgttnar87MaCDmxpaWL6cKyxmuuiwueMaBbv5MElyR/ao4z8LjWswpKQ/xGrLwpMdK2PKxxO6VJxxkFH5nX0QnC5G1n9VEdf9SK1xzoHwJaU3mz2HhjoTOyLrZxGPpYEH6u6NgSQJReE5EJ/JIDmhORZyjSXxJJQ+CTJvtIOoVxTrObqQB0luBa07REkmDgSjSv1 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: hpe.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jul 2016 14:52:16.8810 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DF4PR84MB0314 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 07/14/2016 07:39 AM, Wanpeng Li wrote: > From: Wanpeng Li > > When the lock holder vCPU is racing with the queue head: > > CPU 0 (lock holder) CPU 1 (queue head) > =================== ================= > spin_lock(); spin_lock(); > pv_kick_node(): pv_wait_head_or_lock(): > if (!lp) { > lp = pv_hash(lock, pn); > xchg(&l->locked, _Q_SLOW_VAL); > } > WRITE_ONCE(pn->state, vcpu_halted); > cmpxchg(&pn->state, > vcpu_halted, vcpu_hashed); > WRITE_ONCE(l->locked, _Q_SLOW_VAL); > (void)pv_hash(lock, pn); > > In this case, lock holder inserts the pv_node of queue head into the > hash table and set _Q_SLOW_VAL which can result in hash entry leak. > This patch avoids it by restoring/setting vcpu_hashed state after > failing adaptive locking spinning. > > Reviewed-by: Pan Xinhui > Cc: Peter Zijlstra (Intel) > Cc: Ingo Molnar > Cc: Waiman Long > Cc: Davidlohr Bueso > Signed-off-by: Wanpeng Li > --- > v2 -> v3: > * fix typo in patch description > v1 -> v2: > * adjust patch description > > kernel/locking/qspinlock_paravirt.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/kernel/locking/qspinlock_paravirt.h b/kernel/locking/qspinlock_paravirt.h > index 21ede57..ac7d20b 100644 > --- a/kernel/locking/qspinlock_paravirt.h > +++ b/kernel/locking/qspinlock_paravirt.h > @@ -450,7 +450,7 @@ pv_wait_head_or_lock(struct qspinlock *lock, struct mcs_spinlock *node) > goto gotlock; > } > } > - WRITE_ONCE(pn->state, vcpu_halted); > + WRITE_ONCE(pn->state, vcpu_hashed); > qstat_inc(qstat_pv_wait_head, true); > qstat_inc(qstat_pv_wait_again, waitcnt); > pv_wait(&l->locked, _Q_SLOW_VAL); As pv_kick_node() is called immediately after designating the next node as the queue head, the chance of this racing is possible, but is not likely unless the lock holder vCPU gets preempted for a long time at that right moment. This change does not do any harm though, so I am OK with that. However, I do want you to add a comment about the possible race in the code as it isn't that obvious or likely. Cheers, Longman