Commit 9dda696f authored by Linus Torvalds's avatar Linus Torvalds
parents c5617b20 4ec37de8
...@@ -390,11 +390,13 @@ smp_callin (void) ...@@ -390,11 +390,13 @@ smp_callin (void)
fix_b0_for_bsp(); fix_b0_for_bsp();
#ifdef CONFIG_NUMA
/* /*
* numa_node_id() works after this. * numa_node_id() works after this.
*/ */
set_numa_node(cpu_to_node_map[cpuid]); set_numa_node(cpu_to_node_map[cpuid]);
set_numa_mem(local_memory_node(cpu_to_node_map[cpuid])); set_numa_mem(local_memory_node(cpu_to_node_map[cpuid]));
#endif
ipi_call_lock_irq(); ipi_call_lock_irq();
spin_lock(&vector_lock); spin_lock(&vector_lock);
...@@ -638,7 +640,9 @@ void __devinit smp_prepare_boot_cpu(void) ...@@ -638,7 +640,9 @@ void __devinit smp_prepare_boot_cpu(void)
{ {
cpu_set(smp_processor_id(), cpu_online_map); cpu_set(smp_processor_id(), cpu_online_map);
cpu_set(smp_processor_id(), cpu_callin_map); cpu_set(smp_processor_id(), cpu_callin_map);
#ifdef CONFIG_NUMA
set_numa_node(cpu_to_node_map[smp_processor_id()]); set_numa_node(cpu_to_node_map[smp_processor_id()]);
#endif
per_cpu(cpu_state, smp_processor_id()) = CPU_ONLINE; per_cpu(cpu_state, smp_processor_id()) = CPU_ONLINE;
paravirt_post_smp_prepare_boot_cpu(); paravirt_post_smp_prepare_boot_cpu();
} }
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/bootmem.h> #include <linux/bootmem.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/random.h>
#include <asm/mmzone.h> #include <asm/mmzone.h>
#include <asm/numa.h> #include <asm/numa.h>
...@@ -50,6 +51,22 @@ paddr_to_nid(unsigned long paddr) ...@@ -50,6 +51,22 @@ paddr_to_nid(unsigned long paddr)
return (i < num_node_memblks) ? node_memblk[i].nid : (num_node_memblks ? -1 : 0); return (i < num_node_memblks) ? node_memblk[i].nid : (num_node_memblks ? -1 : 0);
} }
/*
* Return the bit number of a random bit set in the nodemask.
* (returns -1 if nodemask is empty)
*/
int __node_random(const nodemask_t *maskp)
{
int w, bit = -1;
w = nodes_weight(*maskp);
if (w)
bit = bitmap_ord_to_pos(maskp->bits,
get_random_int() % w, MAX_NUMNODES);
return bit;
}
EXPORT_SYMBOL(__node_random);
#if defined(CONFIG_SPARSEMEM) && defined(CONFIG_NUMA) #if defined(CONFIG_SPARSEMEM) && defined(CONFIG_NUMA)
/* /*
* Because of holes evaluate on section limits. * Because of holes evaluate on section limits.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment