[PATCH v6] numa: make node_to_cpumask_map() NUMA_NO_NODE aware
Peter Zijlstra
peterz at infradead.org
Tue Sep 24 01:48:52 AEST 2019
On Mon, Sep 23, 2019 at 05:28:56PM +0200, Michal Hocko wrote:
> On Mon 23-09-19 17:15:19, Peter Zijlstra wrote:
> > > diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c
> > > index 4123100e..9859acb 100644
> > > --- a/arch/x86/mm/numa.c
> > > +++ b/arch/x86/mm/numa.c
> > > @@ -861,6 +861,9 @@ void numa_remove_cpu(int cpu)
> > > */
> > > const struct cpumask *cpumask_of_node(int node)
> > > {
> > > + if (node == NUMA_NO_NODE)
> > > + return cpu_online_mask;
> >
> > This mandates the caller holds cpus_read_lock() or something, I'm pretty
> > sure that if I put:
> >
> > lockdep_assert_cpus_held();
>
> Is this documented somewhere?
No idea... common sense :-)
> Also how does that differ from a normal
> case when a proper node is used? The cpumask will always be dynamic in
> the cpu hotplug presence, right?
As per normal yes, and I'm fairly sure there's a ton of bugs. Any
'online' state is subject to change except when you're holding
sufficient locks to stop it.
Disabling preemption also stabilizes it, because cpu unplug relies on
stop-machine.
> > here, it comes apart real quick. Without holding the cpu hotplug lock,
> > the online mask is gibberish.
>
> Can the returned cpu mask go away?
No, the cpu_online_mask itself has static storage, the contents OTOH can
change at will. Very little practical difference :-)
More information about the Linuxppc-dev
mailing list