diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2009-08-14 10:58:32 +0100 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2009-08-14 10:58:32 +0100 |
commit | a569ec61475b1df9f78ee369ad99d1f04a481eeb (patch) | |
tree | 89b1e955565817ea97ecbdca749d53c7f89b6eb0 /xen/arch/x86/nmi.c | |
parent | 3ad8ef602620bdc428a6de55014605aebf78794e (diff) | |
download | xen-a569ec61475b1df9f78ee369ad99d1f04a481eeb.tar.gz xen-a569ec61475b1df9f78ee369ad99d1f04a481eeb.tar.bz2 xen-a569ec61475b1df9f78ee369ad99d1f04a481eeb.zip |
VMX: issue an NMI rather than just calling the NMI handler
when the VMEXIT code indicates that an NMI has been raised.
Otherwise we might hit a real NMI while in the handler.
Signed-off-by: Tim Deegan <Tim.Deegan@citrix.com>
Diffstat (limited to 'xen/arch/x86/nmi.c')
-rw-r--r-- | xen/arch/x86/nmi.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/xen/arch/x86/nmi.c b/xen/arch/x86/nmi.c index f1d8ec3093..7400442433 100644 --- a/xen/arch/x86/nmi.c +++ b/xen/arch/x86/nmi.c @@ -441,18 +441,21 @@ void nmi_watchdog_tick(struct cpu_user_regs * regs) * 8-3 and 8-4 in IA32 Reference Manual Volume 3. We send the IPI to * our own APIC ID explicitly which is valid. */ -static void do_nmi_trigger(unsigned char key) +void self_nmi(void) { u32 id = get_apic_id(); - - printk("Triggering NMI on APIC ID %x\n", id); - local_irq_disable(); apic_wait_icr_idle(); apic_icr_write(APIC_DM_NMI | APIC_DEST_PHYSICAL, id); local_irq_enable(); } +static void do_nmi_trigger(unsigned char key) +{ + printk("Triggering NMI on APIC ID %x\n", get_apic_id()); + self_nmi(); +} + static struct keyhandler nmi_trigger_keyhandler = { .u.fn = do_nmi_trigger, .desc = "trigger an NMI" |