public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/4] Support SMT control on arm64
@ 2023-11-14  4:01 Yicong Yang
  2023-11-14  4:01 ` [PATCH v3 1/4] arch_topology: Support basic SMT control for the driver Yicong Yang
                   ` (3 more replies)
  0 siblings, 4 replies; 10+ messages in thread
From: Yicong Yang @ 2023-11-14  4:01 UTC (permalink / raw)
  To: catalin.marinas, will, sudeep.holla, linux-arm-kernel
  Cc: dietmar.eggemann, gregkh, rafael, jonathan.cameron, prime.zeng,
	linuxarm, yangyicong, linux-kernel

From: Yicong Yang <yangyicong@hisilicon.com>

The core CPU control framework supports runtime SMT control which
is not yet supported on arm64. Besides the general vulnerabilities
concerns we want this runtime control on our arm64 server for:

- better single CPU performance in some cases
- saving overall power consumption

This patchset implements it in the following aspects:

- implements the basic support in arch_topology driver
- support retrieve SMT thread number on OF based system
- support retrieve SMT thread number on ACPI based system
- select HOTPLUG_SMT for arm64

Tests has been done on our real ACPI based arm64 server and on
ACPI/OF based QEMU VMs.

The patchset is based on v6.7-rc1.

Change since v2:
- Detect SMT thread number at topology build from ACPI/DT, avoid looping CPUs
- Split patches into ACPI/OF/arch_topology path and enable the kconfig for arm64
Link: https://lore.kernel.org/linux-arm-kernel/20231010115335.13862-1-yangyicong@huawei.com/

Yicong Yang (4):
  arch_topology: Support basic SMT control for the driver
  arch_topology: Support SMT control for OF based system
  arm64: topology: Support SMT control on ACPI based system
  arm64: Kconfig: Enable HOTPLUG_SMT

 arch/arm64/Kconfig            |  1 +
 arch/arm64/kernel/topology.c  | 23 +++++++++++++++++++++
 drivers/base/arch_topology.c  | 39 +++++++++++++++++++++++++++++++++++
 include/linux/arch_topology.h |  9 ++++++++
 4 files changed, 72 insertions(+)

-- 
2.24.0


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v3 1/4] arch_topology: Support basic SMT control for the driver
  2023-11-14  4:01 [PATCH v3 0/4] Support SMT control on arm64 Yicong Yang
