Hi Srikar, On Fri, 28 Jun 2019 at 14:58, Srikar Dronamraju <sri...@linux.vnet.ibm.com> wrote: > > * Wanpeng Li <kernel...@gmail.com> [2019-06-28 08:43:13]: > > > > > > +/* > > + * sched_numa_find_closest() - given the NUMA topology, find the cpu > > + * closest to @cpu from @cpumask. > > + * cpumask: cpumask to find a cpu from > > + * cpu: cpu to be close to > > + * > > + * returns: cpu, or >= nr_cpu_ids when nothing found (or !NUMA). > > One nit: > I dont see sched_numa_find_closest returning anything greater than > nr_cpu_ids. So 's/>= //' for the above comment. > > > + */ > > +int sched_numa_find_closest(const struct cpumask *cpus, int cpu) > > +{ > > +#ifdef CONFIG_NUMA > > + int i, j = cpu_to_node(cpu); > > + > > + for (i = 0; i < sched_domains_numa_levels; i++) { > > + cpu = cpumask_any_and(cpus, sched_domains_numa_masks[i][j]); > > + if (cpu < nr_cpu_ids) > > + return cpu; > > + } > > +#endif > > + return nr_cpu_ids; > > +} > > + > > Should we have a static function for sched_numa_find_closest instead of > having #ifdef in the function? > > > static int __sdt_alloc(const struct cpumask *cpu_map) > > { > > struct sched_domain_topology_level *tl;
So, how about add this? diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index a7e7d8c..5f2b262 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -1225,13 +1225,17 @@ enum numa_topology_type { extern void sched_init_numa(void); extern void sched_domains_numa_masks_set(unsigned int cpu); extern void sched_domains_numa_masks_clear(unsigned int cpu); +extern int sched_numa_find_closest(const struct cpumask *cpus, int cpu); #else static inline void sched_init_numa(void) { } static inline void sched_domains_numa_masks_set(unsigned int cpu) { } static inline void sched_domains_numa_masks_clear(unsigned int cpu) { } +static inline int sched_numa_find_closest(const struct cpumask *cpus, int cpu) +{ + return nr_cpu_ids; +} #endif -extern int sched_numa_find_closest(const struct cpumask *cpus, int cpu); #ifdef CONFIG_NUMA_BALANCING /* The regions in numa_faults array from task_struct */ diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c index 72731ed..9372c18 100644 --- a/kernel/sched/topology.c +++ b/kernel/sched/topology.c @@ -1734,19 +1734,16 @@ void sched_domains_numa_masks_clear(unsigned int cpu) } } -#endif /* CONFIG_NUMA */ - /* * sched_numa_find_closest() - given the NUMA topology, find the cpu * closest to @cpu from @cpumask. * cpumask: cpumask to find a cpu from * cpu: cpu to be close to * - * returns: cpu, or >= nr_cpu_ids when nothing found (or !NUMA). + * returns: cpu, or nr_cpu_ids when nothing found. */ int sched_numa_find_closest(const struct cpumask *cpus, int cpu) { -#ifdef CONFIG_NUMA int i, j = cpu_to_node(cpu); for (i = 0; i < sched_domains_numa_levels; i++) { @@ -1754,10 +1751,11 @@ int sched_numa_find_closest(const struct cpumask *cpus, int cpu) if (cpu < nr_cpu_ids) return cpu; } -#endif return nr_cpu_ids; } +#endif /* CONFIG_NUMA */ + static int __sdt_alloc(const struct cpumask *cpu_map) { struct sched_domain_topology_level *tl;