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:
committed by
Catalin Marinas
parent
1234ad686f
commit
c25349fd3c
@@ -617,7 +617,18 @@ el1_irq:
|
|||||||
kernel_entry 1
|
kernel_entry 1
|
||||||
enable_da_f
|
enable_da_f
|
||||||
#ifdef CONFIG_TRACE_IRQFLAGS
|
#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
|
bl trace_hardirqs_off
|
||||||
|
1:
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
irq_handler
|
irq_handler
|
||||||
@@ -637,8 +648,18 @@ alternative_else_nop_endif
|
|||||||
1:
|
1:
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_TRACE_IRQFLAGS
|
#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
|
#endif
|
||||||
|
bl trace_hardirqs_on
|
||||||
|
1:
|
||||||
|
#endif
|
||||||
|
|
||||||
kernel_exit 1
|
kernel_exit 1
|
||||||
ENDPROC(el1_irq)
|
ENDPROC(el1_irq)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user