@ 2023-11-14  4:01 ` Yicong Yang
  2023-11-14 13:42   ` kernel test robot
  2023-11-15 15:23   ` kernel test robot
  2023-11-14  4:01 ` [PATCH v3 2/4] arch_topology: Support SMT control for OF based system Yicong Yang
                   ` (2 subsequent siblings)
  3 siblings, 2 replies; 10+ messages in thread
From: Yicong Yang @ 2023-11-14  4:01 UTC (permalink / raw)
  To: catalin.marinas, will, sudeep.holla, linux-arm-kernel
  Cc: dietmar.eggemann, gregkh, rafael, jonathan.cameron, prime.zeng,
	linuxarm, yangyicong, linux-kernel

From: Yicong Yang <yangyicong@hisilicon.com>

The core CPU control framework supports runtime SMT control which
is not yet supported by arch_topology driver and thus arch_topology
based architectures. This patch implements it in the following aspects:

- implement topology_is_primary_thread() to indicate the primary thread,
  required by the framework
- record the allowed setting of SMT thread number by
  topology_smt_set_num_threads()
- update the SMT thread number for the framework after the topology
  enumerated on arm64

For disabling SMT we'll offline all the secondary threads and
only leave the primary thread. Since we don't have restriction
for primary thread selection, the first thread is chosen as the
primary thread in this implementation.

This patch only implements the basic support for SMT control, which
needs to collabrate with ACPI/OF based topology building to fully
enable the feature. The SMT control will be enabled unless the
correct SMT thread number is set and HOTPLUG_SMT kconfig is selected.

Signed-off-by: Yicong Yang <yangyicong@hisilicon.com>
---
 drivers/base/arch_topology.c  | 32 ++++++++++++++++++++++++++++++++
 include/linux/arch_topology.h |  9 +++++++++
 2 files changed, 41 insertions(+)

diff --git a/drivers/base/arch_topology.c b/drivers/base/arch_topology.c
index b741b5ba82bd..7fb91f41d66d 100644
--- a/drivers/base/arch_topology.c
+++ b/drivers/base/arch_topology.c
@@ -28,6 +28,9 @@ static struct cpumask scale_freq_counters_mask;
 static bool scale_freq_invariant;
 static DEFINE_PER_CPU(u32, freq_factor) = 1;
 
+/* Maximum threads number per-Core */
+static int topology_smt_num_threads = 1;
+
 static bool supports_scale_freq_counters(const struct cpumask *cpus)
 {
 	return cpumask_subset(cpus, &scale_freq_counters_mask);
@@ -729,6 +732,28 @@ const struct cpumask *cpu_clustergroup_mask(int cpu)
 	return &cpu_topology[cpu].cluster_sibling;
 }
 
+#ifdef CONFIG_HOTPLUG_SMT
+
+void __init topology_smt_set_num_threads(unsigned int num_threads)
+{
+	topology_smt_num_threads = num_threads;
+}
+
+/*
+ * On SMT Hotplug the primary thread of the SMT won't be disabled. For x86 they
+ * seem to have a primary thread for special purpose. For other arthitectures
+ * like arm64 there's no such restriction for a primary thread, so make the
+ * first thread in the SMT as the primary thread.
+ */
+bool topology_is_primary_thread(unsigned int cpu)
+{
+	if (cpu == cpumask_first(topology_sibling_cpumask(cpu)))
+		return true;
+
+	return false;
+}
+#endif
+
 void update_siblings_masks(unsigned int cpuid)
 {
 	struct cpu_topology *cpu_topo, *cpuid_topo = &cpu_topology[cpuid];
@@ -841,6 +866,13 @@ void __init init_cpu_topology(void)
 		reset_cpu_topology();
 	}
 
+	/*
+	 * By this stage we get to know whether we support SMT or not, update
+	 * the information for the core. We don't support
+	 * CONFIG_SMT_NUM_THREADS_DYNAMIC so make the max_threads == num_threads.
+	 */
+	cpu_smt_set_num_threads(topology_smt_num_threads, topology_smt_num_threads);
+
 	for_each_possible_cpu(cpu) {
 		ret = fetch_cache_info(cpu);
 		if (!ret)
diff --git a/include/linux/arch_topology.h b/include/linux/arch_topology.h
index a07b510e7dc5..574942a12ae1 100644
--- a/include/linux/arch_topology.h
+++ b/include/linux/arch_topology.h
@@ -92,6 +92,15 @@ void update_siblings_masks(unsigned int cpu);
 void remove_cpu_topology(unsigned int cpuid);
 void reset_cpu_topology(void);
 int parse_acpi_topology(void);
+
+#ifdef CONFIG_HOTPLUG_SMT
+bool topology_is_primary_thread(unsigned int cpu);
+void topology_smt_set_num_threads(unsigned int num_threads);
+#else
+static inline bool topology_is_primary_thread(unsigned int cpu) { return false; }
+static inline void topology_smt_set_num_threads(unsigned int num_threads) { }
+#endif
+
 #endif
 
 #endif /* _LINUX_ARCH_TOPOLOGY_H_ */
-- 
2.24.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v3 2/4] arch_topology: Support SMT control for OF based system
  2023-11-14  4:01 [PATCH v3 0/4] Support SMT control on arm64 Yicong Yang
  2023-11-14  4:01 ` [PATCH v3 1/4] arch_topology: Support basic SMT control for the driver Yicong Yang
