Prepare for arch-specifc asympacking logic.
No functional impact intended.
Signed-off-by: Christian Loehle <christian.loehle@arm.com>
---
include/linux/arch_topology.h | 24 ++++++++++++++++++++++++
include/linux/sched/topology.h | 9 +++++++++
kernel/sched/fair.c | 16 ----------------
kernel/sched/topology.c | 8 ++++++++
4 files changed, 41 insertions(+), 16 deletions(-)
diff --git a/include/linux/arch_topology.h b/include/linux/arch_topology.h
index ebd7f8935f96..3ab571b287ef 100644
--- a/include/linux/arch_topology.h
+++ b/include/linux/arch_topology.h
@@ -94,6 +94,11 @@ void remove_cpu_topology(unsigned int cpuid);
void reset_cpu_topology(void);
int parse_acpi_topology(void);
void freq_inv_set_max_ratio(int cpu, u64 max_rate);
+void arch_topology_init_cppc_asym(void);
+
+#ifdef CONFIG_ACPI_CPPC_LIB
+bool topology_init_cppc_asym_packing(int __percpu *priority_var);
+#endif
/*
* Architectures like ARM64 don't have reliable architectural way to get SMT
@@ -105,10 +110,29 @@ static inline bool topology_core_has_smt(int cpu)
return cpu_topology[cpu].thread_id != -1;
}
+#ifdef CONFIG_ARM64
+#undef arch_sched_asym_flags
+#define arch_sched_asym_flags arm64_arch_sched_asym_flags
+int arm64_arch_asym_cpu_priority(int cpu);
+int arm64_arch_sched_asym_flags(void);
+#endif
+
#else
static inline bool topology_core_has_smt(int cpu) { return false; }
#endif /* CONFIG_GENERIC_ARCH_TOPOLOGY */
+/*
+ * Architectures may override this to provide a custom CPU priority for
+ * asymmetric packing.
+ */
+#ifndef arch_asym_cpu_priority
+#define arch_asym_cpu_priority topology_arch_asym_cpu_priority
+static inline int topology_arch_asym_cpu_priority(int cpu)
+{
+ return -cpu;
+}
+#endif
+
#endif /* _LINUX_ARCH_TOPOLOGY_H_ */
diff --git a/include/linux/sched/topology.h b/include/linux/sched/topology.h
index 45c0022b91ce..48cfa89df0fc 100644
--- a/include/linux/sched/topology.h
+++ b/include/linux/sched/topology.h
@@ -50,6 +50,15 @@ extern const struct cpumask *tl_mc_mask(struct sched_domain_topology_level *tl,
extern const struct cpumask *tl_pkg_mask(struct sched_domain_topology_level *tl, int cpu);
extern int arch_asym_cpu_priority(int cpu);
+extern int arch_sched_asym_flags(void);
+
+/*
+ * The margin used when comparing CPU capacities.
+ * is 'cap1' noticeably greater than 'cap2'
+ *
+ * (default: ~5%)
+ */
+#define capacity_greater(cap1, cap2) ((cap1) * 1024 > (cap2) * 1078)
struct sched_domain_attr {
int relax_domain_level;
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index bf948db905ed..c5f8aa3ad535 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -88,14 +88,6 @@ static int __init setup_sched_thermal_decay_shift(char *str)
}
__setup("sched_thermal_decay_shift=", setup_sched_thermal_decay_shift);
-/*
- * For asym packing, by default the lower numbered CPU has higher priority.
- */
-int __weak arch_asym_cpu_priority(int cpu)
-{
- return -cpu;
-}
-
/*
* The margin used when comparing utilization with CPU capacity.
*
@@ -103,14 +95,6 @@ int __weak arch_asym_cpu_priority(int cpu)
*/
#define fits_capacity(cap, max) ((cap) * 1280 < (max) * 1024)
-/*
- * The margin used when comparing CPU capacities.
- * is 'cap1' noticeably greater than 'cap2'
- *
- * (default: ~5%)
- */
-#define capacity_greater(cap1, cap2) ((cap1) * 1024 > (cap2) * 1078)
-
#ifdef CONFIG_CFS_BANDWIDTH
/*
* Amount of runtime to allocate from global (tg) to local (per-cfs_rq) pool
diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c
index 32dcddaead82..b0c590dfdb01 100644
--- a/kernel/sched/topology.c
+++ b/kernel/sched/topology.c
@@ -1742,6 +1742,14 @@ sd_init(struct sched_domain_topology_level *tl,
return sd;
}
+#ifndef arch_sched_asym_flags
+#define arch_sched_asym_flags topology_arch_sched_asym_flags
+static inline int topology_arch_sched_asym_flags(void)
+{
+ return 0;
+}
+#endif
+
#ifdef CONFIG_SCHED_SMT
int cpu_smt_flags(void)
{
--
2.34.1
Hi Christian,
kernel test robot noticed the following build errors:
[auto build test ERROR on tip/sched/core]
[also build test ERROR on arm64/for-next/core driver-core/driver-core-testing driver-core/driver-core-next driver-core/driver-core-linus peterz-queue/sched/core linus/master v7.0-rc5 next-20260325]
[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/Christian-Loehle/sched-topology-Introduce-arch-hooks-for-asympacking/20260326-145644
base: tip/sched/core
patch link: https://lore.kernel.org/r/20260325181314.3875909-2-christian.loehle%40arm.com
patch subject: [PATCH 1/3] sched/topology: Introduce arch hooks for asympacking
config: powerpc-randconfig-001-20260326 (https://download.01.org/0day-ci/archive/20260327/202603270017.gHZBIwsQ-lkp@intel.com/config)
compiler: powerpc-linux-gcc (GCC) 10.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260327/202603270017.gHZBIwsQ-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/202603270017.gHZBIwsQ-lkp@intel.com/
All errors (new ones prefixed by >>):
In file included from include/linux/topology.h:30,
from include/linux/gfp.h:8,
from include/linux/sched/mm.h:9,
from arch/powerpc/kernel/smp.c:18:
>> include/linux/arch_topology.h:131:32: error: redefinition of 'topology_arch_asym_cpu_priority'
131 | #define arch_asym_cpu_priority topology_arch_asym_cpu_priority
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/powerpc/kernel/smp.c:1767:5: note: in expansion of macro 'arch_asym_cpu_priority'
1767 | int arch_asym_cpu_priority(int cpu)
| ^~~~~~~~~~~~~~~~~~~~~~
include/linux/arch_topology.h:132:19: note: previous definition of 'topology_arch_asym_cpu_priority' was here
132 | static inline int topology_arch_asym_cpu_priority(int cpu)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vim +/topology_arch_asym_cpu_priority +131 include/linux/arch_topology.h
125
126 /*
127 * Architectures may override this to provide a custom CPU priority for
128 * asymmetric packing.
129 */
130 #ifndef arch_asym_cpu_priority
> 131 #define arch_asym_cpu_priority topology_arch_asym_cpu_priority
132 static inline int topology_arch_asym_cpu_priority(int cpu)
133 {
134 return -cpu;
135 }
136 #endif
137
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hi Christian,
kernel test robot noticed the following build errors:
[auto build test ERROR on tip/sched/core]
[also build test ERROR on arm64/for-next/core driver-core/driver-core-testing driver-core/driver-core-next driver-core/driver-core-linus peterz-queue/sched/core next-20260325]
[cannot apply to linus/master v6.16-rc1]
[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/Christian-Loehle/sched-topology-Introduce-arch-hooks-for-asympacking/20260326-145644
base: tip/sched/core
patch link: https://lore.kernel.org/r/20260325181314.3875909-2-christian.loehle%40arm.com
patch subject: [PATCH 1/3] sched/topology: Introduce arch hooks for asympacking
config: x86_64-rhel-9.4 (https://download.01.org/0day-ci/archive/20260326/202603261609.fazAo3mx-lkp@intel.com/config)
compiler: gcc-14 (Debian 14.2.0-19) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260326/202603261609.fazAo3mx-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/202603261609.fazAo3mx-lkp@intel.com/
All errors (new ones prefixed by >>):
In file included from include/linux/topology.h:30,
from include/linux/sched/topology.h:5,
from include/linux/cpuset.h:13,
from arch/x86/kernel/itmt.c:21:
>> include/linux/arch_topology.h:131:32: error: redefinition of 'topology_arch_asym_cpu_priority'
131 | #define arch_asym_cpu_priority topology_arch_asym_cpu_priority
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/x86/kernel/itmt.c:168:5: note: in expansion of macro 'arch_asym_cpu_priority'
168 | int arch_asym_cpu_priority(int cpu)
| ^~~~~~~~~~~~~~~~~~~~~~
include/linux/arch_topology.h:132:19: note: previous definition of 'topology_arch_asym_cpu_priority' with type 'int(int)'
132 | static inline int topology_arch_asym_cpu_priority(int cpu)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vim +/topology_arch_asym_cpu_priority +131 include/linux/arch_topology.h
125
126 /*
127 * Architectures may override this to provide a custom CPU priority for
128 * asymmetric packing.
129 */
130 #ifndef arch_asym_cpu_priority
> 131 #define arch_asym_cpu_priority topology_arch_asym_cpu_priority
132 static inline int topology_arch_asym_cpu_priority(int cpu)
133 {
134 return -cpu;
135 }
136 #endif
137
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hi Christian,
kernel test robot noticed the following build errors:
[auto build test ERROR on tip/sched/core]
[also build test ERROR on arm64/for-next/core driver-core/driver-core-testing driver-core/driver-core-next driver-core/driver-core-linus peterz-queue/sched/core linus/master v7.0-rc5 next-20260325]
[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/Christian-Loehle/sched-topology-Introduce-arch-hooks-for-asympacking/20260326-145644
base: tip/sched/core
patch link: https://lore.kernel.org/r/20260325181314.3875909-2-christian.loehle%40arm.com
patch subject: [PATCH 1/3] sched/topology: Introduce arch hooks for asympacking
config: x86_64-kexec (https://download.01.org/0day-ci/archive/20260326/202603261419.mAKkKckS-lkp@intel.com/config)
compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260326/202603261419.mAKkKckS-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/202603261419.mAKkKckS-lkp@intel.com/
All errors (new ones prefixed by >>):
>> arch/x86/kernel/itmt.c:168:5: error: redefinition of 'topology_arch_asym_cpu_priority'
168 | int arch_asym_cpu_priority(int cpu)
| ^
include/linux/arch_topology.h:131:32: note: expanded from macro 'arch_asym_cpu_priority'
131 | #define arch_asym_cpu_priority topology_arch_asym_cpu_priority
| ^
include/linux/arch_topology.h:132:19: note: previous definition is here
132 | static inline int topology_arch_asym_cpu_priority(int cpu)
| ^
1 error generated.
vim +/topology_arch_asym_cpu_priority +168 arch/x86/kernel/itmt.c
5e76b2ab36b40c Tim Chen 2016-11-22 167
5e76b2ab36b40c Tim Chen 2016-11-22 @168 int arch_asym_cpu_priority(int cpu)
5e76b2ab36b40c Tim Chen 2016-11-22 169 {
5e76b2ab36b40c Tim Chen 2016-11-22 170 return per_cpu(sched_core_priority, cpu);
5e76b2ab36b40c Tim Chen 2016-11-22 171 }
5e76b2ab36b40c Tim Chen 2016-11-22 172
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
© 2016 - 2026 Red Hat, Inc.