From: Alexandre Chartre <alexandre.chartre@oracle.com>
To: Thomas Gleixner <tglx@linutronix.de>,
LKML <linux-kernel@vger.kernel.org>
Cc: x86@kernel.org, Paul McKenney <paulmck@kernel.org>,
Josh Poimboeuf <jpoimboe@redhat.com>,
"Joel Fernandes (Google)" <joel@joelfernandes.org>,
"Steven Rostedt (VMware)" <rostedt@goodmis.org>,
Masami Hiramatsu <mhiramat@kernel.org>,
Alexei Starovoitov <ast@kernel.org>,
Frederic Weisbecker <frederic@kernel.org>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Brian Gerst <brgerst@gmail.com>, Juergen Gross <jgross@suse.com>,
Peter Zijlstra <peterz@infradead.org>,
Tom Lendacky <thomas.lendacky@amd.com>,
Paolo Bonzini <pbonzini@redhat.com>,
kvm@vger.kernel.org
Subject: Re: [RESEND][patch V3 05/23] tracing: Provide lockdep less trace_hardirqs_on/off() variants
Date: Fri, 3 Apr 2020 10:34:56 +0200 [thread overview]
Message-ID: <322ac9e0-9567-8e7c-e2af-e9e1107717bf@oracle.com> (raw)
In-Reply-To: <20200320180032.895128936@linutronix.de>
On 3/20/20 7:00 PM, Thomas Gleixner wrote:
> trace_hardirqs_on/off() is only partially safe vs. RCU idle. The tracer
> core itself is safe, but the resulting tracepoints can be utilized by
> e.g. BPF which is unsafe.
>
> Provide variants which do not contain the lockdep invocation so the lockdep
> and tracer invocations can be split at the call site and placed properly.
>
> The new variants also do not use rcuidle as they are going to be called
> from entry code after/before context tracking.
>
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> ---
> V2: New patch
> ---
> include/linux/irqflags.h | 4 ++++
> kernel/trace/trace_preemptirq.c | 23 +++++++++++++++++++++++
> 2 files changed, 27 insertions(+)
>
> --- a/include/linux/irqflags.h
> +++ b/include/linux/irqflags.h
> @@ -29,6 +29,8 @@
> #endif
>
> #ifdef CONFIG_TRACE_IRQFLAGS
> + extern void __trace_hardirqs_on(void);
> + extern void __trace_hardirqs_off(void);
> extern void trace_hardirqs_on(void);
> extern void trace_hardirqs_off(void);
> # define trace_hardirq_context(p) ((p)->hardirq_context)
> @@ -52,6 +54,8 @@ do { \
> current->softirq_context--; \
> } while (0)
> #else
> +# define __trace_hardirqs_on() do { } while (0)
> +# define __trace_hardirqs_off() do { } while (0)
> # define trace_hardirqs_on() do { } while (0)
> # define trace_hardirqs_off() do { } while (0)
> # define trace_hardirq_context(p) 0
> --- a/kernel/trace/trace_preemptirq.c
> +++ b/kernel/trace/trace_preemptirq.c
> @@ -19,6 +19,17 @@
> /* Per-cpu variable to prevent redundant calls when IRQs already off */
> static DEFINE_PER_CPU(int, tracing_irq_cpu);
>
> +void __trace_hardirqs_on(void)
> +{
> + if (this_cpu_read(tracing_irq_cpu)) {
> + if (!in_nmi())
> + trace_irq_enable(CALLER_ADDR0, CALLER_ADDR1);
> + tracer_hardirqs_on(CALLER_ADDR0, CALLER_ADDR1);
> + this_cpu_write(tracing_irq_cpu, 0);
> + }
> +}
> +NOKPROBE_SYMBOL(__trace_hardirqs_on);
> +
It would be good to have a comment which highlights the difference between
__trace_hardirqs_on/off and trace_hardirqs_on/off because the code difference
is not obvious and the function names are so similar.
alex.
> void trace_hardirqs_on(void)
> {
> if (this_cpu_read(tracing_irq_cpu)) {
> @@ -33,6 +44,18 @@ void trace_hardirqs_on(void)
> EXPORT_SYMBOL(trace_hardirqs_on);
> NOKPROBE_SYMBOL(trace_hardirqs_on);
>
> +void __trace_hardirqs_off(void)
> +{
> + if (!this_cpu_read(tracing_irq_cpu)) {
> + this_cpu_write(tracing_irq_cpu, 1);
> + tracer_hardirqs_off(CALLER_ADDR0, CALLER_ADDR1);
> + if (!in_nmi())
> + trace_irq_disable(CALLER_ADDR0, CALLER_ADDR1);
> + }
> +
> +}
> +NOKPROBE_SYMBOL(__trace_hardirqs_off);
> +
> void trace_hardirqs_off(void)
> {
> if (!this_cpu_read(tracing_irq_cpu)) {
>
next prev parent reply other threads:[~2020-04-03 8:31 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-20 17:59 [RESEND][patch V3 00/23] x86/entry: Consolidation part II (syscalls) Thomas Gleixner
2020-03-20 17:59 ` [RESEND][patch V3 01/23] rcu: Dont acquire lock in NMI handler in rcu_nmi_enter_common() Thomas Gleixner
2020-03-24 15:37 ` [patch " Frederic Weisbecker
2020-03-20 17:59 ` [RESEND][patch V3 02/23] rcu: Add comments marking transitions between RCU watching and not Thomas Gleixner
2020-03-24 15:38 ` [patch " Frederic Weisbecker
2020-03-20 17:59 ` [RESEND][patch V3 03/23] vmlinux.lds.h: Create section for protection against instrumentation Thomas Gleixner
2020-03-24 12:26 ` Borislav Petkov
2020-04-03 8:08 ` Alexandre Chartre
2020-03-20 18:00 ` [RESEND][patch V3 04/23] kprobes: Prevent probes in .noinstr.text section Thomas Gleixner
2020-03-23 14:00 ` [patch " Masami Hiramatsu
2020-03-23 16:03 ` Thomas Gleixner
2020-03-24 5:49 ` Masami Hiramatsu
2020-03-24 9:47 ` Thomas Gleixner
2020-03-25 13:39 ` Masami Hiramatsu
2020-03-20 18:00 ` [RESEND][patch V3 05/23] tracing: Provide lockdep less trace_hardirqs_on/off() variants Thomas Gleixner
2020-04-03 8:34 ` Alexandre Chartre [this message]
2020-03-20 18:00 ` [RESEND][patch V3 06/23] bug: Annotate WARN/BUG/stackfail as noinstr safe Thomas Gleixner
2020-04-02 21:01 ` Josh Poimboeuf
2020-04-02 21:34 ` Peter Zijlstra
2020-04-02 21:43 ` Josh Poimboeuf
2020-04-02 21:49 ` Thomas Gleixner
2020-03-20 18:00 ` [RESEND][patch V3 07/23] lockdep: Prepare for noinstr sections Thomas Gleixner
2020-03-20 18:00 ` [RESEND][patch V3 08/23] x86/entry: Mark enter_from_user_mode() noinstr Thomas Gleixner
2020-03-20 18:00 ` [RESEND][patch V3 09/23] x86/entry/common: Protect against instrumentation Thomas Gleixner
2020-03-20 18:00 ` [RESEND][patch V3 10/23] x86/entry: Move irq tracing on syscall entry to C-code Thomas Gleixner
2020-03-20 18:00 ` [RESEND][patch V3 11/23] x86/entry: Move irq flags tracing to prepare_exit_to_usermode() Thomas Gleixner
2020-03-20 18:00 ` [RESEND][patch V3 12/23] context_tracking: Ensure that the critical path cannot be instrumented Thomas Gleixner
2020-03-20 18:00 ` [RESEND][patch V3 13/23] lib/smp_processor_id: Move it into noinstr section Thomas Gleixner
2020-03-20 18:00 ` [RESEND][patch V3 14/23] x86/speculation/mds: Mark mds_user_clear_cpu_buffers() __always_inline Thomas Gleixner
2020-03-20 18:00 ` [RESEND][patch V3 15/23] x86/entry/64: Check IF in __preempt_enable_notrace() thunk Thomas Gleixner
2020-03-20 18:00 ` [RESEND][patch V3 16/23] x86/entry/64: Mark ___preempt_schedule_notrace() thunk noinstr Thomas Gleixner
2020-03-20 18:00 ` [RESEND][patch V3 17/23] rcu/tree: Mark the idle relevant functions noinstr Thomas Gleixner
2020-03-24 16:09 ` Paul E. McKenney
2020-03-24 19:28 ` Thomas Gleixner
2020-03-24 19:58 ` Paul E. McKenney
2020-03-20 18:00 ` [RESEND][patch V3 18/23] x86/kvm: Move context tracking where it belongs Thomas Gleixner
2020-03-20 18:00 ` [RESEND][patch V3 19/23] x86/kvm/vmx: Add hardirq tracing to guest enter/exit Thomas Gleixner
2020-03-24 23:03 ` Peter Zijlstra
2020-03-24 23:21 ` Thomas Gleixner
2020-03-20 18:00 ` [RESEND][patch V3 20/23] x86/kvm/svm: Handle hardirqs proper on " Thomas Gleixner
2020-03-20 18:00 ` [RESEND][patch V3 21/23] context_tracking: Make guest_enter/exit_irqoff() .noinstr ready Thomas Gleixner
2020-03-20 18:00 ` [RESEND][patch V3 22/23] x86/kvm/vmx: Move guest enter/exit into .noinstr.text Thomas Gleixner
2020-03-20 18:00 ` [RESEND][patch V3 23/23] x86/kvm/svm: " Thomas Gleixner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=322ac9e0-9567-8e7c-e2af-e9e1107717bf@oracle.com \
--to=alexandre.chartre@oracle.com \
--cc=ast@kernel.org \
--cc=brgerst@gmail.com \
--cc=frederic@kernel.org \
--cc=jgross@suse.com \
--cc=joel@joelfernandes.org \
--cc=jpoimboe@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mhiramat@kernel.org \
--cc=paulmck@kernel.org \
--cc=pbonzini@redhat.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
--cc=thomas.lendacky@amd.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).