From: Andrew Cooper Date: Thu, 15 Nov 2012 09:54:38 +0000 (+0000) Subject: x86/nmi: self_nmi() should not unconditionally enable interrupts X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~7650 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=322cfce187c3b69b2f9bc56c5e81f6b6c893e13c;p=xen.git x86/nmi: self_nmi() should not unconditionally enable interrupts It seems that all current callers have interrupts enabled, making the code currently safe but dangerous. Also, fix a trailing whitespace issue. Signed-off-by: Andrew Cooper Committed-by: Keir Fraser --- diff --git a/xen/arch/x86/nmi.c b/xen/arch/x86/nmi.c index 6ee407f8b6..4fd6711e82 100644 --- a/xen/arch/x86/nmi.c +++ b/xen/arch/x86/nmi.c @@ -482,13 +482,14 @@ 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. */ -void self_nmi(void) +void self_nmi(void) { + unsigned long flags; u32 id = get_apic_id(); - local_irq_disable(); + local_irq_save(flags); apic_wait_icr_idle(); apic_icr_write(APIC_DM_NMI | APIC_DEST_PHYSICAL, id); - local_irq_enable(); + local_irq_restore(flags); } static void do_nmi_trigger(unsigned char key)