2011-12-02 21:25:29 +01:00
|
|
|
changeset: 23949:39df16923958
|
|
|
|
user: Jan Beulich <jbeulich@suse.com>
|
|
|
|
date: Thu Oct 13 10:00:13 2011 +0200
|
|
|
|
files: xen/arch/x86/cpu/mcheck/vmce.c xen/arch/x86/traps.c xen/common/schedule.c xen/include/xen/sched.h
|
|
|
|
description:
|
|
|
|
constify vcpu_set_affinity()'s second parameter
|
|
|
|
|
|
|
|
None of the callers actually make use of the function's returning of
|
|
|
|
the old affinity through its second parameter, and eliminating this
|
|
|
|
capability allows some callers to no longer use a local variable here,
|
|
|
|
reducing their stack footprint significantly when building with large
|
|
|
|
NR_CPUS.
|
|
|
|
|
|
|
|
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
|
|
|
Acked-by: Keir Fraser <keir@xen.org>
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
xen/arch/x86/cpu/mcheck/vmce.c | 5 +----
|
|
|
|
xen/arch/x86/traps.c | 10 ++--------
|
|
|
|
xen/common/schedule.c | 6 ++----
|
|
|
|
xen/include/xen/sched.h | 2 +-
|
|
|
|
4 files changed, 6 insertions(+), 17 deletions(-)
|
|
|
|
|
2012-08-10 23:38:41 +02:00
|
|
|
Index: xen-4.1.3-testing/xen/arch/x86/cpu/mcheck/vmce.c
|
2011-12-02 21:25:29 +01:00
|
|
|
===================================================================
|
2012-08-10 23:38:41 +02:00
|
|
|
--- xen-4.1.3-testing.orig/xen/arch/x86/cpu/mcheck/vmce.c
|
|
|
|
+++ xen-4.1.3-testing/xen/arch/x86/cpu/mcheck/vmce.c
|
2011-12-02 21:25:29 +01:00
|
|
|
@@ -304,7 +304,6 @@ int vmce_wrmsr(u32 msr, u64 val)
|
|
|
|
int inject_vmce(struct domain *d)
|
|
|
|
{
|
|
|
|
int cpu = smp_processor_id();
|
|
|
|
- cpumask_t affinity;
|
|
|
|
|
|
|
|
/* PV guest and HVM guest have different vMCE# injection methods. */
|
|
|
|
if ( !test_and_set_bool(d->vcpu[0]->mce_pending) )
|
|
|
|
@@ -323,11 +322,9 @@ int inject_vmce(struct domain *d)
|
|
|
|
{
|
|
|
|
d->vcpu[0]->cpu_affinity_tmp =
|
|
|
|
d->vcpu[0]->cpu_affinity;
|
|
|
|
- cpus_clear(affinity);
|
|
|
|
- cpu_set(cpu, affinity);
|
|
|
|
mce_printk(MCE_VERBOSE, "MCE: CPU%d set affinity, old %d\n",
|
|
|
|
cpu, d->vcpu[0]->processor);
|
|
|
|
- vcpu_set_affinity(d->vcpu[0], &affinity);
|
|
|
|
+ vcpu_set_affinity(d->vcpu[0], cpumask_of(cpu));
|
|
|
|
vcpu_kick(d->vcpu[0]);
|
|
|
|
}
|
|
|
|
else
|
2012-08-10 23:38:41 +02:00
|
|
|
Index: xen-4.1.3-testing/xen/arch/x86/traps.c
|
2011-12-02 21:25:29 +01:00
|
|
|
===================================================================
|
2012-08-10 23:38:41 +02:00
|
|
|
--- xen-4.1.3-testing.orig/xen/arch/x86/traps.c
|
|
|
|
+++ xen-4.1.3-testing/xen/arch/x86/traps.c
|
|
|
|
@@ -3106,7 +3106,6 @@ static void nmi_mce_softirq(void)
|
2011-12-02 21:25:29 +01:00
|
|
|
{
|
|
|
|
int cpu = smp_processor_id();
|
|
|
|
struct softirq_trap *st = &per_cpu(softirq_trap, cpu);
|
|
|
|
- cpumask_t affinity;
|
|
|
|
|
|
|
|
BUG_ON(st == NULL);
|
|
|
|
BUG_ON(st->vcpu == NULL);
|
2012-08-10 23:38:41 +02:00
|
|
|
@@ -3122,9 +3121,7 @@ static void nmi_mce_softirq(void)
|
2011-12-02 21:25:29 +01:00
|
|
|
* Make sure to wakeup the vcpu on the
|
|
|
|
* specified processor.
|
|
|
|
*/
|
|
|
|
- cpus_clear(affinity);
|
|
|
|
- cpu_set(st->processor, affinity);
|
|
|
|
- vcpu_set_affinity(st->vcpu, &affinity);
|
|
|
|
+ vcpu_set_affinity(st->vcpu, cpumask_of(st->processor));
|
|
|
|
|
|
|
|
/* Affinity is restored in the iret hypercall. */
|
|
|
|
}
|
2012-08-10 23:38:41 +02:00
|
|
|
@@ -3199,14 +3196,11 @@ void async_exception_cleanup(struct vcpu
|
2011-12-02 21:25:29 +01:00
|
|
|
!test_and_set_bool(curr->mce_pending) )
|
|
|
|
{
|
|
|
|
int cpu = smp_processor_id();
|
|
|
|
- cpumask_t affinity;
|
|
|
|
|
|
|
|
curr->cpu_affinity_tmp = curr->cpu_affinity;
|
|
|
|
- cpus_clear(affinity);
|
|
|
|
- cpu_set(cpu, affinity);
|
|
|
|
printk(XENLOG_DEBUG "MCE: CPU%d set affinity, old %d\n",
|
|
|
|
cpu, curr->processor);
|
|
|
|
- vcpu_set_affinity(curr, &affinity);
|
|
|
|
+ vcpu_set_affinity(curr, cpumask_of(cpu));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-08-10 23:38:41 +02:00
|
|
|
Index: xen-4.1.3-testing/xen/common/schedule.c
|
2011-12-02 21:25:29 +01:00
|
|
|
===================================================================
|
2012-08-10 23:38:41 +02:00
|
|
|
--- xen-4.1.3-testing.orig/xen/common/schedule.c
|
|
|
|
+++ xen-4.1.3-testing/xen/common/schedule.c
|
|
|
|
@@ -598,9 +598,9 @@ int cpu_disable_scheduler(unsigned int c
|
2011-12-02 21:25:29 +01:00
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
-int vcpu_set_affinity(struct vcpu *v, cpumask_t *affinity)
|
|
|
|
+int vcpu_set_affinity(struct vcpu *v, const cpumask_t *affinity)
|
|
|
|
{
|
|
|
|
- cpumask_t online_affinity, old_affinity;
|
|
|
|
+ cpumask_t online_affinity;
|
|
|
|
cpumask_t *online;
|
|
|
|
|
|
|
|
if ( v->domain->is_pinned )
|
2012-08-10 23:38:41 +02:00
|
|
|
@@ -612,9 +612,7 @@ int vcpu_set_affinity(struct vcpu *v, cp
|
2011-12-02 21:25:29 +01:00
|
|
|
|
|
|
|
vcpu_schedule_lock_irq(v);
|
|
|
|
|
|
|
|
- old_affinity = v->cpu_affinity;
|
|
|
|
v->cpu_affinity = *affinity;
|
|
|
|
- *affinity = old_affinity;
|
|
|
|
if ( !cpu_isset(v->processor, v->cpu_affinity) )
|
|
|
|
set_bit(_VPF_migrating, &v->pause_flags);
|
|
|
|
|
2012-08-10 23:38:41 +02:00
|
|
|
Index: xen-4.1.3-testing/xen/include/xen/sched.h
|
2011-12-02 21:25:29 +01:00
|
|
|
===================================================================
|
2012-08-10 23:38:41 +02:00
|
|
|
--- xen-4.1.3-testing.orig/xen/include/xen/sched.h
|
|
|
|
+++ xen-4.1.3-testing/xen/include/xen/sched.h
|
|
|
|
@@ -624,7 +624,7 @@ void scheduler_free(struct scheduler *sc
|
2011-12-02 21:25:29 +01:00
|
|
|
int schedule_cpu_switch(unsigned int cpu, struct cpupool *c);
|
|
|
|
void vcpu_force_reschedule(struct vcpu *v);
|
|
|
|
int cpu_disable_scheduler(unsigned int cpu);
|
|
|
|
-int vcpu_set_affinity(struct vcpu *v, cpumask_t *affinity);
|
|
|
|
+int vcpu_set_affinity(struct vcpu *v, const cpumask_t *affinity);
|
|
|
|
|
|
|
|
void vcpu_runstate_get(struct vcpu *v, struct vcpu_runstate_info *runstate);
|
|
|
|
uint64_t get_cpu_idle_time(unsigned int cpu);
|