Merge tag 'arm64-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64...
[linux-2.6-block.git] / drivers / irqchip / irq-gic-v3.c
index 6377cb864f4c4a180b64dd85a00e20d62e71ba01..f3e44d6d9255cf73ceae5d1b144ef7d9f7b9c48f 100644 (file)
@@ -461,8 +461,12 @@ static void gic_deactivate_unhandled(u32 irqnr)
 
 static inline void gic_handle_nmi(u32 irqnr, struct pt_regs *regs)
 {
+       bool irqs_enabled = interrupts_enabled(regs);
        int err;
 
+       if (irqs_enabled)
+               nmi_enter();
+
        if (static_branch_likely(&supports_deactivate_key))
                gic_write_eoir(irqnr);
        /*
@@ -474,6 +478,9 @@ static inline void gic_handle_nmi(u32 irqnr, struct pt_regs *regs)
        err = handle_domain_nmi(gic_data.domain, irqnr, regs);
        if (err)
                gic_deactivate_unhandled(irqnr);
+
+       if (irqs_enabled)
+               nmi_exit();
 }
 
 static asmlinkage void __exception_irq_entry gic_handle_irq(struct pt_regs *regs)