Hi Michael, I hadn't seen any update on this patch, just wanted to make sure you saw it.
-Nathan On 12/05/2017 09:33 PM, Nathan Fontenot wrote: > When DLPAR removing a CPU we need to invalidate its entry in the > numa_cpu_lookup_table. There is no guarantee that on a subsequent > DLPAR add of the CPU the associativity will be the same and thus it > could be in a different node. Invalidating the entry in the > numa_cpu_lookup_table causes the associativity to be read from the > device tree at the time of the add. > > The current behavior of not invalidating the CPUs entry in the > numa_cpu_lookup_table can result in scenarios where the the topology > layout of CPUs in the partition does not match the device tree > or the topology reported by the HMC. > > This patch move the update_numa_cpu_lookup_table to topology.h so it is > available outside of numa.c. A call to this routine is added in > pseries_remove_processor(). > > Signed-off-by: Nathan Fontenot <nf...@linux.vnet.ibm.com> > --- > > Updates for V2: Move the invalidation from unmap_cpu_from_node to > pseries_remove_processor, the former routine is also called during cpu > offline and we do not want to invalidate during cpu offline. > > arch/powerpc/include/asm/topology.h | 5 +++++ > arch/powerpc/mm/numa.c | 5 ----- > arch/powerpc/platforms/pseries/hotplug-cpu.c | 2 ++ > 3 files changed, 7 insertions(+), 5 deletions(-) > > diff --git a/arch/powerpc/include/asm/topology.h > b/arch/powerpc/include/asm/topology.h > index 88187c285c70..1c02e6900f78 100644 > --- a/arch/powerpc/include/asm/topology.h > +++ b/arch/powerpc/include/asm/topology.h > @@ -44,6 +44,11 @@ extern int sysfs_add_device_to_node(struct device *dev, > int nid); > extern void sysfs_remove_device_from_node(struct device *dev, int nid); > extern int numa_update_cpu_topology(bool cpus_locked); > > +static inline void update_numa_cpu_lookup_table(unsigned int cpu, int node) > +{ > + numa_cpu_lookup_table[cpu] = node; > +} > + > static inline int early_cpu_to_node(int cpu) > { > int nid; > diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c > index adb6364f4091..09be66fcea68 100644 > --- a/arch/powerpc/mm/numa.c > +++ b/arch/powerpc/mm/numa.c > @@ -142,11 +142,6 @@ static void reset_numa_cpu_lookup_table(void) > numa_cpu_lookup_table[cpu] = -1; > } > > -static void update_numa_cpu_lookup_table(unsigned int cpu, int node) > -{ > - numa_cpu_lookup_table[cpu] = node; > -} > - > static void map_cpu_to_node(int cpu, int node) > { > update_numa_cpu_lookup_table(cpu, node); > diff --git a/arch/powerpc/platforms/pseries/hotplug-cpu.c > b/arch/powerpc/platforms/pseries/hotplug-cpu.c > index a7d14aa7bb7c..09083ad82f7a 100644 > --- a/arch/powerpc/platforms/pseries/hotplug-cpu.c > +++ b/arch/powerpc/platforms/pseries/hotplug-cpu.c > @@ -36,6 +36,7 @@ > #include <asm/xics.h> > #include <asm/xive.h> > #include <asm/plpar_wrappers.h> > +#include <asm/topology.h> > > #include "pseries.h" > #include "offline_states.h" > @@ -331,6 +332,7 @@ static void pseries_remove_processor(struct device_node > *np) > BUG_ON(cpu_online(cpu)); > set_cpu_present(cpu, false); > set_hard_smp_processor_id(cpu, -1); > + update_numa_cpu_lookup_table(cpu, -1); > break; > } > if (cpu >= nr_cpu_ids) >