/*
                 * numa_node_id() works after this.
                 */
-               set_cpu_numa_node(cpu, numa_cpu_lookup_table[cpu]);
-               set_cpu_numa_mem(cpu, local_memory_node(numa_cpu_lookup_table[cpu]));
+               if (cpu_present(cpu)) {
+                       set_cpu_numa_node(cpu, numa_cpu_lookup_table[cpu]);
+                       set_cpu_numa_mem(cpu,
+                               local_memory_node(numa_cpu_lookup_table[cpu]));
+               }
        }
 
        cpumask_set_cpu(boot_cpuid, cpu_sibling_mask(boot_cpuid));
        }
        traverse_core_siblings(cpu, true);
 
+       set_numa_node(numa_cpu_lookup_table[cpu]);
+       set_numa_mem(local_memory_node(numa_cpu_lookup_table[cpu]));
+
        smp_wmb();
        notify_cpu_starting(cpu);
        set_cpu_online(cpu, true);
 
         * even before we online them, so that we can use cpu_to_{node,mem}
         * early in boot, cf. smp_prepare_cpus().
         */
-       for_each_possible_cpu(cpu) {
+       for_each_present_cpu(cpu) {
                numa_setup_cpu((unsigned long)cpu);
        }
 }