@ 2023-11-14  4:01 ` Yicong Yang
  2023-11-14  4:01 ` [PATCH v3 3/4] arm64: topology: Support SMT control on ACPI " Yicong Yang
  2023-11-14  4:01 ` [PATCH v3 4/4] arm64: Kconfig: Enable HOTPLUG_SMT Yicong Yang
  3 siblings, 0 replies; 10+ messages in thread
From: Yicong Yang @ 2023-11-14  4:01 UTC (permalink / raw)
  To: catalin.marinas, will, sudeep.holla, linux-arm-kernel
  Cc: dietmar.eggemann, gregkh, rafael, jonathan.cameron, prime.zeng,
	linuxarm, yangyicong, linux-kernel

From: Yicong Yang <yangyicong@hisilicon.com>

On building the topology from the devicetree, we've already
gotten the SMT thread number of each core. Update the largest
SMT thread number to enable the SMT control.

Signed-off-by: Yicong Yang <yangyicong@hisilicon.com>
---
 drivers/base/arch_topology.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/base/arch_topology.c b/drivers/base/arch_topology.c
index 7fb91f41d66d..02dc0266cbac 100644
--- a/drivers/base/arch_topology.c
+++ b/drivers/base/arch_topology.c
@@ -529,6 +529,13 @@ static int __init parse_core(struct device_node *core, int package_id,
 		i++;
 	} while (t);
 
+	/*
+	 * We've already gotten threads number in this core, update the SMT
+	 * threads number when necessary.
+	 */
+	if (i > topology_smt_num_threads)
+		topology_smt_set_num_threads(i);
+
 	cpu = get_cpu_for_node(core);
 	if (cpu >= 0) {
 		if (!leaf) {
-- 
2.24.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v3 3/4] arm64: topology: Support SMT control on ACPI based system
  2023-11-14  4:01 [PATCH v3 0/4] Support SMT control on arm64 Yicong Yang
  2023-11-14  4:01 ` [PATCH v3 1/4] arch_topology: Support basic SMT control for the driver Yicong Yang
  2023-11-14  4:01 ` [PATCH v3 2/4] arch_topology: Support SMT control for OF based system Yicong Yang
@ 2023-11-14  4:01 ` Yicong Yang
  2023-11-14  4:01 ` [PATCH v3 4/4] arm64: Kconfig: Enable HOTPLUG_SMT Yicong Yang
  3 siblings, 0 replies; 10+ messages in thread
From: Yicong Yang @ 2023-11-14  4:01 UTC (permalink / raw)
  To: catalin.marinas, will, sudeep.holla, linux-arm-kernel
  Cc: dietmar.eggemann, gregkh, rafael, jonathan.cameron, prime.zeng,
	linuxarm, yangyicong, linux-kernel

From: Yicong Yang <yangyicong@hisilicon.com>

For ACPI we'll build the topology from PPTT and we cannot directly
get the SMT number of each core. Instead using a temporary xarray
to record the SMT number of each core when building the topology
and we can know the largest SMT number in the system. Then we can
notify the arch_topology for supporting SMT control.

Signed-off-by: Yicong Yang <yangyicong@hisilicon.com>
---
 arch/arm64/kernel/topology.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/arch/arm64/kernel/topology.c b/arch/arm64/kernel/topology.c
index 817d788cd866..0dc360c32ec8 100644
--- a/arch/arm64/kernel/topology.c
+++ b/arch/arm64/kernel/topology.c
@@ -17,6 +17,7 @@
 #include <linux/cpufreq.h>
 #include <linux/init.h>
 #include <linux/percpu.h>
+#include <linux/xarray.h>
 
 #include <asm/cpu.h>
 #include <asm/cputype.h>
@@ -43,11 +44,16 @@ static bool __init acpi_cpu_is_threaded(int cpu)
  */
 int __init parse_acpi_topology(void)
 {
+	int thread_num, max_smt_thread_num = 1;
+	struct xarray core_threads;
 	int cpu, topology_id;
+	void *entry;
 
 	if (acpi_disabled)
 		return 0;
 
+	xa_init(&core_threads);
+
 	for_each_possible_cpu(cpu) {
 		topology_id = find_acpi_cpu_topology(cpu, 0);
 		if (topology_id < 0)
@@ -57,6 +63,20 @@ int __init parse_acpi_topology(void)
 			cpu_topology[cpu].thread_id = topology_id;
 			topology_id = find_acpi_cpu_topology(cpu, 1);
 			cpu_topology[cpu].core_id   = 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;
+			}
 		} else {
 			cpu_topology[cpu].thread_id  = -1;
 			cpu_topology[cpu].core_id    = topology_id;
@@ -67,6 +87,9 @@ int __init parse_acpi_topology(void)
 		cpu_topology[cpu].package_id = topology_id;
 	}
 
+	topology_smt_set_num_threads(max_smt_thread_num);
+
+	xa_destroy(&core_threads);
 	return 0;
 }
 #endif
-- 
2.24.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v3 4/4] arm64: Kconfig: Enable HOTPLUG_SMT
  2023-11-14  4:01 [PATCH v3 0/4] Support SMT control on arm64 Yicong Yang
                   ` (2 preceding siblings ...)
  2023-11-14  4:01 ` [PATCH v3 3/4] arm64: topology: Support SMT control on ACPI " Yicong Yang
@ 2023-11-14  4:01 ` Yicong Yang
  2023-11-16  4:59   ` kernel test robot
  3 siblings, 1 reply; 10+ messages in thread
From: Yicong Yang @ 2023-11-14  4:01 UTC (permalink / raw)
  To: catalin.marinas, will, sudeep.holla, linux-arm-kernel
  Cc: dietmar.eggemann, gregkh, rafael, jonathan.cameron, prime.zeng,
	linuxarm, yangyicong, linux-kernel

From: Yicong Yang <yangyicong@hisilicon.com>

Enable HOTPLUG_SMT for SMT control.

Signed-off-by: Yicong Yang <yangyicong@hisilicon.com>
---
 arch/arm64/Kconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index 7b071a00425d..002bcde32575 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -233,6 +233,7 @@ config ARM64
 	select HAVE_KRETPROBES
 	select HAVE_GENERIC_VDSO
 	select HOTPLUG_CORE_SYNC_DEAD if HOTPLUG_CPU
+	select HOTPLUG_SMT if SMP
 	select IRQ_DOMAIN
 	select IRQ_FORCED_THREADING
 	select KASAN_VMALLOC if KASAN
-- 
2.24.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 1/4] arch_topology: Support basic SMT control for the driver
  2023-11-14  4:01 ` [PATCH v3 1/4] arch_topology: Support basic SMT control for the driver Yicong Yang
