aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2011-10-21 09:23:05 +0200
committerJan Beulich <jbeulich@suse.com>2011-10-21 09:23:05 +0200
commit478be8dd49c707d994c0831a675aaceae6eb3e4d (patch)
treee3c2ad0dbb910c58fce5f7600a512135b33f0f73
parentfabfdefe2a125587b2cdfe3466a25f1456fbf8bc (diff)
downloadxen-478be8dd49c707d994c0831a675aaceae6eb3e4d.tar.gz
xen-478be8dd49c707d994c0831a675aaceae6eb3e4d.tar.bz2
xen-478be8dd49c707d994c0831a675aaceae6eb3e4d.zip
allocate CPU sibling and core maps dynamically
... thus reducing the per-CPU data area size back to one page even when building for large NR_CPUS. At once eliminate the old __cpu{mask,list}_scnprintf() helpers. Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Keir Fraser <keir@xen.org>
-rw-r--r--xen/arch/ia64/linux-xen/setup.c8
-rw-r--r--xen/arch/ia64/linux-xen/smpboot.c42
-rw-r--r--xen/arch/ia64/xen/dom0_ops.c4
-rw-r--r--xen/arch/ia64/xen/tlb_track.c2
-rw-r--r--xen/arch/x86/cpu/mcheck/mce_intel.c2
-rw-r--r--xen/arch/x86/irq.c2
-rw-r--r--xen/arch/x86/mm.c2
-rw-r--r--xen/arch/x86/oprofile/op_model_p4.c2
-rw-r--r--xen/arch/x86/smpboot.c62
-rw-r--r--xen/arch/x86/sysctl.c4
-rw-r--r--xen/common/domctl.c8
-rw-r--r--xen/common/keyhandler.c2
-rw-r--r--xen/common/sched_credit.c22
-rw-r--r--xen/common/sched_credit2.c4
-rw-r--r--xen/include/asm-ia64/linux-xen/asm/smp.h4
-rw-r--r--xen/include/asm-x86/smp.h4
-rw-r--r--xen/include/xen/cpumask.h16
17 files changed, 98 insertions, 92 deletions
diff --git a/xen/arch/ia64/linux-xen/setup.c b/xen/arch/ia64/linux-xen/setup.c
index b767a500e3..24169e46a2 100644
--- a/xen/arch/ia64/linux-xen/setup.c
+++ b/xen/arch/ia64/linux-xen/setup.c
@@ -577,8 +577,12 @@ late_setup_arch (char **cmdline_p)
cpu_physical_id(0) = hard_smp_processor_id();
- cpu_set(0, per_cpu(cpu_sibling_map, 0));
- cpu_set(0, per_cpu(cpu_core_map, 0));
+ if (!zalloc_cpumask_var(&per_cpu(cpu_sibling_mask, 0)) ||
+ !zalloc_cpumask_var(&per_cpu(cpu_core_mask, 0)))
+ panic("No memory for boot CPU sibling/core maps\n");
+
+ cpumask_set_cpu(0, per_cpu(cpu_sibling_mask, 0));
+ cpumask_set_cpu(0, per_cpu(cpu_core_mask, 0));
check_for_logical_procs();
if (smp_num_cpucores > 1)
diff --git a/xen/arch/ia64/linux-xen/smpboot.c b/xen/arch/ia64/linux-xen/smpboot.c
index 66d656eeba..64c28f7764 100644
--- a/xen/arch/ia64/linux-xen/smpboot.c
+++ b/xen/arch/ia64/linux-xen/smpboot.c
@@ -144,8 +144,8 @@ EXPORT_SYMBOL(cpu_online_map);
cpumask_t cpu_possible_map;
EXPORT_SYMBOL(cpu_possible_map);
-DEFINE_PER_CPU_READ_MOSTLY(cpumask_t, cpu_core_map);
-DEFINE_PER_CPU_READ_MOSTLY(cpumask_t, cpu_sibling_map);
+DEFINE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_core_mask);
+DEFINE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_sibling_mask);
int smp_num_siblings = 1;
int smp_num_cpucores = 1;
@@ -687,13 +687,13 @@ clear_cpu_sibling_map(int cpu)
{
int i;
- for_each_cpu_mask(i, per_cpu(cpu_sibling_map, cpu))
- cpumask_clear_cpu(cpu, &per_cpu(cpu_sibling_map, i));
- for_each_cpu_mask(i, per_cpu(cpu_core_map, cpu))
- cpumask_clear_cpu(cpu, &per_cpu(cpu_core_map, i));
+ for_each_cpu_mask(i, *per_cpu(cpu_sibling_mask, cpu))
+ cpumask_clear_cpu(cpu, per_cpu(cpu_sibling_mask, i));
+ for_each_cpu_mask(i, *per_cpu(cpu_core_mask, cpu))
+ cpumask_clear_cpu(cpu, per_cpu(cpu_core_mask, i));
- cpumask_clear(&per_cpu(cpu_sibling_map, cpu));
- cpumask_clear(&per_cpu(cpu_core_map, cpu));
+ cpumask_clear(per_cpu(cpu_sibling_mask, cpu));
+ cpumask_clear(per_cpu(cpu_core_mask, cpu));
}
static void
@@ -703,12 +703,12 @@ remove_siblinginfo(int cpu)
if (cpu_data(cpu)->threads_per_core == 1 &&
cpu_data(cpu)->cores_per_socket == 1) {
- cpu_clear(cpu, per_cpu(cpu_core_map, cpu));
- cpu_clear(cpu, per_cpu(cpu_sibling_map, cpu));
+ cpumask_clear_cpu(cpu, per_cpu(cpu_core_mask, cpu));
+ cpumask_clear_cpu(cpu, per_cpu(cpu_sibling_mask, cpu));
return;
}
- last = (cpus_weight(per_cpu(cpu_core_map, cpu)) == 1);
+ last = (cpumask_weight(per_cpu(cpu_core_mask, cpu)) == 1);
/* remove it from all sibling map's */
clear_cpu_sibling_map(cpu);
@@ -794,11 +794,11 @@ set_cpu_sibling_map(int cpu)
for_each_online_cpu(i) {
if ((cpu_data(cpu)->socket_id == cpu_data(i)->socket_id)) {
- cpu_set(i, per_cpu(cpu_core_map, cpu));
- cpu_set(cpu, per_cpu(cpu_core_map, i));
+ cpumask_set_cpu(i, per_cpu(cpu_core_mask, cpu));
+ cpumask_set_cpu(cpu, per_cpu(cpu_core_mask, i));
if (cpu_data(cpu)->core_id == cpu_data(i)->core_id) {
- cpu_set(i, per_cpu(cpu_sibling_map, cpu));
- cpu_set(cpu, per_cpu(cpu_sibling_map, i));
+ cpumask_set_cpu(i, per_cpu(cpu_sibling_mask, cpu));
+ cpumask_set_cpu(cpu, per_cpu(cpu_sibling_mask, i));
}
}
}
@@ -821,6 +821,14 @@ __cpu_up (unsigned int cpu)
if (cpu_isset(cpu, cpu_callin_map))
return -EINVAL;
+ if (!per_cpu(cpu_sibling_mask, cpu) &&
+ !zalloc_cpumask_var(&per_cpu(cpu_sibling_mask, cpu)))
+ return -ENOMEM;
+
+ if (!per_cpu(cpu_core_mask, cpu) &&
+ !zalloc_cpumask_var(&per_cpu(cpu_core_mask, cpu)))
+ return -ENOMEM;
+
per_cpu(cpu_state, cpu) = CPU_UP_PREPARE;
/* Processor goes to start_secondary(), sets online flag */
ret = do_boot_cpu(sapicid, cpu);
@@ -829,8 +837,8 @@ __cpu_up (unsigned int cpu)
if (cpu_data(cpu)->threads_per_core == 1 &&
cpu_data(cpu)->cores_per_socket == 1) {
- cpu_set(cpu, per_cpu(cpu_sibling_map, cpu));
- cpu_set(cpu, per_cpu(cpu_core_map, cpu));
+ cpumask_set_cpu(cpu, per_cpu(cpu_sibling_mask, cpu));
+ cpumask_set_cpu(cpu, per_cpu(cpu_core_mask, cpu));
return 0;
}
diff --git a/xen/arch/ia64/xen/dom0_ops.c b/xen/arch/ia64/xen/dom0_ops.c
index 0cfa39f613..65dab551e3 100644
--- a/xen/arch/ia64/xen/dom0_ops.c
+++ b/xen/arch/ia64/xen/dom0_ops.c
@@ -594,9 +594,9 @@ long arch_do_sysctl(xen_sysctl_t *op, XEN_GUEST_HANDLE(xen_sysctl_t) u_sysctl)
xen_sysctl_physinfo_t *pi = &op->u.physinfo;
memset(pi, 0, sizeof(*pi));
- pi->threads_per_core = cpus_weight(per_cpu(cpu_sibling_map, 0));
+ pi->threads_per_core = cpumask_weight(per_cpu(cpu_sibling_mask, 0));
pi->cores_per_socket =
- cpus_weight(per_cpu(cpu_core_map, 0)) / pi->threads_per_core;
+ cpumask_weight(per_cpu(cpu_core_mask, 0)) / pi->threads_per_core;
pi->nr_nodes = (u32)num_online_nodes();
pi->nr_cpus = (u32)num_online_cpus();
pi->total_pages = total_pages;
diff --git a/xen/arch/ia64/xen/tlb_track.c b/xen/arch/ia64/xen/tlb_track.c
index ec7ee64ada..55c11885e6 100644
--- a/xen/arch/ia64/xen/tlb_track.c
+++ b/xen/arch/ia64/xen/tlb_track.c
@@ -504,7 +504,7 @@ __tlb_track_entry_printf(const char* func, int line,
char pcpumask_buf[NR_CPUS + 1];
char vcpumask_buf[MAX_VIRT_CPUS + 1];
cpumask_scnprintf(pcpumask_buf, sizeof(pcpumask_buf),
- entry->pcpu_dirty_mask);
+ &entry->pcpu_dirty_mask);
vcpumask_scnprintf(vcpumask_buf, sizeof(vcpumask_buf),
entry->vcpu_dirty_mask);
printk("%s:%d\n"
diff --git a/xen/arch/x86/cpu/mcheck/mce_intel.c b/xen/arch/x86/cpu/mcheck/mce_intel.c
index 86191ac2d5..f5648754bd 100644
--- a/xen/arch/x86/cpu/mcheck/mce_intel.c
+++ b/xen/arch/x86/cpu/mcheck/mce_intel.c
@@ -867,7 +867,7 @@ static void intel_machine_check(struct cpu_user_regs * regs, long error_code)
{
char *ebufp, ebuf[96] = "MCE: Fatal error happened on CPUs ";
ebufp = ebuf + strlen(ebuf);
- cpumask_scnprintf(ebufp, 95 - strlen(ebuf), mce_fatal_cpus);
+ cpumask_scnprintf(ebufp, 95 - strlen(ebuf), &mce_fatal_cpus);
mc_panic(ebuf);
}
atomic_set(&found_error, 0);
diff --git a/xen/arch/x86/irq.c b/xen/arch/x86/irq.c
index c4b77a0817..d480b10ad1 100644
--- a/xen/arch/x86/irq.c
+++ b/xen/arch/x86/irq.c
@@ -1998,7 +1998,7 @@ static void dump_irqs(unsigned char key)
spin_lock_irqsave(&desc->lock, flags);
cpumask_scnprintf(keyhandler_scratch, sizeof(keyhandler_scratch),
- desc->affinity);
+ &desc->affinity);
printk(" IRQ:%4d affinity:%s vec:%02x type=%-15s"
" status=%08x ",
irq, keyhandler_scratch, desc->arch.vector,
diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
index f5231009a4..acc1f343e8 100644
--- a/xen/arch/x86/mm.c
+++ b/xen/arch/x86/mm.c
@@ -3201,7 +3201,7 @@ int do_mmuext_op(
cpumask_clear(&mask);
for_each_online_cpu(cpu)
if ( !cpumask_intersects(&mask,
- &per_cpu(cpu_sibling_map, cpu)) )
+ per_cpu(cpu_sibling_mask, cpu)) )
cpumask_set_cpu(cpu, &mask);
flush_mask(&mask, FLUSH_CACHE);
}
diff --git a/xen/arch/x86/oprofile/op_model_p4.c b/xen/arch/x86/oprofile/op_model_p4.c
index bb6f3d70fc..fabff9aa0e 100644
--- a/xen/arch/x86/oprofile/op_model_p4.c
+++ b/xen/arch/x86/oprofile/op_model_p4.c
@@ -385,7 +385,7 @@ static unsigned int get_stagger(void)
{
#ifdef CONFIG_SMP
int cpu = smp_processor_id();
- return (cpu != first_cpu(per_cpu(cpu_sibling_map, cpu)));
+ return (cpu != cpumask_first(per_cpu(cpu_sibling_mask, cpu)));
#endif
return 0;
}
diff --git a/xen/arch/x86/smpboot.c b/xen/arch/x86/smpboot.c
index a01698beb2..e9c613cdcc 100644
--- a/xen/arch/x86/smpboot.c
+++ b/xen/arch/x86/smpboot.c
@@ -51,9 +51,9 @@
unsigned long __read_mostly trampoline_phys;
/* representing HT siblings of each logical CPU */
-DEFINE_PER_CPU_READ_MOSTLY(cpumask_t, cpu_sibling_map);
+DEFINE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_sibling_mask);
/* representing HT and core siblings of each logical CPU */
-DEFINE_PER_CPU_READ_MOSTLY(cpumask_t, cpu_core_map);
+DEFINE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_core_mask);
cpumask_t cpu_online_map __read_mostly;
EXPORT_SYMBOL(cpu_online_map);
@@ -233,10 +233,10 @@ static cpumask_t cpu_sibling_setup_map;
static void link_thread_siblings(int cpu1, int cpu2)
{
- cpu_set(cpu1, per_cpu(cpu_sibling_map, cpu2));
- cpu_set(cpu2, per_cpu(cpu_sibling_map, cpu1));
- cpu_set(cpu1, per_cpu(cpu_core_map, cpu2));
- cpu_set(cpu2, per_cpu(cpu_core_map, cpu1));
+ cpumask_set_cpu(cpu1, per_cpu(cpu_sibling_mask, cpu2));
+ cpumask_set_cpu(cpu2, per_cpu(cpu_sibling_mask, cpu1));
+ cpumask_set_cpu(cpu1, per_cpu(cpu_core_mask, cpu2));
+ cpumask_set_cpu(cpu2, per_cpu(cpu_core_mask, cpu1));
}
static void set_cpu_sibling_map(int cpu)
@@ -262,13 +262,13 @@ static void set_cpu_sibling_map(int cpu)
}
else
{
- cpu_set(cpu, per_cpu(cpu_sibling_map, cpu));
+ cpumask_set_cpu(cpu, per_cpu(cpu_sibling_mask, cpu));
}
if ( c[cpu].x86_max_cores == 1 )
{
- cpumask_copy(&per_cpu(cpu_core_map, cpu),
- &per_cpu(cpu_sibling_map, cpu));
+ cpumask_copy(per_cpu(cpu_core_mask, cpu),
+ per_cpu(cpu_sibling_mask, cpu));
c[cpu].booted_cores = 1;
return;
}
@@ -277,18 +277,18 @@ static void set_cpu_sibling_map(int cpu)
{
if ( c[cpu].phys_proc_id == c[i].phys_proc_id )
{
- cpu_set(i, per_cpu(cpu_core_map, cpu));
- cpu_set(cpu, per_cpu(cpu_core_map, i));
+ cpumask_set_cpu(i, per_cpu(cpu_core_mask, cpu));
+ cpumask_set_cpu(cpu, per_cpu(cpu_core_mask, i));
/*
* Does this new cpu bringup a new core?
*/
- if ( cpus_weight(per_cpu(cpu_sibling_map, cpu)) == 1 )
+ if ( cpumask_weight(per_cpu(cpu_sibling_mask, cpu)) == 1 )
{
/*
* for each core in package, increment
* the booted_cores for this new cpu
*/
- if ( first_cpu(per_cpu(cpu_sibling_map, i)) == i )
+ if ( cpumask_first(per_cpu(cpu_sibling_mask, i)) == i )
c[cpu].booted_cores++;
/*
* increment the core count for all
@@ -641,13 +641,14 @@ static void cpu_smpboot_free(unsigned int cpu)
{
unsigned int order;
+ free_cpumask_var(per_cpu(cpu_sibling_mask, cpu));
+ free_cpumask_var(per_cpu(cpu_core_mask, cpu));
+
order = get_order_from_pages(NR_RESERVED_GDT_PAGES);
free_xenheap_pages(per_cpu(gdt_table, cpu), order);
- per_cpu(gdt_table, cpu) = NULL;
#ifdef __x86_64__
free_xenheap_pages(per_cpu(compat_gdt_table, cpu), order);
- per_cpu(compat_gdt_table, cpu) = NULL;
#endif
order = get_order_from_bytes(IDT_ENTRIES * sizeof(idt_entry_t));
@@ -696,7 +697,9 @@ static int cpu_smpboot_alloc(unsigned int cpu)
goto oom;
memcpy(idt_tables[cpu], idt_table, IDT_ENTRIES * sizeof(idt_entry_t));
- return 0;
+ if ( zalloc_cpumask_var(&per_cpu(cpu_sibling_mask, cpu)) &&
+ zalloc_cpumask_var(&per_cpu(cpu_core_mask, cpu)) )
+ return 0;
oom:
cpu_smpboot_free(cpu);
@@ -744,6 +747,10 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
stack_base[0] = stack_start.esp;
+ if ( !zalloc_cpumask_var(&per_cpu(cpu_sibling_mask, 0)) ||
+ !zalloc_cpumask_var(&per_cpu(cpu_core_mask, 0)) )
+ panic("No memory for boot CPU sibling/core maps\n");
+
set_cpu_sibling_map(0);
/*
@@ -760,8 +767,6 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
printk(KERN_NOTICE "Local APIC not detected."
" Using dummy APIC emulation.\n");
map_cpu_to_logical_apicid();
- cpu_set(0, per_cpu(cpu_sibling_map, 0));
- cpu_set(0, per_cpu(cpu_core_map, 0));
return;
}
@@ -792,13 +797,6 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
setup_local_APIC();
map_cpu_to_logical_apicid();
- /*
- * construct cpu_sibling_map, so that we can tell sibling CPUs
- * efficiently.
- */
- cpu_set(0, per_cpu(cpu_sibling_map, 0));
- cpu_set(0, per_cpu(cpu_core_map, 0));
-
smpboot_setup_io_apic();
setup_boot_APIC_clock();
@@ -816,18 +814,18 @@ remove_siblinginfo(int cpu)
int sibling;
struct cpuinfo_x86 *c = cpu_data;
- for_each_cpu_mask ( sibling, per_cpu(cpu_core_map, cpu) )
+ for_each_cpu_mask ( sibling, *per_cpu(cpu_core_mask, cpu) )
{
- cpu_clear(cpu, per_cpu(cpu_core_map, sibling));
+ cpumask_clear_cpu(cpu, per_cpu(cpu_core_mask, sibling));
/* Last thread sibling in this cpu core going down. */
- if ( cpumask_weight(&per_cpu(cpu_sibling_map, cpu)) == 1 )
+ if ( cpumask_weight(per_cpu(cpu_sibling_mask, cpu)) == 1 )
c[sibling].booted_cores--;
}
- for_each_cpu_mask(sibling, per_cpu(cpu_sibling_map, cpu))
- cpumask_clear_cpu(cpu, &per_cpu(cpu_sibling_map, sibling));
- cpumask_clear(&per_cpu(cpu_sibling_map, cpu));
- cpumask_clear(&per_cpu(cpu_core_map, cpu));
+ for_each_cpu_mask(sibling, *per_cpu(cpu_sibling_mask, cpu))
+ cpumask_clear_cpu(cpu, per_cpu(cpu_sibling_mask, sibling));
+ cpumask_clear(per_cpu(cpu_sibling_mask, cpu));
+ cpumask_clear(per_cpu(cpu_core_mask, cpu));
c[cpu].phys_proc_id = BAD_APICID;
c[cpu].cpu_core_id = BAD_APICID;
c[cpu].compute_unit_id = BAD_APICID;
diff --git a/xen/arch/x86/sysctl.c b/xen/arch/x86/sysctl.c
index cd2f13cf09..723d623ca5 100644
--- a/xen/arch/x86/sysctl.c
+++ b/xen/arch/x86/sysctl.c
@@ -76,9 +76,9 @@ long arch_do_sysctl(
memset(pi, 0, sizeof(*pi));
pi->threads_per_core =
- cpus_weight(per_cpu(cpu_sibling_map, 0));
+ cpumask_weight(per_cpu(cpu_sibling_mask, 0));
pi->cores_per_socket =
- cpus_weight(per_cpu(cpu_core_map, 0)) / pi->threads_per_core;
+ cpumask_weight(per_cpu(cpu_core_mask, 0)) / pi->threads_per_core;
pi->nr_cpus = num_online_cpus();
pi->nr_nodes = num_online_nodes();
pi->max_node_id = MAX_NUMNODES-1;
diff --git a/xen/common/domctl.c b/xen/common/domctl.c
index 2fab24b63b..685901a4d7 100644
--- a/xen/common/domctl.c
+++ b/xen/common/domctl.c
@@ -171,7 +171,7 @@ static unsigned int default_vcpu0_location(cpumask_t *online)
* If we're on a HT system, we only auto-allocate to a non-primary HT. We
* favour high numbered CPUs in the event of a tie.
*/
- cpumask_copy(&cpu_exclude_map, &per_cpu(cpu_sibling_map, 0));
+ cpumask_copy(&cpu_exclude_map, per_cpu(cpu_sibling_mask, 0));
cpu = cpumask_first(&cpu_exclude_map);
if ( cpumask_weight(&cpu_exclude_map) > 1 )
cpu = cpumask_next(cpu, &cpu_exclude_map);
@@ -179,11 +179,11 @@ static unsigned int default_vcpu0_location(cpumask_t *online)
{
if ( cpumask_test_cpu(i, &cpu_exclude_map) )
continue;
- if ( (i == cpumask_first(&per_cpu(cpu_sibling_map, i))) &&
- (cpumask_weight(&per_cpu(cpu_sibling_map, i)) > 1) )
+ if ( (i == cpumask_first(per_cpu(cpu_sibling_mask, i))) &&
+ (cpumask_weight(per_cpu(cpu_sibling_mask, i)) > 1) )
continue;
cpumask_or(&cpu_exclude_map, &cpu_exclude_map,
- &per_cpu(cpu_sibling_map, i));
+ per_cpu(cpu_sibling_mask, i));
if ( !cnt || cnt[i] <= cnt[cpu] )
cpu = i;
}
diff --git a/xen/common/keyhandler.c b/xen/common/keyhandler.c
index 25c5215023..86e6b25e21 100644
--- a/xen/common/keyhandler.c
+++ b/xen/common/keyhandler.c
@@ -210,7 +210,7 @@ static struct keyhandler reboot_machine_keyhandler = {
static void cpuset_print(char *set, int size, const cpumask_t *mask)
{
*set++ = '{';
- set += cpulist_scnprintf(set, size-2, *mask);
+ set += cpulist_scnprintf(set, size-2, mask);
*set++ = '}';
*set++ = '\0';
}
diff --git a/xen/common/sched_credit.c b/xen/common/sched_credit.c
index 5b11c91554..cfd90a7cc8 100644
--- a/xen/common/sched_credit.c
+++ b/xen/common/sched_credit.c
@@ -502,23 +502,23 @@ _csched_cpu_pick(const struct scheduler *ops, struct vcpu *vc, bool_t commit)
nxt = cpumask_cycle(cpu, &cpus);
- if ( cpumask_test_cpu(cpu, &per_cpu(cpu_core_map, nxt)) )
+ if ( cpumask_test_cpu(cpu, per_cpu(cpu_core_mask, nxt)) )
{
/* We're on the same socket, so check the busy-ness of threads.
* Migrate if # of idlers is less at all */
- ASSERT( cpumask_test_cpu(nxt, &per_cpu(cpu_core_map, cpu)) );
+ ASSERT( cpumask_test_cpu(nxt, per_cpu(cpu_core_mask, cpu)) );
migrate_factor = 1;
- cpumask_and(&cpu_idlers, &idlers, &per_cpu(cpu_sibling_map, cpu));
- cpumask_and(&nxt_idlers, &idlers, &per_cpu(cpu_sibling_map, nxt));
+ cpumask_and(&cpu_idlers, &idlers, per_cpu(cpu_sibling_mask, cpu));
+ cpumask_and(&nxt_idlers, &idlers, per_cpu(cpu_sibling_mask, nxt));
}
else
{
/* We're on different sockets, so check the busy-ness of cores.
* Migrate only if the other core is twice as idle */
- ASSERT( !cpumask_test_cpu(nxt, &per_cpu(cpu_core_map, cpu)) );
+ ASSERT( !cpumask_test_cpu(nxt, per_cpu(cpu_core_mask, cpu)) );
migrate_factor = 2;
- cpumask_and(&cpu_idlers, &idlers, &per_cpu(cpu_core_map, cpu));
- cpumask_and(&nxt_idlers, &idlers, &per_cpu(cpu_core_map, nxt));
+ cpumask_and(&cpu_idlers, &idlers, per_cpu(cpu_core_mask, cpu));
+ cpumask_and(&nxt_idlers, &idlers, per_cpu(cpu_core_mask, nxt));
}
weight_cpu = cpumask_weight(&cpu_idlers);
@@ -531,7 +531,7 @@ _csched_cpu_pick(const struct scheduler *ops, struct vcpu *vc, bool_t commit)
cpumask_and(&nxt_idlers, &cpus, &nxt_idlers);
spc = CSCHED_PCPU(nxt);
cpu = cpumask_cycle(spc->idle_bias, &nxt_idlers);
- cpumask_andnot(&cpus, &cpus, &per_cpu(cpu_sibling_map, cpu));
+ cpumask_andnot(&cpus, &cpus, per_cpu(cpu_sibling_mask, cpu));
}
else
{
@@ -1419,9 +1419,9 @@ csched_dump_pcpu(const struct scheduler *ops, int cpu)
spc = CSCHED_PCPU(cpu);
runq = &spc->runq;
- cpumask_scnprintf(cpustr, sizeof(cpustr), per_cpu(cpu_sibling_map, cpu));
+ cpumask_scnprintf(cpustr, sizeof(cpustr), per_cpu(cpu_sibling_mask, cpu));
printk(" sort=%d, sibling=%s, ", spc->runq_sort_last, cpustr);
- cpumask_scnprintf(cpustr, sizeof(cpustr), per_cpu(cpu_core_map, cpu));
+ cpumask_scnprintf(cpustr, sizeof(cpustr), per_cpu(cpu_core_mask, cpu));
printk("core=%s\n", cpustr);
/* current VCPU */
@@ -1481,7 +1481,7 @@ csched_dump(const struct scheduler *ops)
prv->ticks_per_tslice,
vcpu_migration_delay);
- cpumask_scnprintf(idlers_buf, sizeof(idlers_buf), prv->idlers);
+ cpumask_scnprintf(idlers_buf, sizeof(idlers_buf), &prv->idlers);
printk("idlers: %s\n", idlers_buf);
printk("active vcpus:\n");
diff --git a/xen/common/sched_credit2.c b/xen/common/sched_credit2.c
index 5033819d6a..e9c450cbf6 100644
--- a/xen/common/sched_credit2.c
+++ b/xen/common/sched_credit2.c
@@ -1767,9 +1767,9 @@ csched_dump_pcpu(const struct scheduler *ops, int cpu)
runq = &RQD(ops, cpu)->runq;
- cpumask_scnprintf(cpustr, sizeof(cpustr), per_cpu(cpu_sibling_map,cpu));
+ cpumask_scnprintf(cpustr, sizeof(cpustr), per_cpu(cpu_sibling_mask, cpu));
printk(" sibling=%s, ", cpustr);
- cpumask_scnprintf(cpustr, sizeof(cpustr), per_cpu(cpu_core_map,cpu));
+ cpumask_scnprintf(cpustr, sizeof(cpustr), per_cpu(cpu_core_mask, cpu));
printk("core=%s\n", cpustr);
/* current VCPU */
diff --git a/xen/include/asm-ia64/linux-xen/asm/smp.h b/xen/include/asm-ia64/linux-xen/asm/smp.h
index 9783d15097..ae4fcc2623 100644
--- a/xen/include/asm-ia64/linux-xen/asm/smp.h
+++ b/xen/include/asm-ia64/linux-xen/asm/smp.h
@@ -62,8 +62,8 @@ extern char no_int_routing __devinitdata;
extern cpumask_t cpu_online_map;
#define cpu_is_offline(cpu) unlikely(!cpu_online(cpu))
-DECLARE_PER_CPU(cpumask_t, cpu_core_map);
-DECLARE_PER_CPU(cpumask_t, cpu_sibling_map);
+DECLARE_PER_CPU(cpumask_var_t, cpu_core_mask);
+DECLARE_PER_CPU(cpumask_var_t, cpu_sibling_mask);
extern int smp_num_siblings;
extern int smp_num_cpucores;
extern void __iomem *ipi_base_addr;
diff --git a/xen/include/asm-x86/smp.h b/xen/include/asm-x86/smp.h
index ba8fa8aeab..f8caff292d 100644
--- a/xen/include/asm-x86/smp.h
+++ b/xen/include/asm-x86/smp.h
@@ -25,8 +25,8 @@
*/
extern void smp_alloc_memory(void);
-DECLARE_PER_CPU(cpumask_t, cpu_sibling_map);
-DECLARE_PER_CPU(cpumask_t, cpu_core_map);
+DECLARE_PER_CPU(cpumask_var_t, cpu_sibling_mask);
+DECLARE_PER_CPU(cpumask_var_t, cpu_core_mask);
void smp_send_nmi_allbutself(void);
diff --git a/xen/include/xen/cpumask.h b/xen/include/xen/cpumask.h
index 452a822435..088b8517bc 100644
--- a/xen/include/xen/cpumask.h
+++ b/xen/include/xen/cpumask.h
@@ -320,20 +320,16 @@ static inline const cpumask_t *cpumask_of(unsigned int cpu)
#define cpus_addr(src) ((src).bits)
#define cpumask_bits(maskp) ((maskp)->bits)
-#define cpumask_scnprintf(buf, len, src) \
- __cpumask_scnprintf((buf), (len), &(src), nr_cpu_ids)
-static inline int __cpumask_scnprintf(char *buf, int len,
- const cpumask_t *srcp, int nbits)
+static inline int cpumask_scnprintf(char *buf, int len,
+ const cpumask_t *srcp)
{
- return bitmap_scnprintf(buf, len, srcp->bits, nbits);
+ return bitmap_scnprintf(buf, len, srcp->bits, nr_cpu_ids);
}
-#define cpulist_scnprintf(buf, len, src) \
- __cpulist_scnprintf((buf), (len), &(src), nr_cpu_ids)
-static inline int __cpulist_scnprintf(char *buf, int len,
- const cpumask_t *srcp, int nbits)
+static inline int cpulist_scnprintf(char *buf, int len,
+ const cpumask_t *srcp)
{
- return bitmap_scnlistprintf(buf, len, srcp->bits, nbits);
+ return bitmap_scnlistprintf(buf, len, srcp->bits, nr_cpu_ids);
}
/*