Skip to content
Snippets Groups Projects
Commit 9dda696f authored by Linus Torvalds's avatar Linus Torvalds
Browse files
parents c5617b20 4ec37de8
No related branches found
No related tags found
No related merge requests found
...@@ -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.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment