Messages in this thread Patch in this message | | | Date | Sun, 08 Mar 2020 23:24:12 +0100 | From | Thomas Gleixner <> | Subject | [patch part-II V2 13/13] x86/entry/common: Split irq tracing in prepare_exit_to_usermode() |
| |
As in entry from user mode, lockdep and tracing have different requirements. lockdep needs to know about the interrupts off state accross the call to user_enter_irqsoff() but tracing is unsafe after the call.
Split it up and tell the tracer that interrupts are going to be enabled before calling user_enter_irqsoff() and tell lockdep afterwards.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de> --- arch/x86/entry/common.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)
--- a/arch/x86/entry/common.c +++ b/arch/x86/entry/common.c @@ -251,9 +251,19 @@ static noinline void __prepare_exit_to_u { __prepare_exit_to_usermode(regs); + /* + * Return to user space enables interrupts. Tell the tracer before + * invoking user_enter_irqsoff() which switches to CONTEXT_USER and + * RCU to rcuidle state. Lockdep still needs to keep the irqs + * disabled state. + */ + __trace_hardirqs_on(); + user_enter_irqoff(); mds_user_clear_cpu_buffers(); - trace_hardirqs_on(); + + /* All done. Tell lockdep as well. */ + lockdep_hardirqs_on(CALLER_ADDR0); } NOKPROBE_SYMBOL(prepare_exit_to_usermode);
| |