--- /dev/null
+From 2c12a32c20594139ddc5aa11245fd7cbe00a61b7 Mon Sep 17 00:00:00 2001
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Date: Thu, 3 Aug 2017 12:26:04 -0700
+Subject: Revert "powerpc/numa: Fix percpu allocations to be NUMA aware"
+
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+This reverts commit 138bb14846a5856747694ae9ef565c9eb4533a1e which is
+commit ba4a648f12f4cd0a8003dd229b6ca8a53348ee4b upstream.
+
+Michal Hocko writes:
+
+JFYI. We have encountered a regression after applying this patch on a
+large ppc machine. While the patch is the right thing to do it doesn't
+work well with the current vmalloc area size on ppc and large machines
+where NUMA nodes are very far from each other. Just for the reference
+the boot fails on such a machine with bunch of warning preceeding it.
+See http://lkml.kernel.org/r/20170724134240.GL25221@dhcp22.suse.cz
+
+It seems the right thing to do is to enlarge the vmalloc space on ppc
+but this is not the case in the upstream kernel yet AFAIK. It is also
+questionable whether that is a stable material but I will decision on
+you here.
+
+We have reverted this patch from our 4.4 based kernel.
+
+Newer kernels do not have enlarged vmalloc space yet AFAIK so they won't
+work properly eiter. This bug is quite rare though because you need a
+specific HW configuration to trigger the issue - namely NUMA nodes have
+to be far away from each other in the physical memory space.
+
+Cc: Michal Hocko <mhocko@kernel.org>
+Cc: Michael Ellerman <mpe@ellerman.id.au>
+Cc: Nicholas Piggin <npiggin@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/powerpc/include/asm/topology.h | 14 --------------
+ arch/powerpc/kernel/setup_64.c | 4 ++--
+ 2 files changed, 2 insertions(+), 16 deletions(-)
+
+--- a/arch/powerpc/include/asm/topology.h
++++ b/arch/powerpc/include/asm/topology.h
+@@ -44,22 +44,8 @@ extern void __init dump_numa_cpu_topolog
+ extern int sysfs_add_device_to_node(struct device *dev, int nid);
+ extern void sysfs_remove_device_from_node(struct device *dev, int nid);
+
+-static inline int early_cpu_to_node(int cpu)
+-{
+- int nid;
+-
+- nid = numa_cpu_lookup_table[cpu];
+-
+- /*
+- * Fall back to node 0 if nid is unset (it should be, except bugs).
+- * This allows callers to safely do NODE_DATA(early_cpu_to_node(cpu)).
+- */
+- return (nid < 0) ? 0 : nid;
+-}
+ #else
+
+-static inline int early_cpu_to_node(int cpu) { return 0; }
+-
+ static inline void dump_numa_cpu_topology(void) {}
+
+ static inline int sysfs_add_device_to_node(struct device *dev, int nid)
+--- a/arch/powerpc/kernel/setup_64.c
++++ b/arch/powerpc/kernel/setup_64.c
+@@ -754,7 +754,7 @@ void ppc64_boot_msg(unsigned int src, co
+
+ static void * __init pcpu_fc_alloc(unsigned int cpu, size_t size, size_t align)
+ {
+- return __alloc_bootmem_node(NODE_DATA(early_cpu_to_node(cpu)), size, align,
++ return __alloc_bootmem_node(NODE_DATA(cpu_to_node(cpu)), size, align,
+ __pa(MAX_DMA_ADDRESS));
+ }
+
+@@ -765,7 +765,7 @@ static void __init pcpu_fc_free(void *pt
+
+ static int pcpu_cpu_distance(unsigned int from, unsigned int to)
+ {
+- if (early_cpu_to_node(from) == early_cpu_to_node(to))
++ if (cpu_to_node(from) == cpu_to_node(to))
+ return LOCAL_DISTANCE;
+ else
+ return REMOTE_DISTANCE;