On Fri, Jun 21, 2019 at 09:35:11AM +0800, Wanpeng Li wrote: > From: Wanpeng Li <wanpen...@tencent.com> > > In real product setup, there will be houseeking cpus in each nodes, it > is prefer to do housekeeping from local node, fallback to global online > cpumask if failed to find houseeking cpu from local node. > > Cc: Ingo Molnar <mi...@redhat.com> > Cc: Peter Zijlstra <pet...@infradead.org> > Cc: Frederic Weisbecker <frede...@kernel.org> > Signed-off-by: Wanpeng Li <wanpen...@tencent.com>
Looks good; did it actually work? :-) > diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c > index 63184cf..3d3fb04 100644 > --- a/kernel/sched/topology.c > +++ b/kernel/sched/topology.c > @@ -1726,6 +1726,20 @@ void sched_domains_numa_masks_clear(unsigned int cpu) > > #endif /* CONFIG_NUMA */ Please double check this function; I wrote it in a hurry :-) Also maybe add a wee comment on top like: /* * sched_numa_file_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). */ > +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; > +}