|
|
@@ -51,15 +51,19 @@ ENTRY(native_usergs_sysret64)
|
|
|
END(native_usergs_sysret64)
|
|
|
#endif /* CONFIG_PARAVIRT */
|
|
|
|
|
|
-.macro TRACE_IRQS_IRETQ
|
|
|
+.macro TRACE_IRQS_FLAGS flags:req
|
|
|
#ifdef CONFIG_TRACE_IRQFLAGS
|
|
|
- bt $9, EFLAGS(%rsp) /* interrupts off? */
|
|
|
+ bt $9, \flags /* interrupts off? */
|
|
|
jnc 1f
|
|
|
TRACE_IRQS_ON
|
|
|
1:
|
|
|
#endif
|
|
|
.endm
|
|
|
|
|
|
+.macro TRACE_IRQS_IRETQ
|
|
|
+ TRACE_IRQS_FLAGS EFLAGS(%rsp)
|
|
|
+.endm
|
|
|
+
|
|
|
/*
|
|
|
* When dynamic function tracer is enabled it will add a breakpoint
|
|
|
* to all locations that it is about to modify, sync CPUs, update
|
|
|
@@ -943,11 +947,13 @@ ENTRY(native_load_gs_index)
|
|
|
FRAME_BEGIN
|
|
|
pushfq
|
|
|
DISABLE_INTERRUPTS(CLBR_ANY & ~CLBR_RDI)
|
|
|
+ TRACE_IRQS_OFF
|
|
|
SWAPGS
|
|
|
.Lgs_change:
|
|
|
movl %edi, %gs
|
|
|
2: ALTERNATIVE "", "mfence", X86_BUG_SWAPGS_FENCE
|
|
|
SWAPGS
|
|
|
+ TRACE_IRQS_FLAGS (%rsp)
|
|
|
popfq
|
|
|
FRAME_END
|
|
|
ret
|