*/
        int (*x86_32_early_logical_apicid)(int cpu);
 
-       /* determine CPU -> NUMA node mapping */
+       /*
+        * Optional method called from setup_local_APIC() after logical
+        * apicid is guaranteed to be known to initialize apicid -> node
+        * mapping if NUMA initialization hasn't done so already.  Don't
+        * add new users.
+        */
        int (*x86_32_numa_cpu_node)(int cpu);
 #endif
 };
        return cpuid_apic >> index_msb;
 }
 
-extern int default_x86_32_numa_cpu_node(int cpu);
-
 #endif
 
 static inline unsigned int
 
         * a bit too late - percpu allocation has already happened without
         * proper NUMA affinity.
         */
-       set_apicid_to_node(early_per_cpu(x86_cpu_to_apicid, cpu),
-                          apic->x86_32_numa_cpu_node(cpu));
+       if (apic->x86_32_numa_cpu_node)
+               set_apicid_to_node(early_per_cpu(x86_cpu_to_apicid, cpu),
+                                  apic->x86_32_numa_cpu_node(cpu));
 #endif
 
        /*
        apic_write(APIC_LDR, val);
 }
 
-#ifdef CONFIG_X86_32
-int default_x86_32_numa_cpu_node(int cpu)
-{
-#ifdef CONFIG_NUMA
-       int apicid = early_per_cpu(x86_cpu_to_apicid, cpu);
-
-       if (apicid != BAD_APICID)
-               return __apicid_to_node[apicid];
-       return NUMA_NO_NODE;
-#else
-       return 0;
-#endif
-}
-#endif
-
 /*
  * Power management
  */
 
        WARN_ON_ONCE(cpu_has_apic && !disable_apic);
 }
 
-#ifdef CONFIG_X86_32
-static int noop_x86_32_numa_cpu_node(int cpu)
-{
-       /* we're always on node 0 */
-       return 0;
-}
-#endif
-
 struct apic apic_noop = {
        .name                           = "noop",
        .probe                          = noop_probe,
 
 #ifdef CONFIG_X86_32
        .x86_32_early_logical_apicid    = noop_x86_32_early_logical_apicid,
-       .x86_32_numa_cpu_node           = noop_x86_32_numa_cpu_node,
 #endif
 };
 
        .safe_wait_icr_idle             = native_safe_apic_wait_icr_idle,
 
        .x86_32_early_logical_apicid    = bigsmp_early_logical_apicid,
-       .x86_32_numa_cpu_node           = default_x86_32_numa_cpu_node,
 };
 
                nr_ioapics, cpumask_bits(es7000_target_cpus())[0]);
 }
 
-static int es7000_numa_cpu_node(int cpu)
-{
-       return 0;
-}
-
 static int es7000_cpu_present_to_apicid(int mps_cpu)
 {
        if (!mps_cpu)
        .safe_wait_icr_idle             = native_safe_apic_wait_icr_idle,
 
        .x86_32_early_logical_apicid    = es7000_early_logical_apicid,
-       .x86_32_numa_cpu_node           = es7000_numa_cpu_node,
 };
 
 struct apic __refdata apic_es7000 = {
        .safe_wait_icr_idle             = native_safe_apic_wait_icr_idle,
 
        .x86_32_early_logical_apicid    = es7000_early_logical_apicid,
-       .x86_32_numa_cpu_node           = es7000_numa_cpu_node,
 };
 
        .safe_wait_icr_idle             = native_safe_apic_wait_icr_idle,
 
        .x86_32_early_logical_apicid    = default_x86_32_early_logical_apicid,
-       .x86_32_numa_cpu_node           = default_x86_32_numa_cpu_node,
 };
 
 extern struct apic apic_numaq;
 
        .safe_wait_icr_idle             = native_safe_apic_wait_icr_idle,
 
        .x86_32_early_logical_apicid    = summit_early_logical_apicid,
-       .x86_32_numa_cpu_node           = default_x86_32_numa_cpu_node,
 };