@ 2023-11-14 13:42   ` kernel test robot
  2023-11-15 15:23   ` kernel test robot
  1 sibling, 0 replies; 10+ messages in thread
From: kernel test robot @ 2023-11-14 13:42 UTC (permalink / raw)
  To: Yicong Yang, catalin.marinas, will, sudeep.holla,
	linux-arm-kernel
  Cc: oe-kbuild-all, dietmar.eggemann, gregkh, rafael, jonathan.cameron,
	prime.zeng, linuxarm, yangyicong, linux-kernel

Hi Yicong,

kernel test robot noticed the following build warnings:

[auto build test WARNING on arm64/for-next/core]
[also build test WARNING on driver-core/driver-core-testing driver-core/driver-core-next driver-core/driver-core-linus arm/for-next kvmarm/next soc/for-next linus/master arm/fixes v6.7-rc1 next-20231114]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Yicong-Yang/arch_topology-Support-basic-SMT-control-for-the-driver/20231114-120544
base:   https://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git for-next/core
patch link:    https://lore.kernel.org/r/20231114040110.54590-2-yangyicong%40huawei.com
patch subject: [PATCH v3 1/4] arch_topology: Support basic SMT control for the driver
config: parisc-generic-64bit_defconfig (https://download.01.org/0day-ci/archive/20231114/202311142157.B3tyngmI-lkp@intel.com/config)
compiler: hppa-linux-gcc (GCC) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231114/202311142157.B3tyngmI-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202311142157.B3tyngmI-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> drivers/base/arch_topology.c:32:12: warning: 'topology_smt_num_threads' defined but not used [-Wunused-variable]
      32 | static int topology_smt_num_threads = 1;
         |            ^~~~~~~~~~~~~~~~~~~~~~~~


vim +/topology_smt_num_threads +32 drivers/base/arch_topology.c

    30	
    31	/* Maximum threads number per-Core */
  > 32	static int topology_smt_num_threads = 1;
    33	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 1/4] arch_topology: Support basic SMT control for the driver
  2023-11-14  4:01 ` [PATCH v3 1/4] arch_topology: Support basic SMT control for the driver Yicong Yang
  2023-11-14 13:42   ` kernel test robot
@ 2023-11-15 15:23   ` kernel test robot
  2023-11-20  3:29     ` Yicong Yang
  1 sibling, 1 reply; 10+ messages in thread
