From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0916DC7619A for ; Thu, 6 Apr 2023 01:57:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 985DA6B007D; Wed, 5 Apr 2023 21:57:09 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 90F456B007E; Wed, 5 Apr 2023 21:57:09 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 73AAC6B0081; Wed, 5 Apr 2023 21:57:09 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 5C0C86B007E for ; Wed, 5 Apr 2023 21:57:09 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 3DEDEAC76F for ; Thu, 6 Apr 2023 01:57:09 +0000 (UTC) X-FDA: 80649303378.11.0CA055C Received: from dggsgout11.his.huawei.com (unknown [45.249.212.51]) by imf07.hostedemail.com (Postfix) with ESMTP id 7256E40002 for ; Thu, 6 Apr 2023 01:57:04 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=none; spf=pass (imf07.hostedemail.com: domain of yebin@huaweicloud.com designates 45.249.212.51 as permitted sender) smtp.mailfrom=yebin@huaweicloud.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1680746227; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7os4YebrsB+qVnoAs8abz+sYpG6SziiRn/vgzbQG0e8=; b=iUzCvyCicraar3+81zZ6kyZeTlSnJmQ4MbFDMqW/pliGY+E3RI4Ex018+T3d234FYA95XS 6C7uLlZkQ9OpwEzEDVQGeunp4lln6JiHcepmj28yNAdHYgT3wPy2BAL2BfhjujG4n4GjGy PdWQ5K1gUzxgCkzQwrVkJuyZuw5hb04= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=none; spf=pass (imf07.hostedemail.com: domain of yebin@huaweicloud.com designates 45.249.212.51 as permitted sender) smtp.mailfrom=yebin@huaweicloud.com; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1680746227; a=rsa-sha256; cv=none; b=r3z0nTdy3m1BdIiJCxaqV/z21Wf2crtutv8eXPYWJhrFsVBOhRZft87BSQvuqo556zkcnQ ZZnH6Q6oTHUY2UPwlaakExKbs6q3XcUusvpB9ZfPFRzN8GEUCUJSES2Yr1626v3+4qW9rm ZxvjEPVqbPV+fP7UW61UAkCPkasFoIc= Received: from mail02.huawei.com (unknown [172.30.67.169]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4PsPkf0xDVz4f3mWC for ; Thu, 6 Apr 2023 09:56:58 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.127.227]) by APP3 (Coremail) with SMTP id _Ch0CgCnUyHoJi5kX936GA--.31319S6; Thu, 06 Apr 2023 09:56:59 +0800 (CST) From: Ye Bin To: dennis@kernel.org, tj@kernel.org, cl@linux.com, linux-mm@kvack.org, yury.norov@gmail.com, andriy.shevchenko@linux.intel.com, linux@rasmusvillemoes.dk Cc: linux-kernel@vger.kernel.org, dchinner@redhat.com, yebin10@huawei.com, yebin@huaweicloud.com Subject: [PATCH v2 2/2] lib/percpu_counter: fix dying cpu compare race Date: Thu, 6 Apr 2023 09:56:29 +0800 Message-Id: <20230406015629.1804722-3-yebin@huaweicloud.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230406015629.1804722-1-yebin@huaweicloud.com> References: <20230406015629.1804722-1-yebin@huaweicloud.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CM-TRANSID:_Ch0CgCnUyHoJi5kX936GA--.31319S6 X-Coremail-Antispam: 1UD129KBjvJXoW7ZFW7ArWDXw1ktFy7KFyfZwb_yoW8WFy5pr 4UKry5Jr18AF92k343Kw1vqF9I9r1kAF4rKwnrGF1fAFnxZa45urW0yrs8JF109rn7Wrya qryjgF4xCa4Yv3JanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUBE14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_Jryl82xGYIkIc2 x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0 Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJw A2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq3wAS 0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2 IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_Gr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0 Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2IErcIFxwACI402YVCY1x02628vn2kIc2 xKxwCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v2 6r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkGc2 Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7CjxVAFwI0_ Gr0_Cr1lIxAIcVCF04k26cxKx2IYs7xG6r1j6r1xMIIF0xvEx4A2jsIE14v26r1j6r4UMI IF0xvEx4A2jsIEc7CjxVAFwI0_Gr0_Gr1UYxBIdaVFxhVjvjDU0xZFpf9x0JUHbyAUUUUU = X-CM-SenderInfo: p1hex046kxt4xhlfz01xgou0bp/ X-CFilter-Loop: Reflected X-Stat-Signature: goy7d7jhunur9esxk9q8633p8fj6oh5o X-Rspam-User: X-Rspamd-Queue-Id: 7256E40002 X-Rspamd-Server: rspam06 X-HE-Tag: 1680746224-326787 X-HE-Meta: U2FsdGVkX19Q/cMvzq+DMYfaeafj12cWPp11/6kkhBVYquevKOt3gpWCjwSVE/v3yeNL7JzFYKmBs45kOCOqsnI+FLXojrNxasRruLl019z1x61JHTRxG8oCqXtvlXyImRt0zytoXrDG0QQW4PeuoBAZ5Ds14Xcgx3tIav2OBwOkN9FzC8AYU0l5WHtq1BI6WMb90Z05vNgqP7LD3K8Op6XfKEszpXAMWdYkVSNCaIeAiAkPZFLlsMEy/FfuEqkf+gpgh1kpM6dTHhLxk8W52oLngtiyMMDlV8fV+Kz6FlNDNnLJMc5YjKWm3ksGEb3Qnhl//fMt8IUqH96srVC9p1J6OORWdgvZ6aNKb3/UXlr/c3pL7++epKXiktxU22U3OSmTedjwx5q/KPS9ukQa72gq5VRtTyGRJyU5pdlYdiP73FmcrqGh8J5GPlr1bKUZ1P/FhpBex5nTqNTOasO+4+QQ4om402fzE/BO8ArnQk5icGAV2M1pz22/4a9bnfEeGf7CjOZfLM/3mGIMxJ/qzYEjzE+MOsXSDWnbRkI/qcAWnAnygYWHd5E2J9bWZSJMV3rYeR8/tsoPMI9hp6pFV/+y1aG1G4C0fzzAMQA+SBX5OvMOm7iTvYLEZ1fHm1BYfcw2GMZmlDUCr7cVB9hIfg6w6gYKbYIJ8JJV8y9eVNVwxQAfEqs7zqgTwIX4K8cRSnRXsIcw4tY+zIpUZdjcaPbZ1vBKsQm9sb4MxPgieMxIAcxCtfFxnB+ySn+NcNygarNpWGdpJgugoGEacmEJPtf0tNwIDI+kY1K18YJ4tub5tm/uPnT7qbwKfuo8TxbvrNaegwt4eLCXbahedIGzcL18lUfj8JvaZPg5KoUVPKDmOEi78gOlefNclzXRZkRf8f/93CK4ghD9XkcAZZggxbHwfBF22F+YvWX1g0GCSn2MAMVpBvGPNi1/RJUBNsQJBlg0xbIUSDyRiIMjGmQ pM6RSzsF WojwzJ9FqOnPhwN65BVeu2HRkgLWy0fbPsDxYdKgmLB9Y884sXf0KjBRoSVimd60amXoDxSOMEnjZu2y232g2JanUUnk0J8NL1i9hCiRNb2BjIL/j0vme7dn9IctHj/cX/jqXSxk99Up7RVkVjPFXwVbtiwVLKhwLJAHihc8ktuvUiABy2GLAtfiZETGlmiYOe0mzJu3l2K6PWhNsnNC/aGfPx3emFGI8mYIo/Tj1ffrRd2Uj5PPBxsQ9Hjtzp4p0OfDrmDQLxlfwhqOMrfKkH5Eu2BYzLfiEfHhhuH/OF2MnsbNUcKKLlSyikSKtuE9w4SU6 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000001, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: From: Ye Bin In commit 8b57b11cca88 ("pcpcntrs: fix dying cpu summation race") a race condition between a cpu dying and percpu_counter_sum() iterating online CPUs was identified. Acctually, there's the same race condition between a cpu dying and __percpu_counter_compare(). Here, use 'num_online_cpus()' for quick judgment. But 'num_online_cpus()' will be decreased before call 'percpu_counter_cpu_dead()', then maybe return incorrect result. To solve above issue, also need to add dying CPUs count when do quick judgment in __percpu_counter_compare(). Signed-off-by: Ye Bin --- lib/percpu_counter.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/percpu_counter.c b/lib/percpu_counter.c index 5004463c4f9f..399840cb0012 100644 --- a/lib/percpu_counter.c +++ b/lib/percpu_counter.c @@ -227,6 +227,15 @@ static int percpu_counter_cpu_dead(unsigned int cpu) return 0; } +static __always_inline unsigned int num_count_cpus(void) +{ +#ifdef CONFIG_HOTPLUG_CPU + return (num_online_cpus() + num_dying_cpus()); +#else + return num_online_cpus(); +#endif +} + /* * Compare counter against given value. * Return 1 if greater, 0 if equal and -1 if less @@ -237,7 +246,7 @@ int __percpu_counter_compare(struct percpu_counter *fbc, s64 rhs, s32 batch) count = percpu_counter_read(fbc); /* Check to see if rough count will be sufficient for comparison */ - if (abs(count - rhs) > (batch * num_online_cpus())) { + if (abs(count - rhs) > (batch * num_count_cpus())) { if (count > rhs) return 1; else -- 2.31.1