# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1215170253 -3600
# Node ID d711529e3de1552b00b4eced40ba659787f70b5d
# Parent 2922c423a1aa9dc731955f49f3cd419f3f0b7bf5
Revert incorrectly checked-in changes.
Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
---
xen/arch/x86/traps.c | 74 ++++---------------------------------
xen/arch/x86/x86_32/traps.c | 4 --
xen/arch/x86/x86_64/compat/traps.c | 4 --
xen/arch/x86/x86_64/traps.c | 4 --
4 files changed, 9 insertions(+), 77 deletions(-)
diff -r 2922c423a1aa -r d711529e3de1 xen/arch/x86/traps.c
--- a/xen/arch/x86/traps.c Fri Jul 04 12:00:38 2008 +0100
+++ b/xen/arch/x86/traps.c Fri Jul 04 12:17:33 2008 +0100
@@ -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(st
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;
-
- if ( (d == NULL) || (d->vcpu[0] == NULL) )
+ struct domain *d;
+ struct vcpu *v;
+
+ 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 -r 2922c423a1aa -r d711529e3de1 xen/arch/x86/x86_32/traps.c
--- a/xen/arch/x86/x86_32/traps.c Fri Jul 04 12:00:38 2008 +0100
+++ b/xen/arch/x86/x86_32/traps.c Fri Jul 04 12:17:33 2008 +0100
@@ -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 -r 2922c423a1aa -r d711529e3de1 xen/arch/x86/x86_64/compat/traps.c
--- a/xen/arch/x86/x86_64/compat/traps.c Fri Jul 04 12:00:38 2008 +0100
+++ b/xen/arch/x86/x86_64/compat/traps.c Fri Jul 04 12:17:33 2008 +0100
@@ -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 -r 2922c423a1aa -r d711529e3de1 xen/arch/x86/x86_64/traps.c
--- a/xen/arch/x86/x86_64/traps.c Fri Jul 04 12:00:38 2008 +0100
+++ b/xen/arch/x86/x86_64/traps.c Fri Jul 04 12:17:33 2008 +0100
@@ -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;
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|