From patchwork Thu Apr 6 01:56:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: yebin X-Patchwork-Id: 13202793 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 C8450C761A6 for ; Thu, 6 Apr 2023 01:57:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BB9036B007E; Wed, 5 Apr 2023 21:57:09 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B11616B0082; 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 7FD316B0080; 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 5A9926B007D for ; Wed, 5 Apr 2023 21:57:09 -0400 (EDT) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 206FCAC175 for ; Thu, 6 Apr 2023 01:57:09 +0000 (UTC) X-FDA: 80649303378.13.F6D416C Received: from dggsgout11.his.huawei.com (unknown [45.249.212.51]) by imf10.hostedemail.com (Postfix) with ESMTP id 32629C000E for ; Thu, 6 Apr 2023 01:57:03 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=none; spf=pass (imf10.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=GN+sUs27ysqTC3ebxS5dgKiSF9/pny2Yx3svyi9Q5KY=; b=wH0PZLEaOjUFOsATulubZ3MIMfX9SdJzRWpGG3NixTKIKtuxmEo0VCNBlGMVEt/vHZLBFy +ticboJuwsqhETcICRGx+PyUzBLYdUp3bNXgjVFI+95tUAvmomsUKl0LL62CNnwfwrJ5Lz D5BX8+i0gMJyW8U3Qumx2CHp5RoZqOU= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=none; spf=pass (imf10.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=EYGyVLqxUVOOfFOK9lVIwaWHxEOeztGDdcS20xRHEUn5tzp2NAqmsKr1tDZWqf39+Cuqlv ywpTvxNINNTux0NU5owfiOPG1E3AFplRASByRXeQPSzfaC5kZHMNmX8UaaieMkx6yeNeBA MQ5JlPqCCzhjAmhRn4oE37/gN98SFR4= Received: from mail02.huawei.com (unknown [172.30.67.169]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4PsPkd4jYbz4f3k6R for ; Thu, 6 Apr 2023 09:56:57 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.127.227]) by APP3 (Coremail) with SMTP id _Ch0CgCnUyHoJi5kX936GA--.31319S5; 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 1/2] cpu/hotplug: introduce 'num_dying_cpus' to get dying CPUs count Date: Thu, 6 Apr 2023 09:56:28 +0800 Message-Id: <20230406015629.1804722-2-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 X-CM-TRANSID: _Ch0CgCnUyHoJi5kX936GA--.31319S5 X-Coremail-Antispam: 1UD129KBjvJXoW7WFy8ZFykGrW5KFWDCFy5CFg_yoW5JF4rpr 4UGFW5trWUAFyIga9Yyws8Xr1F9wn5Crn5Gay29F13JFy3Ja4vq3WkuFy5Jr15WrZ3ur1a vrZ0qr409a15Xa7anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUBE14x267AKxVW5JVWrJwAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_Jr4l82xGYIkIc2 x26xkF7I0E14v26r4j6ryUM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0 Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJw A2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq3wAS 0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2 IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_Gr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0 Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2IErcIFxwACI402YVCY1x02628vn2kIc2 xKxwCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v2 6r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkGc2 Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7CjxVAFwI0_ Gr0_Cr1lIxAIcVCF04k26cxKx2IYs7xG6r1j6r1xMIIF0xvEx4A2jsIE14v26r1j6r4UMI IF0xvEx4A2jsIEc7CjxVAFwI0_Gr0_Gr1UYxBIdaVFxhVjvjDU0xZFpf9x0JU2_M3UUUUU = X-CM-SenderInfo: p1hex046kxt4xhlfz01xgou0bp/ X-CFilter-Loop: Reflected X-Stat-Signature: 3r9y6jkga1inasgehm3xhm41gez61t4k X-Rspam-User: X-Rspamd-Queue-Id: 32629C000E X-Rspamd-Server: rspam06 X-HE-Tag: 1680746223-548127 X-HE-Meta: U2FsdGVkX18XRIzjzXps57AAKYl8drylqrnEs1y69W3j4/yEiGK1SWrobc/vmdF6miewFqK1TtxSxtKp7rFYMik5JELJb93dyq2TZa7Y9myR1UTU27gcC4Je9DB36yCkcd1tbQsH/U1UskppWjuwc7IYSouT1OLfekdQjdwaoMhw7yxf/nGslIhJ1GTBD6dS8tLgXd5HUVQkMbT+nfAt9iX5XLqkHjWZf1JD675TBcYZUxgKYX3k3j2Z6v9fyoLdclEPtXbKld1Rcp3Ko3nt2KkBgSVAPTAlczoleyrzgW5w9QXny2Jw7+NG9aepcprBl2eeSQ9cERknBiANUc4bTO3Bm+YEvb4LfWMM3nDAzFSjSoMT7gxOCL3lUnfC92RYHjabx9PmFwTZ8mAhJnZIzMXzyjED9r/4XxIGTEFabHOkOal6xhOw4k0H1zYYDo+u1ID6Ix9xh4Yukl6anBRsNpp3gDUPTCVk5Ua2Ur7k31lY/gQ5Rvmy2tiYDzFBqvCIeOi/CbhnyG/KqwOrhXXTaxc80gm/69HBfx6H7yIZZbB1f1rfOlHVZIfIR77CcOWpst3ERYLBDZSEscqi0nwGalZjq0Qzprl6Vb0isArd3EAEz6oD5gqP9TUGe1/mswSKvHaRqKZ4dX4CLzMp5CU60DdzHTgSjnNnCPr83quACM85HMgQ4vk0Vi0kUibLRSA3INiYxehHgtGeT+tqZ5vHTYe6bcVfvYfBd/PGktEzwgTnMEFEwxvxDvsZbbAwCHvzgrmrK/XPIV8YcfxB2kk27XkgYUcZ0Dq4EcpYpNUvt+CloFvRABCWbYlKUDyoft39ygSO3CkGoeyb/tybEO4MWgYmWaFhUlV/jcOX1to+c7SAN51lUs33Vh7WLfjcx9Zq5Gjc9yXoJSlq0jgcsE3I7k5i1e+Lqv2l3GIdRxrsEoiPfC5tgqoJLNE+ggtk+zZGOav+iXUNoqM92JzskS4 Yyqy+2LO cDAWHmcfICBvq6rwaytNEse923rzvzelqLgP4qz4/wI6S/9Hb2rp/RePNqgQw+wGMZp3kvxrq8f0gFKMIxNgTaKnLfwfRd1WI4VyG2xMAJXK2ZkdKdoXiKsnIbNWuxk1Ds5e/d0Pf8DABaelgher6BY13mzayiiQ0J6qlvc35SPdc1d8LuH4P13KjWQTeGSvg9RrdPe9OYaK40DSWwZ/IXqk6RL47GgYSvS2AmQ19CE2m0UrNwztuz7386yL6xDx/suQ89KfgH5LROeO1S7S8F2+v7knYgP9fKC9MGHo/eSIiseBJkTzpgJIux2no3zQ9VT2A X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: From: Ye Bin Introduce '__num_dying_cpus' variable to cache the number of dying CPUs in the core and just return the cached variable. Signed-off-by: Ye Bin --- include/linux/cpumask.h | 20 ++++++++++++++++---- kernel/cpu.c | 2 ++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h index 2a61ddcf8321..8127fd598f51 100644 --- a/include/linux/cpumask.h +++ b/include/linux/cpumask.h @@ -135,6 +135,8 @@ extern struct cpumask __cpu_dying_mask; extern atomic_t __num_online_cpus; +extern atomic_t __num_dying_cpus; + extern cpumask_t cpus_booted_once_mask; static __always_inline void cpu_max_bits_warn(unsigned int cpu, unsigned int bits) @@ -1018,10 +1020,14 @@ set_cpu_active(unsigned int cpu, bool active) static __always_inline void set_cpu_dying(unsigned int cpu, bool dying) { - if (dying) - cpumask_set_cpu(cpu, &__cpu_dying_mask); - else - cpumask_clear_cpu(cpu, &__cpu_dying_mask); + if (dying) { + if (!cpumask_test_and_set_cpu(cpu, &__cpu_dying_mask)) + atomic_inc(&__num_dying_cpus); + } + else { + if (cpumask_test_and_clear_cpu(cpu, &__cpu_dying_mask)) + atomic_dec(&__num_dying_cpus); + } } /** @@ -1073,6 +1079,11 @@ static __always_inline unsigned int num_online_cpus(void) { return arch_atomic_read(&__num_online_cpus); } + +static __always_inline unsigned int num_dying_cpus(void) +{ + return arch_atomic_read(&__num_dying_cpus); +} #define num_possible_cpus() cpumask_weight(cpu_possible_mask) #define num_present_cpus() cpumask_weight(cpu_present_mask) #define num_active_cpus() cpumask_weight(cpu_active_mask) @@ -1108,6 +1119,7 @@ static __always_inline bool cpu_dying(unsigned int cpu) #define num_possible_cpus() 1U #define num_present_cpus() 1U #define num_active_cpus() 1U +#define num_dying_cpus() 0U static __always_inline bool cpu_online(unsigned int cpu) { diff --git a/kernel/cpu.c b/kernel/cpu.c index f4a2c5845bcb..1c96c04cb259 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c @@ -2662,6 +2662,8 @@ EXPORT_SYMBOL(__cpu_dying_mask); atomic_t __num_online_cpus __read_mostly; EXPORT_SYMBOL(__num_online_cpus); +atomic_t __num_dying_cpus __read_mostly; + void init_cpu_present(const struct cpumask *src) { cpumask_copy(&__cpu_present_mask, src);