From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
To: Yicong Yang <yangyicong@huawei.com>
Cc: <catalin.marinas@arm.com>, <will@kernel.org>,
<sudeep.holla@arm.com>, <tglx@linutronix.de>,
<peterz@infradead.org>, <mpe@ellerman.id.au>,
<linux-arm-kernel@lists.infradead.org>, <mingo@redhat.com>,
<bp@alien8.de>, <dave.hansen@linux.intel.com>,
<pierre.gondois@arm.com>, <dietmar.eggemann@arm.com>,
<yangyicong@hisilicon.com>, <linuxppc-dev@lists.ozlabs.org>,
<x86@kernel.org>, <linux-kernel@vger.kernel.org>,
<morten.rasmussen@arm.com>, <msuchanek@suse.de>,
<gregkh@linuxfoundation.org>, <rafael@kernel.org>,
<prime.zeng@hisilicon.com>, <linuxarm@huawei.com>,
<xuwei5@huawei.com>, <guohanjun@huawei.com>
Subject: Re: [PATCH v10 1/4] cpu/SMT: Provide a default topology_is_primary_thread()
Date: Mon, 23 Dec 2024 16:34:48 +0000 [thread overview]
Message-ID: <20241223163448.00004354@huawei.com> (raw)
In-Reply-To: <a5690fee-3019-f26c-8bad-1d95e388e877@huawei.com>
On Fri, 20 Dec 2024 15:59:27 +0800
Yicong Yang <yangyicong@huawei.com> wrote:
> On 2024/12/20 15:53, Yicong Yang wrote:
> > From: Yicong Yang <yangyicong@hisilicon.com>
> >
> > Currently if architectures want to support HOTPLUG_SMT they need to
> > provide a topology_is_primary_thread() telling the framework which
> > thread in the SMT cannot offline. However arm64 doesn't have a
> > restriction on which thread in the SMT cannot offline, a simplest
> > choice is that just make 1st thread as the "primary" thread. So
> > just make this as the default implementation in the framework and
> > let architectures like x86 that have special primary thread to
> > override this function (which they've already done).
> >
> > There's no need to provide a stub function if !CONFIG_SMP or
> > !CONFIG_HOTPLUG_SMP. In such case the testing CPU is already
> > the 1st CPU in the SMT so it's always the primary thread.
> >
> > Signed-off-by: Yicong Yang <yangyicong@hisilicon.com>
> > ---
> > As questioned in v9 [1] whether this works on architectures not using
> > CONFIG_GENERIC_ARCH_TOPOLOGY, hacked on LoongArch VM and this also works.
> > Architectures should use this on their own situation.
> > [1] https://lore.kernel.org/linux-arm-kernel/427bd639-33c3-47e4-9e83-68c428eb1a7d@arm.com/
> >
> > [root@localhost smt]# uname -m
> > loongarch64
> > [root@localhost smt]# pwd
> > /sys/devices/system/cpu/smt
> > [root@localhost smt]# cat ../possible
> > 0-3
> > [root@localhost smt]# cat ../online
> > 0-3
> > [root@localhost smt]# cat control
> > on
> > [root@localhost smt]# echo off > control
> > [root@localhost smt]# cat control
> > off
> > [root@localhost smt]# cat ../online
> > 0,2
> > [root@localhost smt]# echo on > control
> > [root@localhost smt]# cat control
> > on
> > [root@localhost smt]# cat ../online
> > 0-3
>
> Tested with below code using the topology_is_primary_thread() introduced
> in this patch. Tested on an ACPI-based QEMU VM emulating SMT2.
Nice bit of testing.
Given it all seems fine. FWIW
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
(for original patch, not the longarch one!)
>
> Subject: [PATCH] LoongArch: Support HOTPLUG_SMT on ACPI-based system
>
> Support HOTPLUG_SMT on ACPI-based system using generic
> topology_is_primary_thread().
>
> Signed-off-by: Yicong Yang <yangyicong@hisilicon.com>
> ---
> arch/loongarch/Kconfig | 1 +
> arch/loongarch/kernel/acpi.c | 26 ++++++++++++++++++++++++--
> 2 files changed, 25 insertions(+), 2 deletions(-)
>
> diff --git a/arch/loongarch/Kconfig b/arch/loongarch/Kconfig
> index dae3a9104ca6..bed1b0640b97 100644
> --- a/arch/loongarch/Kconfig
> +++ b/arch/loongarch/Kconfig
> @@ -172,6 +172,7 @@ config LOONGARCH
> select HAVE_SYSCALL_TRACEPOINTS
> select HAVE_TIF_NOHZ
> select HAVE_VIRT_CPU_ACCOUNTING_GEN if !SMP
> + select HOTPLUG_SMT if HOTPLUG_CPU
> select IRQ_FORCED_THREADING
> select IRQ_LOONGARCH_CPU
> select LOCK_MM_AND_FIND_VMA
> diff --git a/arch/loongarch/kernel/acpi.c b/arch/loongarch/kernel/acpi.c
> index 382a09a7152c..e642b0de57e7 100644
> --- a/arch/loongarch/kernel/acpi.c
> +++ b/arch/loongarch/kernel/acpi.c
> @@ -15,9 +15,11 @@
> #include <linux/memblock.h>
> #include <linux/of_fdt.h>
> #include <linux/serial_core.h>
> +#include <linux/xarray.h>
> #include <asm/io.h>
> #include <asm/numa.h>
> #include <asm/loongson.h>
> +#include <linux/cpu_smt.h>
>
> int acpi_disabled;
> EXPORT_SYMBOL(acpi_disabled);
> @@ -175,8 +177,12 @@ int pptt_enabled;
>
> int __init parse_acpi_topology(void)
> {
> + int thread_num, max_smt_thread_num = 1;
> + struct xarray core_threads;
> int cpu, topology_id;
> + void *entry;
>
> + xa_init(&core_threads);
> for_each_possible_cpu(cpu) {
> topology_id = find_acpi_cpu_topology(cpu, 0);
> if (topology_id < 0) {
> @@ -184,19 +190,35 @@ int __init parse_acpi_topology(void)
> return -ENOENT;
> }
>
> - if (acpi_pptt_cpu_is_thread(cpu) <= 0)
> + if (acpi_pptt_cpu_is_thread(cpu) <= 0) {
> cpu_data[cpu].core = topology_id;
> - else {
> + } else {
> topology_id = find_acpi_cpu_topology(cpu, 1);
> if (topology_id < 0)
> return -ENOENT;
>
> cpu_data[cpu].core = topology_id;
> +
> + entry = xa_load(&core_threads, topology_id);
> + if (!entry) {
> + xa_store(&core_threads, topology_id,
> + xa_mk_value(1), GFP_KERNEL);
> + } else {
> + thread_num = xa_to_value(entry);
> + thread_num++;
> + xa_store(&core_threads, topology_id,
> + xa_mk_value(thread_num), GFP_KERNEL);
> +
> + if (thread_num > max_smt_thread_num)
> + max_smt_thread_num = thread_num;
> + }
> }
> }
>
> pptt_enabled = 1;
>
> + cpu_smt_set_num_threads(max_smt_thread_num, max_smt_thread_num);
> + xa_destroy(&core_threads);
> return 0;
> }
>
next prev parent reply other threads:[~2024-12-23 17:51 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-20 7:53 [PATCH v10 0/4] Support SMT control on arm64 Yicong Yang
2024-12-20 7:53 ` [PATCH v10 1/4] cpu/SMT: Provide a default topology_is_primary_thread() Yicong Yang
2024-12-20 7:59 ` Yicong Yang
2024-12-23 16:34 ` Jonathan Cameron [this message]
2024-12-24 12:15 ` Yicong Yang
2024-12-26 7:18 ` Shrikanth Hegde
2024-12-26 11:36 ` Yicong Yang
2024-12-20 7:53 ` [PATCH v10 2/4] arch_topology: Support SMT control for OF based system Yicong Yang
2024-12-23 16:33 ` Jonathan Cameron
2024-12-24 12:23 ` Yicong Yang
2024-12-20 7:53 ` [PATCH v10 3/4] arm64: topology: Support SMT control on ACPI " Yicong Yang
2024-12-23 16:40 ` Jonathan Cameron
2024-12-24 12:30 ` Yicong Yang
2024-12-20 7:53 ` [PATCH v10 4/4] arm64: Kconfig: Enable HOTPLUG_SMT Yicong Yang
2024-12-23 16:40 ` Jonathan Cameron
2024-12-26 9:23 ` [PATCH v10 0/4] Support SMT control on arm64 Shrikanth Hegde
2024-12-26 11:50 ` Yicong Yang
2024-12-26 12:28 ` Shrikanth Hegde
2024-12-27 7:16 ` Yicong Yang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241223163448.00004354@huawei.com \
--to=jonathan.cameron@huawei.com \
--cc=bp@alien8.de \
--cc=catalin.marinas@arm.com \
--cc=dave.hansen@linux.intel.com \
--cc=dietmar.eggemann@arm.com \
--cc=gregkh@linuxfoundation.org \
--cc=guohanjun@huawei.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxarm@huawei.com \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mingo@redhat.com \
--cc=morten.rasmussen@arm.com \
--cc=mpe@ellerman.id.au \
--cc=msuchanek@suse.de \
--cc=peterz@infradead.org \
--cc=pierre.gondois@arm.com \
--cc=prime.zeng@hisilicon.com \
--cc=rafael@kernel.org \
--cc=sudeep.holla@arm.com \
--cc=tglx@linutronix.de \
--cc=will@kernel.org \
--cc=x86@kernel.org \
--cc=xuwei5@huawei.com \
--cc=yangyicong@hisilicon.com \
--cc=yangyicong@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.