[IA64] Fix build breakage
In commit0ac0c0d0f8
cpusets: randomize node rotor used in cpuset_mem_spread_node() Jack Steiner fixed a problem with too many small tasks being assigned to node 0. Copy his code to ia64 to avoid build error. arch/ia64/kernel/smpboot.c:641: error: ‘cpu_to_node_map’ undeclared (first use in this function) In commit3bccd99627
numa: ia64: use generic percpu var numa_node_id() implementation Lee Schermerhorn added some set_numa_node() calls - but these only work on CONFIG_NUMA=y configurations. Surround the calls with #ifdef CONFIG_NUMA Signed-off-by: Tony Luck <tony.luck@intel.com>
This commit is contained in:
@@ -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)
|
|||||||
{
|
{
|
||||||
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 @@
|
|||||||
#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)
|
|||||||
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.
|
||||||
|
Reference in New Issue
Block a user