From: kernel test robot @ 2023-11-15 15:23 UTC (permalink / raw)
  To: Yicong Yang, catalin.marinas, will, sudeep.holla,
	linux-arm-kernel
  Cc: llvm, oe-kbuild-all, dietmar.eggemann, gregkh, rafael,
	jonathan.cameron, prime.zeng, linuxarm, yangyicong, linux-kernel

Hi Yicong,

kernel test robot noticed the following build warnings:

[auto build test WARNING on arm64/for-next/core]
[also build test WARNING on driver-core/driver-core-testing driver-core/driver-core-next driver-core/driver-core-linus arm/for-next kvmarm/next soc/for-next linus/master arm/fixes v6.7-rc1 next-20231115]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Yicong-Yang/arch_topology-Support-basic-SMT-control-for-the-driver/20231114-120544
base:   https://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git for-next/core
patch link:    https://lore.kernel.org/r/20231114040110.54590-2-yangyicong%40huawei.com
patch subject: [PATCH v3 1/4] arch_topology: Support basic SMT control for the driver
config: arm-socfpga_defconfig (https://download.01.org/0day-ci/archive/20231115/202311152356.OWWDpFRB-lkp@intel.com/config)
compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231115/202311152356.OWWDpFRB-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202311152356.OWWDpFRB-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> drivers/base/arch_topology.c:32:12: warning: unused variable 'topology_smt_num_threads' [-Wunused-variable]
      32 | static int topology_smt_num_threads = 1;
         |            ^
   1 warning generated.


vim +/topology_smt_num_threads +32 drivers/base/arch_topology.c

    30	
    31	/* Maximum threads number per-Core */
  > 32	static int topology_smt_num_threads = 1;
    33	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 4/4] arm64: Kconfig: Enable HOTPLUG_SMT
  2023-11-14  4:01 ` [PATCH v3 4/4] arm64: Kconfig: Enable HOTPLUG_SMT Yicong Yang
@ 2023-11-16  4:59   ` kernel test robot
  2023-11-20  3:27     ` Yicong Yang
  0 siblings, 1 reply; 10+ messages in thread
From: kernel test robot @ 2023-11-16  4:59 UTC (permalink / raw)
  To: Yicong Yang, catalin.marinas, will, sudeep.holla,
	linux-arm-kernel
  Cc: oe-kbuild-all, dietmar.eggemann, gregkh, rafael, jonathan.cameron,
	prime.zeng, linuxarm, yangyicong, linux-kernel

Hi Yicong,

kernel test robot noticed the following build errors:

[auto build test ERROR on arm64/for-next/core]
[also build test ERROR on driver-core/driver-core-testing driver-core/driver-core-next driver-core/driver-core-linus arm/for-next kvmarm/next soc/for-next linus/master arm/fixes v6.7-rc1 next-20231115]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Yicong-Yang/arch_topology-Support-basic-SMT-control-for-the-driver/20231114-120544
base:   https://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git for-next/core
patch link:    https://lore.kernel.org/r/20231114040110.54590-5-yangyicong%40huawei.com
patch subject: [PATCH v3 4/4] arm64: Kconfig: Enable HOTPLUG_SMT
config: arm64-randconfig-002-20231115 (https://download.01.org/0day-ci/archive/20231115/202311151900.K9xc6Xqz-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231115/202311151900.K9xc6Xqz-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <yujie.liu@intel.com>
| Closes: https://lore.kernel.org/r/202311151900.K9xc6Xqz-lkp@intel.com/

All errors (new ones prefixed by >>):

   kernel/cpu.c: In function 'cpuhp_smt_disable':
>> kernel/cpu.c:2687:23: error: implicit declaration of function 'cpu_down_maps_locked' [-Werror=implicit-function-declaration]
    2687 |                 ret = cpu_down_maps_locked(cpu, CPUHP_OFFLINE);
         |                       ^~~~~~~~~~~~~~~~~~~~
   cc1: some warnings being treated as errors


vim +/cpu_down_maps_locked +2687 kernel/cpu.c

dc8d37ed304eee Arnd Bergmann    2019-12-10  2672  
dc8d37ed304eee Arnd Bergmann    2019-12-10  2673  int cpuhp_smt_disable(enum cpuhp_smt_control ctrlval)
dc8d37ed304eee Arnd Bergmann    2019-12-10  2674  {
dc8d37ed304eee Arnd Bergmann    2019-12-10  2675  	int cpu, ret = 0;
dc8d37ed304eee Arnd Bergmann    2019-12-10  2676  
dc8d37ed304eee Arnd Bergmann    2019-12-10  2677  	cpu_maps_update_begin();
dc8d37ed304eee Arnd Bergmann    2019-12-10  2678  	for_each_online_cpu(cpu) {
dc8d37ed304eee Arnd Bergmann    2019-12-10  2679  		if (topology_is_primary_thread(cpu))
dc8d37ed304eee Arnd Bergmann    2019-12-10  2680  			continue;
38253464bc821d Michael Ellerman 2023-07-05  2681  		/*
38253464bc821d Michael Ellerman 2023-07-05  2682  		 * Disable can be called with CPU_SMT_ENABLED when changing
38253464bc821d Michael Ellerman 2023-07-05  2683  		 * from a higher to lower number of SMT threads per core.
38253464bc821d Michael Ellerman 2023-07-05  2684  		 */
38253464bc821d Michael Ellerman 2023-07-05  2685  		if (ctrlval == CPU_SMT_ENABLED && cpu_smt_thread_allowed(cpu))
38253464bc821d Michael Ellerman 2023-07-05  2686  			continue;
dc8d37ed304eee Arnd Bergmann    2019-12-10 @2687  		ret = cpu_down_maps_locked(cpu, CPUHP_OFFLINE);
dc8d37ed304eee Arnd Bergmann    2019-12-10  2688  		if (ret)
dc8d37ed304eee Arnd Bergmann    2019-12-10  2689  			break;
dc8d37ed304eee Arnd Bergmann    2019-12-10  2690  		/*
dc8d37ed304eee Arnd Bergmann    2019-12-10  2691  		 * As this needs to hold the cpu maps lock it's impossible
dc8d37ed304eee Arnd Bergmann    2019-12-10  2692  		 * to call device_offline() because that ends up calling
dc8d37ed304eee Arnd Bergmann    2019-12-10  2693  		 * cpu_down() which takes cpu maps lock. cpu maps lock
dc8d37ed304eee Arnd Bergmann    2019-12-10  2694  		 * needs to be held as this might race against in kernel
dc8d37ed304eee Arnd Bergmann    2019-12-10  2695  		 * abusers of the hotplug machinery (thermal management).
dc8d37ed304eee Arnd Bergmann    2019-12-10  2696  		 *
dc8d37ed304eee Arnd Bergmann    2019-12-10  2697  		 * So nothing would update device:offline state. That would
dc8d37ed304eee Arnd Bergmann    2019-12-10  2698  		 * leave the sysfs entry stale and prevent onlining after
dc8d37ed304eee Arnd Bergmann    2019-12-10  2699  		 * smt control has been changed to 'off' again. This is
dc8d37ed304eee Arnd Bergmann    2019-12-10  2700  		 * called under the sysfs hotplug lock, so it is properly
dc8d37ed304eee Arnd Bergmann    2019-12-10  2701  		 * serialized against the regular offline usage.
dc8d37ed304eee Arnd Bergmann    2019-12-10  2702  		 */
dc8d37ed304eee Arnd Bergmann    2019-12-10  2703  		cpuhp_offline_cpu_device(cpu);
dc8d37ed304eee Arnd Bergmann    2019-12-10  2704  	}
dc8d37ed304eee Arnd Bergmann    2019-12-10  2705  	if (!ret)
dc8d37ed304eee Arnd Bergmann    2019-12-10  2706  		cpu_smt_control = ctrlval;
dc8d37ed304eee Arnd Bergmann    2019-12-10  2707  	cpu_maps_update_done();
dc8d37ed304eee Arnd Bergmann    2019-12-10  2708  	return ret;
dc8d37ed304eee Arnd Bergmann    2019-12-10  2709  }
dc8d37ed304eee Arnd Bergmann    2019-12-10  2710  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 4/4] arm64: Kconfig: Enable HOTPLUG_SMT
  2023-11-16  4:59   ` kernel test robot
@ 2023-11-20  3:27     ` Yicong Yang
  0 siblings, 0 replies; 10+ messages in thread
From: Yicong Yang @ 2023-11-20  3:27 UTC (permalink / raw)
  To: kernel test robot, catalin.marinas, will, sudeep.holla,
	linux-arm-kernel
  Cc: yangyicong, oe-kbuild-all, dietmar.eggemann, gregkh, rafael,
	jonathan.cameron, prime.zeng, linuxarm, linux-kernel

On 2023/11/16 12:59, kernel test robot wrote:
> Hi Yicong,
> 
> kernel test robot noticed the following build errors:
> 
> [auto build test ERROR on arm64/for-next/core]
> [also build test ERROR on driver-core/driver-core-testing driver-core/driver-core-next driver-core/driver-core-linus arm/for-next kvmarm/next soc/for-next linus/master arm/fixes v6.7-rc1 next-20231115]
> [If your patch is applied to the wrong git tree, kindly drop us a note.
> And when submitting patch, we suggest to use '--base' as documented in
> https://git-scm.com/docs/git-format-patch#_base_tree_information]
> 
> url:    https://github.com/intel-lab-lkp/linux/commits/Yicong-Yang/arch_topology-Support-basic-SMT-control-for-the-driver/20231114-120544
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git for-next/core
> patch link:    https://lore.kernel.org/r/20231114040110.54590-5-yangyicong%40huawei.com
> patch subject: [PATCH v3 4/4] arm64: Kconfig: Enable HOTPLUG_SMT
> config: arm64-randconfig-002-20231115 (https://download.01.org/0day-ci/archive/20231115/202311151900.K9xc6Xqz-lkp@intel.com/config)
> compiler: aarch64-linux-gcc (GCC) 13.2.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231115/202311151900.K9xc6Xqz-lkp@intel.com/reproduce)
> 
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <yujie.liu@intel.com>
> | Closes: https://lore.kernel.org/r/202311151900.K9xc6Xqz-lkp@intel.com/
> 
> All errors (new ones prefixed by >>):
> 
>    kernel/cpu.c: In function 'cpuhp_smt_disable':
>>> kernel/cpu.c:2687:23: error: implicit declaration of function 'cpu_down_maps_locked' [-Werror=implicit-function-declaration]
>     2687 |                 ret = cpu_down_maps_locked(cpu, CPUHP_OFFLINE);
>          |                       ^~~~~~~~~~~~~~~~~~~~
>    cc1: some warnings being treated as errors
> 

cpu_down_maps_locked() is introduced by CONFIG_HOTPLUG_CPU, so CONFIG_HOTPLUG_SMT will need to depend
on CONFIG_HOTPLUG_CPU. Will add it.

> 
> vim +/cpu_down_maps_locked +2687 kernel/cpu.c
> 
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2672  
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2673  int cpuhp_smt_disable(enum cpuhp_smt_control ctrlval)
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2674  {
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2675  	int cpu, ret = 0;
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2676  
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2677  	cpu_maps_update_begin();
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2678  	for_each_online_cpu(cpu) {
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2679  		if (topology_is_primary_thread(cpu))
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2680  			continue;
> 38253464bc821d Michael Ellerman 2023-07-05  2681  		/*
> 38253464bc821d Michael Ellerman 2023-07-05  2682  		 * Disable can be called with CPU_SMT_ENABLED when changing
> 38253464bc821d Michael Ellerman 2023-07-05  2683  		 * from a higher to lower number of SMT threads per core.
> 38253464bc821d Michael Ellerman 2023-07-05  2684  		 */
> 38253464bc821d Michael Ellerman 2023-07-05  2685  		if (ctrlval == CPU_SMT_ENABLED && cpu_smt_thread_allowed(cpu))
> 38253464bc821d Michael Ellerman 2023-07-05  2686  			continue;
> dc8d37ed304eee Arnd Bergmann    2019-12-10 @2687  		ret = cpu_down_maps_locked(cpu, CPUHP_OFFLINE);
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2688  		if (ret)
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2689  			break;
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2690  		/*
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2691  		 * As this needs to hold the cpu maps lock it's impossible
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2692  		 * to call device_offline() because that ends up calling
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2693  		 * cpu_down() which takes cpu maps lock. cpu maps lock
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2694  		 * needs to be held as this might race against in kernel
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2695  		 * abusers of the hotplug machinery (thermal management).
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2696  		 *
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2697  		 * So nothing would update device:offline state. That would
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2698  		 * leave the sysfs entry stale and prevent onlining after
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2699  		 * smt control has been changed to 'off' again. This is
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2700  		 * called under the sysfs hotplug lock, so it is properly
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2701  		 * serialized against the regular offline usage.
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2702  		 */
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2703  		cpuhp_offline_cpu_device(cpu);
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2704  	}
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2705  	if (!ret)
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2706  		cpu_smt_control = ctrlval;
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2707  	cpu_maps_update_done();
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2708  	return ret;
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2709  }
> dc8d37ed304eee Arnd Bergmann    2019-12-10  2710  
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 1/4] arch_topology: Support basic SMT control for the driver
  2023-11-15 15:23   ` kernel test robot
@ 2023-11-20  3:29     ` Yicong Yang
  0 siblings, 0 replies; 10+ messages in thread
From: Yicong Yang @ 2023-11-20  3:29 UTC (permalink / raw)
  To: kernel test robot, catalin.marinas, will, sudeep.holla,
	linux-arm-kernel
  Cc: yangyicong, llvm, oe-kbuild-all, dietmar.eggemann, gregkh, rafael,
	jonathan.cameron, prime.zeng, linuxarm, linux-kernel

On 2023/11/15 23:23, kernel test robot wrote:
> Hi Yicong,
> 
> kernel test robot noticed the following build warnings:
> 
> [auto build test WARNING on arm64/for-next/core]
> [also build test WARNING on driver-core/driver-core-testing driver-core/driver-core-next driver-core/driver-core-linus arm/for-next kvmarm/next soc/for-next linus/master arm/fixes v6.7-rc1 next-20231115]
> [If your patch is applied to the wrong git tree, kindly drop us a note.
> And when submitting patch, we suggest to use '--base' as documented in
> https://git-scm.com/docs/git-format-patch#_base_tree_information]
> 
> url:    https://github.com/intel-lab-lkp/linux/commits/Yicong-Yang/arch_topology-Support-basic-SMT-control-for-the-driver/20231114-120544
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git for-next/core
> patch link:    https://lore.kernel.org/r/20231114040110.54590-2-yangyicong%40huawei.com
> patch subject: [PATCH v3 1/4] arch_topology: Support basic SMT control for the driver
> config: arm-socfpga_defconfig (https://download.01.org/0day-ci/archive/20231115/202311152356.OWWDpFRB-lkp@intel.com/config)
> compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a)
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231115/202311152356.OWWDpFRB-lkp@intel.com/reproduce)
> 
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202311152356.OWWDpFRB-lkp@intel.com/
> 
> All warnings (new ones prefixed by >>):
> 
>>> drivers/base/arch_topology.c:32:12: warning: unused variable 'topology_smt_num_threads' [-Wunused-variable]
>       32 | static int topology_smt_num_threads = 1;
>          |            ^
>    1 warning generated.
> 

This variable needs to be protected by CONFIG_HOTPLUG_SMT, otherwise it'll be unused
if architecture like arm/parisc selects CONFIG_GENERIC_ARCH_TOPOLOGY but not
CONFIG_HOTPLUG_SMT.

> 
> vim +/topology_smt_num_threads +32 drivers/base/arch_topology.c
> 
>     30	
>     31	/* Maximum threads number per-Core */
>   > 32	static int topology_smt_num_threads = 1;
>     33	
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2023-11-20  3:29 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-14  4:01 [PATCH v3 0/4] Support SMT control on arm64 Yicong Yang
2023-11-14  4:01 ` [PATCH v3 1/4] arch_topology: Support basic SMT control for the driver Yicong Yang
2023-11-14 13:42   ` kernel test robot
2023-11-15 15:23   ` kernel test robot
2023-11-20  3:29     ` Yicong Yang
2023-11-14  4:01 ` [PATCH v3 2/4] arch_topology: Support SMT control for OF based system Yicong Yang
2023-11-14  4:01 ` [PATCH v3 3/4] arm64: topology: Support SMT control on ACPI " Yicong Yang
2023-11-14  4:01 ` [PATCH v3 4/4] arm64: Kconfig: Enable HOTPLUG_SMT Yicong Yang
2023-11-16  4:59   ` kernel test robot
2023-11-20  3:27     ` Yicong Yang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox