arm64: Skip irqflags tracing for NMI in IRQs disabled context
When an NMI is raised while interrupts where disabled, the IRQ tracing already is in the correct state (i.e. hardirqs_off) and should be left as such when returning to the interrupted context. Check whether PMR was masking interrupts when the NMI was raised and skip IRQ tracing if necessary. Signed-off-by: Julien Thierry <julien.thierry@arm.com> Acked-by: Marc Zyngier <marc.zyngier@arm.com> Cc: Will Deacon <will.deacon@arm.com> Cc: Marc Zyngier <marc.zyngier@arm.com> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
This commit is contained in:
parent
1234ad686f
commit
c25349fd3c
@ -617,7 +617,18 @@ el1_irq:
|
||||
kernel_entry 1
|
||||
enable_da_f
|
||||
#ifdef CONFIG_TRACE_IRQFLAGS
|
||||
#ifdef CONFIG_ARM64_PSEUDO_NMI
|
||||
alternative_if ARM64_HAS_IRQ_PRIO_MASKING
|
||||
ldr x20, [sp, #S_PMR_SAVE]
|
||||
alternative_else
|
||||
mov x20, #GIC_PRIO_IRQON
|
||||
alternative_endif
|
||||
cmp x20, #GIC_PRIO_IRQOFF
|
||||
/* Irqs were disabled, don't trace */
|
||||
b.ls 1f
|
||||
#endif
|
||||
bl trace_hardirqs_off
|
||||
1:
|
||||
#endif
|
||||
|
||||
irq_handler
|
||||
@ -637,8 +648,18 @@ alternative_else_nop_endif
|
||||
1:
|
||||
#endif
|
||||
#ifdef CONFIG_TRACE_IRQFLAGS
|
||||
bl trace_hardirqs_on
|
||||
#ifdef CONFIG_ARM64_PSEUDO_NMI
|
||||
/*
|
||||
* if IRQs were disabled when we received the interrupt, we have an NMI
|
||||
* and we are not re-enabling interrupt upon eret. Skip tracing.
|
||||
*/
|
||||
cmp x20, #GIC_PRIO_IRQOFF
|
||||
b.ls 1f
|
||||
#endif
|
||||
bl trace_hardirqs_on
|
||||
1:
|
||||
#endif
|
||||
|
||||
kernel_exit 1
|
||||
ENDPROC(el1_irq)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user