On Fri, 21 Jun 2019 at 14:58, Peter Zijlstra <pet...@infradead.org> wrote: > > 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? :-)
Yeah, it works! :) > > > 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 So smart. :) > 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). > */ > Will do in v3. Regards, Wanpeng Li > > +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; > > +}