From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756727AbcBXECQ (ORCPT ); Tue, 23 Feb 2016 23:02:16 -0500 Received: from mail-bn1bbn0102.outbound.protection.outlook.com ([157.56.111.102]:46441 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1756155AbcBXECL (ORCPT ); Tue, 23 Feb 2016 23:02:11 -0500 Authentication-Results: gmail.com; dkim=none (message not signed) header.d=none;gmail.com; dmarc=none action=none header.from=hpe.com; Message-ID: <56CD2B32.3010707@hpe.com> Date: Tue, 23 Feb 2016 23:01:54 -0500 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: Boqun Feng CC: Alexander Viro , Jan Kara , Jeff Layton , "J. Bruce Fields" , Tejun Heo , Christoph Lameter , , , Ingo Molnar , Peter Zijlstra , Andi Kleen , Dave Chinner , Scott J Norton , Douglas Hatch Subject: Re: [PATCH v3 1/3] lib/percpu-list: Per-cpu list with associated per-cpu locks References: <1456254272-42313-1-git-send-email-Waiman.Long@hpe.com> <1456254272-42313-2-git-send-email-Waiman.Long@hpe.com> <20160224020009.GA10956@fixme-laptop.cn.ibm.com> In-Reply-To: <20160224020009.GA10956@fixme-laptop.cn.ibm.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [71.168.64.29] X-ClientProxiedBy: SN1PR12CA0028.namprd12.prod.outlook.com (25.162.96.166) To DF4PR84MB0316.NAMPRD84.PROD.OUTLOOK.COM (25.162.193.30) X-Microsoft-Exchange-Diagnostics: 1;DF4PR84MB0316;2:pifFae4sv8+RhLlOKl7L5onOWQxIBEt3RXhXSiyHkZoujqmm1FsnxpTcgollOpW8bPgSf1W6SFAZaubxx+S6nGvfqLsAgiKFqAKTwEhyyrhaIp0j4n1MYIHe3U8joJHORmUlsGh3HbQPmrKghyubhw==;3:xQEnCxMOIsD6LUu7ZYHbHqDfs4GzCy2FwMfrHMOyt4Kmh4cx1Z7AFwK8Q74JrIM15jTFJs5ZnoqMAPj7zZMtjNy/+7lGVRjOSaMtqWzK77UhqkD7uLYZ5Nbkx3vF646+;25:RS9vYPiqMFqa0BqZeorHriBp7l4IZb1f46oXHYm1HdYxcj9Sl7yP/WZUO9veg7FYvgFFXF/V0ST93AvX3VvCrGHMOBOsL1UIiBjttcPeBHVfNdN90hxSBUw0xQuZf/bO6lu13cyx9VVk7Y2BtaemVOUTATvfrEp9LUOZCZR+zsXd5sgoU/Po6/T9r5e3BdPwiStnNt01L0ztLRjtXLYL0uVXAQgkZ2D5ES9s233CMbENp7qGtJ16iOhDid4V+ZgsQPNy6/R3wB1lhPqpb/HaUNWrYntccIShQ5AJFc/XL+/k9iM/4qVXYAvRHrF35uwB;20:CSfmT3w7/RaP0Xcmnwi9HxUM5mYYqdGFQMu/kA0pP0xdkRBessUAkrS+vvqwjfwA7dh1m502iqpBPleBAGwtCUyMgk2bZJ3D71/lueZoK8SGdCL8FpRDWsBbj/B7TDDaCjvCY1dfAAlA4cllGl87WTbjTTWpIbIy5yWPREhMmCJV/duqON8IS7EgBBqPMrCXC1BcTvmBb+SLOyuqSXFFkOrIJ69g2IMbB9tg61KOmKjgm5h8SuNZP2vwWcBPETz3 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DF4PR84MB0316; X-MS-Office365-Filtering-Correlation-Id: d5f235ab-e708-4608-b105-08d33ccf447e X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001);SRVR:DF4PR84MB0316;BCL:0;PCL:0;RULEID:;SRVR:DF4PR84MB0316; X-Microsoft-Exchange-Diagnostics: 1;DF4PR84MB0316;4:jwv82+Df4LR4RarjTk9ApbRgMsKO97E/jgldfKmmasbT2AjA/OxIQhsyzWxiTHj98Obw9FfTjLC4Rm36FZfV0+19yG2hEJbWkTDev8nVOf5XBAGg3QFKSn/UHdcltXiHffE2fzlkARzs0ZKr/SVYCDm9LVWtMmjzA+BI2VeI16Hs9GNWaAp8+0u1GuKiprIsRvZBot4TU1zz8UyXvQLQ2uj32kRjRiTZNfVFKV+IQszuRhtK8Dr8LFrfnRVEVHAGHOEqIVvvcj8sCqzWKBE/sNEhvC0lMmW0QgU0YBt/cW6wlr7OjlB3iTh2KNwlItAVsZcSGsfHv3YYDbeYKRpNLx/RKn6e6k/XWuKgSKJ9Hd7PawKMOHP3mFf+fKNG/c0e X-Forefront-PRVS: 08626BE3A5 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6049001)(24454002)(479174004)(377454003)(1096002)(42186005)(87976001)(50986999)(3846002)(23676002)(54356999)(65816999)(76176999)(189998001)(5001960100002)(110136002)(36756003)(65956001)(86362001)(230700001)(47776003)(4326007)(66066001)(59896002)(586003)(5008740100001)(117156001)(5004730100002)(2906002)(2950100001)(6116002)(50466002)(92566002)(64126003)(40100003)(4001350100001)(33656002)(77096005)(80316001)(7059030);DIR:OUT;SFP:1102;SCL:1;SRVR:DF4PR84MB0316;H:[192.168.142.191];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtERjRQUjg0TUIwMzE2OzIzOjAwc21Pd2o4d2loTWFlc2JuL0p3VXVSL1h6?= =?utf-8?B?NnpUWElWMnNqOWRWUDFaZTRMb2JxT2lyMlhaUmtiS1VRM2VlZGZsbkN1Z2h4?= =?utf-8?B?dGJCM0EzNlI4SS9TaUhSUERYeXBFa2M2YkJGSUt5RWlCR1VWN2hZTkRxUm1M?= =?utf-8?B?QkVGN0hBeWtGdVYzd2RuVFRyemdxcDdhdVZWK210eEtYbHhQaDQ5NzVDTTRJ?= =?utf-8?B?alY5U2NpREN2dkRIVmxYRTZWL0hqT1Z4ekxYaVcveDJrcExzTUM2N1RDc05q?= =?utf-8?B?eWNwT0ZVamtSMU5sYW1DSGJvMG9JRWRXcldIL25rNGRlS1RXNDZlM0RKMjV2?= =?utf-8?B?cWgwTUxkNHpNd2JUNHpVaHZOY1lZbXAvOGduV2V0czIwVFZ2U25saGFSWlY2?= =?utf-8?B?dmZ2eE1md3puRnhNREZqbFNBbXVqenJjK1V5ZnZXQi9udG9IMVBxa2tKWndZ?= =?utf-8?B?Rm9JUzhhdFZhMGxhK0tNbXVTY0Q2MHppbmxpWnlEclVDSmt1V3RoNWNPb29r?= =?utf-8?B?dUlyU1NxVUtyUUl5MXBiU0Q2RTA3cS95RTNvVysvYW1jUDJQNXI3WFR5RGVB?= =?utf-8?B?aG00ZlBKbHE5TUduOVVkSElnNGI0VXQwWUM5OTFJbUZlQ2E5bTEwZ0VzVTZh?= =?utf-8?B?QlNqR3h3Y2V3V3ZsSnJ3SzgvQkVMYUQyc2pSeWZXNnR5c0lHY0N3V1BjMU9i?= =?utf-8?B?alZXV25xNEo3NTBaQWhVNldFb1V4eVFnSXlFeEtWQ240UzRlcHlibE9ZSU9k?= =?utf-8?B?T1lnbUREQWtLYW00OHJCZjZtL21JWXJlcStmTnFpSFZUeWRTNjYzSlZwR1ky?= =?utf-8?B?am8weDlqNGJQOUxDVkNlSVJ0TTdRNWJ5eVVBNzhINEV4S09wek16bCtTenU1?= =?utf-8?B?YkRrdHdzMGNBZUhBc1pKQnRCNkYzL0R5c3BGa25GYnJObG5CZDFsWUVXUlMz?= =?utf-8?B?b3M3SHBDNXlvcjMwdU1nMEZBbWRFOWtWaTNjMDFpUWpGWmgvTkkvUjlLeUpV?= =?utf-8?B?ckEyWEZPZitiL0IvSDQ0S0J4NWVTeGU1bWNoUDhXdHNpd0pEaW90ak1EcjEz?= =?utf-8?B?cUJnc3R6SmZUMExMa2dLeGxJU3dsZUtXVkhRWXdyTUx4NUpRd2ZRNTFYWUd0?= =?utf-8?B?M0E3NytVWEFFL09LaU9UbTNUeXNXdjBhZEZMcGY5T1cwT0daRHhRWnpQM3I1?= =?utf-8?B?anYyUnF5T2tsYkFhdy9ZdGRSRGoydGFpYXFYS2hTclMxczhna2ZsL1lPZkR2?= =?utf-8?B?WkN6ZytzM0RZWno4YldpbDl3cnhqOENDa2RraGxnTEQwUGdjRDJUTHMxRFBi?= =?utf-8?B?WUZ1WVE3ajAweG9hT2t1SzgvdGl2MEpnOGxRMWwvVDM1OFhUUllRdXZZNXZY?= =?utf-8?B?b1RkbjVzNkFCR2Z4TnFFbjhJUlEwTzhRTEM0STM0amZEd29ydGt6NTQybUNq?= =?utf-8?B?eDhGRG80Q3JlVHZKdCtCMUd0TEQrMzVNUkFJNkR4VjZQTXZrUEJ2enpNUjN0?= =?utf-8?B?djRudz09?= X-Microsoft-Exchange-Diagnostics: 1;DF4PR84MB0316;5:AApOPwX8h2uNmA7IM+FwCKo4aZRvCmVGsTM0aPryOXOPWperlQrgFWeYFNKUTaES4kDuId+fsi8OeVX8XljIJvgBpPiT4mzN2O7nR5D3Z9RiG4SmSWnfEFlCipzFEMIqzK4Fmbu4OCjC8SsimJWq8w==;24:s/qgP1Bi5I9gY4h7ZqBp7SEv7h4bP0GBLD/A8wCA+wagBOKx2sPKST1mFie3ChABd2derA9F3LAzFqAFLp2JoyTmUGVfPysKT9HZ+9jJ8sM= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: hpe.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Feb 2016 04:02:08.0984 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DF4PR84MB0316 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 02/23/2016 09:00 PM, Boqun Feng wrote: > Hi Waiman, > > On Tue, Feb 23, 2016 at 02:04:30PM -0500, Waiman Long wrote: >> } >> + >> +/* >> + * List selection is based on the CPU being used when the pcpu_list_add() >> + * function is called. However, deletion may be done by a different CPU. >> + * So we still need to use a lock to protect the content of the list. >> + */ >> +void pcpu_list_add(struct pcpu_list_node *node, struct pcpu_list_head *head) >> +{ >> + spinlock_t *lock; >> + >> + /* >> + * There is a very slight chance the cpu will be changed >> + * (by preemption) before calling spin_lock(). We only need to put >> + * the node in one of the per-cpu lists. It may not need to be >> + * that of the current cpu. >> + */ > Just curious about the comment here, what if the following happens: > > CPU 0 CPU 1 > ===================== ===================== > task_1: > > lock = this_cpu_ptr(&head->lock); // head->lock is on CPU0 > > continue to task_1: > spin_lock(lock); > node->lockptr = lock; > // head->list is on CPU1 > list_add(&node->list, this_cpu_ptr(&head->list)); > spin_unlock(lock); > > , which ends up the node is in the list on CPU1 while ->lockptr pointing > to the lock on CPU0. > > If there is another node whose ->lockptr points to the lock on CPU1 and > the node is in list on CPU1, what will happen if these two nodes get > deleted simultaneously? > > Regards, > Boqun > Yes, you are right. I should have acquired the per-cpu head pointer first and used it onward instead of accessing the lock and list in 2 separate operations. I will fix that in the next update. Thanks for finding that. Cheers, Longman