On 06.02.2014 [19:29:16 +0900], Joonsoo Kim wrote: > 2014-02-06 David Rientjes <rientjes@xxxxxxxxxx>: > > On Thu, 6 Feb 2014, Joonsoo Kim wrote: > > > >> Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx> > >> > > > > I may be misunderstanding this patch and there's no help because there's > > no changelog. > > Sorry about that. > I made this patch just for testing. :) > Thanks for looking this. > > >> diff --git a/include/linux/topology.h b/include/linux/topology.h > >> index 12ae6ce..a6d5438 100644 > >> --- a/include/linux/topology.h > >> +++ b/include/linux/topology.h > >> @@ -233,11 +233,20 @@ static inline int numa_node_id(void) > >> * Use the accessor functions set_numa_mem(), numa_mem_id() and cpu_to_mem(). > >> */ > >> DECLARE_PER_CPU(int, _numa_mem_); > >> +int _node_numa_mem_[MAX_NUMNODES]; > >> > >> #ifndef set_numa_mem > >> static inline void set_numa_mem(int node) > >> { > >> this_cpu_write(_numa_mem_, node); > >> + _node_numa_mem_[numa_node_id()] = node; > >> +} > >> +#endif > >> + > >> +#ifndef get_numa_mem > >> +static inline int get_numa_mem(int node) > >> +{ > >> + return _node_numa_mem_[node]; > >> } > >> #endif > >> > >> @@ -260,6 +269,7 @@ static inline int cpu_to_mem(int cpu) > >> static inline void set_cpu_numa_mem(int cpu, int node) > >> { > >> per_cpu(_numa_mem_, cpu) = node; > >> + _node_numa_mem_[numa_node_id()] = node; > > > > The intention seems to be that _node_numa_mem_[X] for a node X will return > > a node Y with memory that has the nearest distance? In other words, > > caching the value returned by local_memory_node(X)? > > Yes, you are right. > > > That doesn't seem to be what it's doing since numa_node_id() is the node > > of the cpu that current is running on so this ends up getting initialized > > to whatever local_memory_node(cpu_to_node(cpu)) is for the last bit set in > > cpu_possible_mask. > > Yes, I made a mistake. > Thanks for pointer. > I fix it and attach v2. > Now I'm out of office, so I'm not sure this second version is correct :( > > Thanks. > > ----------8<-------------- > From bf691e7eb07f966e3aed251eaeb18f229ee32d1f Mon Sep 17 00:00:00 2001 > From: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx> > Date: Thu, 6 Feb 2014 17:07:05 +0900 > Subject: [RFC PATCH 2/3 v2] topology: support node_numa_mem() for > determining the > fallback node > > We need to determine the fallback node in slub allocator if the allocation > target node is memoryless node. Without it, the SLUB wrongly select > the node which has no memory and can't use a partial slab, because of node > mismatch. Introduced function, node_numa_mem(X), will return > a node Y with memory that has the nearest distance. If X is memoryless > node, it will return nearest distance node, but, if > X is normal node, it will return itself. > > We will use this function in following patch to determine the fallback > node. > > Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx> > > diff --git a/include/linux/topology.h b/include/linux/topology.h > index 12ae6ce..66b19b8 100644 > --- a/include/linux/topology.h > +++ b/include/linux/topology.h > @@ -233,11 +233,20 @@ static inline int numa_node_id(void) > * Use the accessor functions set_numa_mem(), numa_mem_id() and cpu_to_mem(). > */ > DECLARE_PER_CPU(int, _numa_mem_); > +int _node_numa_mem_[MAX_NUMNODES]; Should be static, I think? > > #ifndef set_numa_mem > static inline void set_numa_mem(int node) > { > this_cpu_write(_numa_mem_, node); > + _node_numa_mem_[numa_node_id()] = node; > +} > +#endif > + > +#ifndef get_numa_mem > +static inline int get_numa_mem(int node) > +{ > + return _node_numa_mem_[node]; > } > #endif > > @@ -260,6 +269,7 @@ static inline int cpu_to_mem(int cpu) > static inline void set_cpu_numa_mem(int cpu, int node) > { > per_cpu(_numa_mem_, cpu) = node; > + _node_numa_mem_[cpu_to_node(cpu)] = node; > } > #endif > > @@ -273,6 +283,13 @@ static inline int numa_mem_id(void) > } > #endif > > +#ifndef get_numa_mem > +static inline int get_numa_mem(int node) > +{ > + return node; > +} > +#endif > + > #ifndef cpu_to_mem > static inline int cpu_to_mem(int cpu) > { > -- > 1.7.9.5 > -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>