aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2008-07-04 12:17:33 +0100
committerKeir Fraser <keir.fraser@citrix.com>2008-07-04 12:17:33 +0100
commite2b0df4318764327d16689b96d9be7c17942c673 (patch)
treee2bcab210b0f3c7017db2f4b75820fec0046b848
parent17636f47a474af4e1da8275cd8bcf63c70643aef (diff)
downloadxen-e2b0df4318764327d16689b96d9be7c17942c673.tar.gz
xen-e2b0df4318764327d16689b96d9be7c17942c673.tar.bz2
xen-e2b0df4318764327d16689b96d9be7c17942c673.zip
Revert incorrectly checked-in changes.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
-rw-r--r--xen/arch/x86/traps.c72
-rw-r--r--xen/arch/x86/x86_32/traps.c4
-rw-r--r--xen/arch/x86/x86_64/compat/traps.c4
-rw-r--r--xen/arch/x86/x86_64/traps.c4
4 files changed, 8 insertions, 76 deletions
diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c
index 8188fcf48e..89032bb91d 100644
--- a/xen/arch/x86/traps.c
+++ b/xen/arch/x86/traps.c
@@ -61,7 +61,6 @@
#include <asm/msr.h>
#include <asm/shared.h>
#include <asm/x86_emulate.h>
-#include <asm/traps.h>
#include <asm/hvm/vpt.h>
#include <public/arch-x86/cpuid.h>
@@ -2679,51 +2678,25 @@ asmlinkage void do_general_protection(struct cpu_user_regs *regs)
panic("GENERAL PROTECTION FAULT\n[error_code=%04x]\n", regs->error_code);
}
-static DEFINE_PER_CPU(struct softirq_trap, softirq_trap);
-
static void nmi_mce_softirq(void)
{
- 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);
-
- /* Set the tmp value unconditionally, so that
- * the check in the iret hypercall works. */
- st->vcpu->cpu_affinity_tmp = st->vcpu->cpu_affinity;
-
- if ((cpu != st->processor)
- || (st->processor != st->vcpu->processor))
- {
- /* We are on a different physical cpu.
- * Make sure to wakeup the vcpu on the
- * specified processor.
- */
- cpus_clear(affinity);
- cpu_set(st->processor, affinity);
- vcpu_set_affinity(st->vcpu, &affinity);
-
- /* Affinity is restored in the iret hypercall. */
- }
-
- /* Only used to defer wakeup of domain/vcpu to
- * a safe (non-NMI/MCE) context.
- */
- vcpu_kick(st->vcpu);
+ /* Only used to defer wakeup of dom0,vcpu0 to a safe (non-NMI) context. */
+ vcpu_kick(dom0->vcpu[0]);
}
static void nmi_dom0_report(unsigned int reason_idx)
{
- struct domain *d = dom0;
+ struct domain *d;
+ struct vcpu *v;
- if ( (d == NULL) || (d->vcpu[0] == NULL) )
+ if ( ((d = dom0) == NULL) || ((v = d->vcpu[0]) == NULL) )
return;
set_bit(reason_idx, nmi_reason(d));
- send_guest_trap(d, 0, TRAP_nmi);
+ /* Not safe to wake a vcpu here, or even to schedule a tasklet! */
+ if ( !test_and_set_bool(v->nmi_pending) )
+ raise_softirq(NMI_MCE_SOFTIRQ);
}
asmlinkage void mem_parity_error(struct cpu_user_regs *regs)
@@ -3037,35 +3010,6 @@ long unregister_guest_nmi_callback(void)
return 0;
}
-int send_guest_trap(struct domain *d, uint16_t vcpuid, unsigned int trap_nr)
-{
- struct vcpu *v;
- struct softirq_trap *st;
-
- BUG_ON(d == NULL);
- BUG_ON(vcpuid >= MAX_VIRT_CPUS);
- v = d->vcpu[vcpuid];
-
- switch (trap_nr) {
- case TRAP_nmi:
- if ( !test_and_set_bool(v->nmi_pending) ) {
- st = &per_cpu(softirq_trap, smp_processor_id());
- st->domain = dom0;
- st->vcpu = dom0->vcpu[0];
- st->processor = st->vcpu->processor;
-
- /* not safe to wake up a vcpu here */
- raise_softirq(NMI_MCE_SOFTIRQ);
- return 0;
- }
- break;
- }
-
- /* delivery failed */
- return -EIO;
-}
-
-
long do_set_trap_table(XEN_GUEST_HANDLE(const_trap_info_t) traps)
{
struct trap_info cur;
diff --git a/xen/arch/x86/x86_32/traps.c b/xen/arch/x86/x86_32/traps.c
index ea75aa7bc2..a09d15b523 100644
--- a/xen/arch/x86/x86_32/traps.c
+++ b/xen/arch/x86/x86_32/traps.c
@@ -255,10 +255,6 @@ unsigned long do_iret(void)
goto exit_and_crash;
}
- /* Restore affinity. */
- if (!cpus_equal(v->cpu_affinity_tmp, v->cpu_affinity))
- vcpu_set_affinity(v, &v->cpu_affinity_tmp);
-
/* No longer in NMI context. */
v->nmi_masked = 0;
diff --git a/xen/arch/x86/x86_64/compat/traps.c b/xen/arch/x86/x86_64/compat/traps.c
index 22098ea825..65c1e90147 100644
--- a/xen/arch/x86/x86_64/compat/traps.c
+++ b/xen/arch/x86/x86_64/compat/traps.c
@@ -121,10 +121,6 @@ unsigned int compat_iret(void)
else
regs->_esp += 16;
- /* Restore affinity. */
- if (!cpus_equal(v->cpu_affinity_tmp, v->cpu_affinity))
- vcpu_set_affinity(v, &v->cpu_affinity_tmp);
-
/* No longer in NMI context. */
v->nmi_masked = 0;
diff --git a/xen/arch/x86/x86_64/traps.c b/xen/arch/x86/x86_64/traps.c
index 700d3a0e94..14769786ec 100644
--- a/xen/arch/x86/x86_64/traps.c
+++ b/xen/arch/x86/x86_64/traps.c
@@ -288,10 +288,6 @@ unsigned long do_iret(void)
regs->rcx = iret_saved.rcx;
}
- /* Restore affinity. */
- if (!cpus_equal(v->cpu_affinity_tmp, v->cpu_affinity))
- vcpu_set_affinity(v, &v->cpu_affinity_tmp);
-
/* No longer in NMI context. */
v->nmi_masked = 0;