[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20200514213230.02c13bd2@oasis.local.home>
Date: Thu, 14 May 2020 21:32:30 -0400
From: Steven Rostedt <rostedt@...dmis.org>
To: Thomas Gleixner <tglx@...utronix.de>
Cc: LKML <linux-kernel@...r.kernel.org>, x86@...nel.org,
"Paul E. McKenney" <paulmck@...nel.org>,
Andy Lutomirski <luto@...nel.org>,
Alexandre Chartre <alexandre.chartre@...cle.com>,
Frederic Weisbecker <frederic@...nel.org>,
Paolo Bonzini <pbonzini@...hat.com>,
Sean Christopherson <sean.j.christopherson@...el.com>,
Masami Hiramatsu <mhiramat@...nel.org>,
Petr Mladek <pmladek@...e.com>,
Joel Fernandes <joel@...lfernandes.org>,
Boris Ostrovsky <boris.ostrovsky@...cle.com>,
Juergen Gross <jgross@...e.com>,
Brian Gerst <brgerst@...il.com>,
Mathieu Desnoyers <mathieu.desnoyers@...icios.com>,
Josh Poimboeuf <jpoimboe@...hat.com>,
Will Deacon <will@...nel.org>,
Tom Lendacky <thomas.lendacky@....com>,
Wei Liu <wei.liu@...nel.org>,
Michael Kelley <mikelley@...rosoft.com>,
Jason Chen CJ <jason.cj.chen@...el.com>,
Zhao Yakui <yakui.zhao@...el.com>,
"Peter Zijlstra (Intel)" <peterz@...radead.org>
Subject: Re: [patch V5 03/38] nmi, tracing: Provide nmi_enter/exit_notrace()
On Tue, 12 May 2020 23:01:02 +0200
Thomas Gleixner <tglx@...utronix.de> wrote:
> To fully isolate #DB and #BP from instrumentable code it's necessary to
> avoid invoking the hardware latency tracer on nmi_enter/exit().
>
> Provide nmi_enter/exit() variants which are not invoking the hardware
> latency tracer. That allows to put calls explicitely into the call sites
> outside of the kprobe handling.
The only thing the hardware latency tracer is using this for is to
denote that something happened while it was timing "nothing" happening.
It's accounting only. Now it does use a per-cpu variable (which I see
in other patches can be an issue) and calls time_get().
Now if per-cpu nor time_get() can not be called in noinstr, then I'm
perfectly fine with this patch. But if they are allowed, I don't think
that this patch is necessary, and we could perhaps mark the hardware
latency hook as noinstr instead?
-- Steve
>
> Signed-off-by: Thomas Gleixner <tglx@...utronix.de>
> ---
> V5: New patch
> ---
> include/linux/hardirq.h | 18 ++++++++++++++----
> 1 file changed, 14 insertions(+), 4 deletions(-)
>
> --- a/include/linux/hardirq.h
> +++ b/include/linux/hardirq.h
> @@ -77,28 +77,38 @@ extern void irq_exit(void);
> /*
> * nmi_enter() can nest up to 15 times; see NMI_BITS.
> */
> -#define nmi_enter() \
> +#define nmi_enter_notrace() \
> do { \
> arch_nmi_enter(); \
> printk_nmi_enter(); \
> lockdep_off(); \
> - ftrace_nmi_enter(); \
> BUG_ON(in_nmi() == NMI_MASK); \
> __preempt_count_add(NMI_OFFSET + HARDIRQ_OFFSET); \
> rcu_nmi_enter(); \
> lockdep_hardirq_enter(); \
> } while (0)
>
> -#define nmi_exit() \
> +#define nmi_enter() \
> + do { \
> + nmi_enter_notrace(); \
> + ftrace_nmi_enter(); \
> + } while (0)
> +
> +#define nmi_exit_notrace() \
> do { \
> lockdep_hardirq_exit(); \
> rcu_nmi_exit(); \
> BUG_ON(!in_nmi()); \
> __preempt_count_sub(NMI_OFFSET + HARDIRQ_OFFSET); \
> - ftrace_nmi_exit(); \
> lockdep_on(); \
> printk_nmi_exit(); \
> arch_nmi_exit(); \
> } while (0)
>
> +#define nmi_exit() \
> + do { \
> + ftrace_nmi_exit(); \
> + nmi_exit_notrace(); \
> + } while (0)
> +
> #endif /* LINUX_HARDIRQ_H */
Powered by blists - more mailing lists