Subsequent commits will add arch/ hooks to configure the sparsebitmask (sbm) topology - number of sbm instance and the maximum CPUs that a single instance can represent.
Introduce sbm_set_topology() that helps architectures configure the sbm topology. Also add arch_sbm_cpu_instance_id() which will be used to map CPUs to the sbm instances during init to keep CPUs on the same instance on the same sbm leaf. Individual arch/ users will be added one at a time in the subsequent commits. Signed-off-by: K Prateek Nayak <[email protected]> --- include/linux/sbm.h | 8 ++++++++ lib/Makefile | 2 +- lib/sbm.c | 27 +++++++++++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 include/linux/sbm.h create mode 100644 lib/sbm.c diff --git a/include/linux/sbm.h b/include/linux/sbm.h new file mode 100644 index 000000000000..adac12ed233a --- /dev/null +++ b/include/linux/sbm.h @@ -0,0 +1,8 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _LINUX_SBM_H +#define _LINUX_SBM_H + +int arch_sbm_cpu_instance_id(int cpu); +void sbm_set_topology(int num_instances, int max_threads_per_instance); + +#endif /* _LINUX_SBM_H */ diff --git a/lib/Makefile b/lib/Makefile index dfab958327c5..7776330f5b25 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -40,7 +40,7 @@ lib-y := ctype.o string.o vsprintf.o cmdline.o \ is_single_threaded.o plist.o decompress.o kobject_uevent.o \ earlycpio.o seq_buf.o siphash.o dec_and_lock.o \ nmi_backtrace.o win_minmax.o memcat_p.o \ - buildid.o objpool.o iomem_copy.o sys_info.o + buildid.o objpool.o iomem_copy.o sys_info.o sbm.o lib-$(CONFIG_UNION_FIND) += union_find.o lib-$(CONFIG_PRINTK) += dump_stack.o diff --git a/lib/sbm.c b/lib/sbm.c new file mode 100644 index 000000000000..82280e3306de --- /dev/null +++ b/lib/sbm.c @@ -0,0 +1,27 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#include <linux/sbm.h> +#include <linux/init.h> +#include <linux/printk.h> + +static int sbm_max_threads_per_instance = -1; +static int sbm_num_instance = -1; + +/* + * In absence of an arch definition, consider all CPUs to + * belong to the same sbm instance. + */ +int __weak arch_sbm_cpu_instance_id(int cpu) +{ + return 0; +} + +void __init sbm_set_topology(int num_instances, int max_threads_per_instance) +{ + sbm_max_threads_per_instance = max_threads_per_instance; + sbm_num_instance = num_instances; + + pr_info("sbm topology set to %d instance(s) with a maximum of %d thread(s) per instance\n", + sbm_num_instance, + sbm_max_threads_per_instance); +} + -- 2.34.1
