All of lore.kernel.org
 help / color / mirror / Atom feed
From: Steven Rostedt <rostedt@goodmis.org>
To: Joel Fernandes <joel@joelfernandes.org>
Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
	Peter Zijlstra <peterz@infradead.org>,
	linux-kernel@vger.kernel.org, Boqun Feng <boqun.feng@gmail.com>,
	Byungchul Park <byungchul.park@lge.com>,
	Ingo Molnar <mingo@redhat.com>, Julia Cartwright <julia@ni.com>,
	linux-kselftest@vger.kernel.org,
	Masami Hiramatsu <mhiramat@kernel.org>,
	Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
	Namhyung Kim <namhyung@kernel.org>,
	Thomas Glexiner <tglx@linutronix.de>,
	Tom Zanussi <tom.zanussi@linux.intel.com>
Subject: Re: [PATCH v9 4/7] tracepoint: Make rcuidle tracepoint callers use SRCU
Date: Wed, 11 Jul 2018 21:22:37 -0400	[thread overview]
Message-ID: <20180711212237.3eff418f@vmware.local.home> (raw)
In-Reply-To: <20180711205639.GB32091@joelaf.mtv.corp.google.com>

On Wed, 11 Jul 2018 13:56:39 -0700
Joel Fernandes <joel@joelfernandes.org> wrote:

> > > #define __DECLARE_TRACE(name, proto, args, cond, data_proto, data_args) \
> > > 	extern struct tracepoint __tracepoint_##name;			\
> > > 	static inline void trace_##name(proto)				\
> > > 	{								\
> > > 		if (static_key_false(&__tracepoint_##name.key))		\
> > > 			__DO_TRACE(&__tracepoint_##name,		\
> > > 				TP_PROTO(data_proto),			\
> > > 				TP_ARGS(data_args),			\
> > > 				TP_CONDITION(cond), 0);			\
> > > 		if (IS_ENABLED(CONFIG_LOCKDEP) && (cond)) {		\
> > > 			rcu_read_lock_sched_notrace();			\
> > > 			rcu_dereference_sched(__tracepoint_##name.funcs);\
> > > 			rcu_read_unlock_sched_notrace();		\
> > > 		}							\
> > > 	}
> > > 
> > > Because lockdep would only trigger warnings when the tracepoint was
> > > enabled and used in a place it shouldn't be, we added the above
> > > IS_ENABLED(CONFIG_LOCKDEP) part to test regardless if the the
> > > tracepoint was enabled or not. Because we do this, we don't need to
> > > have the test in the __DO_TRACE() code itself. That means we can clean
> > > up the code as per Peter's suggestion.  
> > 
> > Indeed, the rcu_dereference_sched() would catch it in that case, so
> > agreed, Peter's suggestion isn't losing any debuggability.  
> 
> Hmm, but if we are doing the check later anyway, then why not do it in
> __DO_TRACE itself?

Because __DO_TRACE is only called if the trace event is enabled. If we
never enable a trace event, we never know if it has a potential of
doing it wrong. The second part is to trigger the warning immediately
regardless if the trace event is enabled or not.

> 
> Also I guess we are discussing about changing the rcu_dereference_sched which
> I think should go into a separate patch since my patch isn't touching how the
> rcuidle==0 paths use the RCU API. So I think this is an existing issue
> independent of this series.

But the code you added made it much more complex to keep the checks as
is. If we remove the checks then this patch doesn't need to have all
the if statements, and we can do it the way Peter suggested.

But sure, go ahead and make a separate patch first that removes the
checks from __DO_TRACE() first if you want to.

-- Steve

WARNING: multiple messages have this Message-ID (diff)
From: rostedt at goodmis.org (Steven Rostedt)
Subject: [PATCH v9 4/7] tracepoint: Make rcuidle tracepoint callers use SRCU
Date: Wed, 11 Jul 2018 21:22:37 -0400	[thread overview]
Message-ID: <20180711212237.3eff418f@vmware.local.home> (raw)
In-Reply-To: <20180711205639.GB32091@joelaf.mtv.corp.google.com>

On Wed, 11 Jul 2018 13:56:39 -0700
Joel Fernandes <joel at joelfernandes.org> wrote:

> > > #define __DECLARE_TRACE(name, proto, args, cond, data_proto, data_args) \
> > > 	extern struct tracepoint __tracepoint_##name;			\
> > > 	static inline void trace_##name(proto)				\
> > > 	{								\
> > > 		if (static_key_false(&__tracepoint_##name.key))		\
> > > 			__DO_TRACE(&__tracepoint_##name,		\
> > > 				TP_PROTO(data_proto),			\
> > > 				TP_ARGS(data_args),			\
> > > 				TP_CONDITION(cond), 0);			\
> > > 		if (IS_ENABLED(CONFIG_LOCKDEP) && (cond)) {		\
> > > 			rcu_read_lock_sched_notrace();			\
> > > 			rcu_dereference_sched(__tracepoint_##name.funcs);\
> > > 			rcu_read_unlock_sched_notrace();		\
> > > 		}							\
> > > 	}
> > > 
> > > Because lockdep would only trigger warnings when the tracepoint was
> > > enabled and used in a place it shouldn't be, we added the above
> > > IS_ENABLED(CONFIG_LOCKDEP) part to test regardless if the the
> > > tracepoint was enabled or not. Because we do this, we don't need to
> > > have the test in the __DO_TRACE() code itself. That means we can clean
> > > up the code as per Peter's suggestion.  
> > 
> > Indeed, the rcu_dereference_sched() would catch it in that case, so
> > agreed, Peter's suggestion isn't losing any debuggability.  
> 
> Hmm, but if we are doing the check later anyway, then why not do it in
> __DO_TRACE itself?

Because __DO_TRACE is only called if the trace event is enabled. If we
never enable a trace event, we never know if it has a potential of
doing it wrong. The second part is to trigger the warning immediately
regardless if the trace event is enabled or not.

> 
> Also I guess we are discussing about changing the rcu_dereference_sched which
> I think should go into a separate patch since my patch isn't touching how the
> rcuidle==0 paths use the RCU API. So I think this is an existing issue
> independent of this series.

But the code you added made it much more complex to keep the checks as
is. If we remove the checks then this patch doesn't need to have all
the if statements, and we can do it the way Peter suggested.

But sure, go ahead and make a separate patch first that removes the
checks from __DO_TRACE() first if you want to.

-- Steve
--
To unsubscribe from this list: send the line "unsubscribe linux-kselftest" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

WARNING: multiple messages have this Message-ID (diff)
From: rostedt@goodmis.org (Steven Rostedt)
Subject: [PATCH v9 4/7] tracepoint: Make rcuidle tracepoint callers use SRCU
Date: Wed, 11 Jul 2018 21:22:37 -0400	[thread overview]
Message-ID: <20180711212237.3eff418f@vmware.local.home> (raw)
Message-ID: <20180712012237.j7Op1vVLl0o88uT_5OR14hho_wd3cLWRG1Dek69iDvs@z> (raw)
In-Reply-To: <20180711205639.GB32091@joelaf.mtv.corp.google.com>

On Wed, 11 Jul 2018 13:56:39 -0700
Joel Fernandes <joel@joelfernandes.org> wrote:

> > > #define __DECLARE_TRACE(name, proto, args, cond, data_proto, data_args) \
> > > 	extern struct tracepoint __tracepoint_##name;			\
> > > 	static inline void trace_##name(proto)				\
> > > 	{								\
> > > 		if (static_key_false(&__tracepoint_##name.key))		\
> > > 			__DO_TRACE(&__tracepoint_##name,		\
> > > 				TP_PROTO(data_proto),			\
> > > 				TP_ARGS(data_args),			\
> > > 				TP_CONDITION(cond), 0);			\
> > > 		if (IS_ENABLED(CONFIG_LOCKDEP) && (cond)) {		\
> > > 			rcu_read_lock_sched_notrace();			\
> > > 			rcu_dereference_sched(__tracepoint_##name.funcs);\
> > > 			rcu_read_unlock_sched_notrace();		\
> > > 		}							\
> > > 	}
> > > 
> > > Because lockdep would only trigger warnings when the tracepoint was
> > > enabled and used in a place it shouldn't be, we added the above
> > > IS_ENABLED(CONFIG_LOCKDEP) part to test regardless if the the
> > > tracepoint was enabled or not. Because we do this, we don't need to
> > > have the test in the __DO_TRACE() code itself. That means we can clean
> > > up the code as per Peter's suggestion.  
> > 
> > Indeed, the rcu_dereference_sched() would catch it in that case, so
> > agreed, Peter's suggestion isn't losing any debuggability.  
> 
> Hmm, but if we are doing the check later anyway, then why not do it in
> __DO_TRACE itself?

Because __DO_TRACE is only called if the trace event is enabled. If we
never enable a trace event, we never know if it has a potential of
doing it wrong. The second part is to trigger the warning immediately
regardless if the trace event is enabled or not.

> 
> Also I guess we are discussing about changing the rcu_dereference_sched which
> I think should go into a separate patch since my patch isn't touching how the
> rcuidle==0 paths use the RCU API. So I think this is an existing issue
> independent of this series.

But the code you added made it much more complex to keep the checks as
is. If we remove the checks then this patch doesn't need to have all
the if statements, and we can do it the way Peter suggested.

But sure, go ahead and make a separate patch first that removes the
checks from __DO_TRACE() first if you want to.

-- Steve
--
To unsubscribe from this list: send the line "unsubscribe linux-kselftest" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2018-07-12  1:22 UTC|newest]

Thread overview: 156+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-28 18:21 [PATCH v9 0/7] Centralize and unify usage of preempt/irq tracepoints Joel Fernandes
2018-06-28 18:21 ` Joel Fernandes
2018-06-28 18:21 ` joel
2018-06-28 18:21 ` [PATCH v9 1/7] srcu: Add notrace variants of srcu_read_{lock,unlock} Joel Fernandes
2018-06-28 18:21   ` Joel Fernandes
2018-06-28 18:21   ` joel
2018-06-28 18:21 ` [PATCH v9 2/7] srcu: Add notrace variant of srcu_dereference Joel Fernandes
2018-06-28 18:21   ` Joel Fernandes
2018-06-28 18:21   ` joel
2018-06-28 18:21 ` [PATCH v9 3/7] trace/irqsoff: Split reset into separate functions Joel Fernandes
2018-06-28 18:21   ` Joel Fernandes
2018-06-28 18:21   ` joel
2018-06-28 18:21 ` [PATCH v9 4/7] tracepoint: Make rcuidle tracepoint callers use SRCU Joel Fernandes
2018-06-28 18:21   ` Joel Fernandes
2018-06-28 18:21   ` joel
2018-07-11 12:49   ` Peter Zijlstra
2018-07-11 12:49     ` Peter Zijlstra
2018-07-11 12:49     ` peterz
2018-07-11 13:00     ` Steven Rostedt
2018-07-11 13:00       ` Steven Rostedt
2018-07-11 13:00       ` rostedt
2018-07-11 14:27       ` Paul E. McKenney
2018-07-11 14:27         ` Paul E. McKenney
2018-07-11 14:27         ` paulmck
2018-07-11 14:46         ` Steven Rostedt
2018-07-11 14:46           ` Steven Rostedt
2018-07-11 14:46           ` rostedt
2018-07-11 15:15           ` Paul E. McKenney
2018-07-11 15:15             ` Paul E. McKenney
2018-07-11 15:15             ` paulmck
2018-07-11 20:56             ` Joel Fernandes
2018-07-11 20:56               ` Joel Fernandes
2018-07-11 20:56               ` joel
2018-07-12  1:22               ` Steven Rostedt [this message]
2018-07-12  1:22                 ` Steven Rostedt
2018-07-12  1:22                 ` rostedt
2018-07-12  2:35                 ` Joel Fernandes
2018-07-12  2:35                   ` Joel Fernandes
2018-07-12  2:35                   ` joel
2018-07-11 20:52           ` Joel Fernandes
2018-07-11 20:52             ` Joel Fernandes
2018-07-11 20:52             ` joel
2018-07-12  3:21             ` Steven Rostedt
2018-07-12  3:21               ` Steven Rostedt
2018-07-12  3:21               ` rostedt
2018-07-12  4:28               ` Joel Fernandes
2018-07-12  4:28                 ` Joel Fernandes
2018-07-12  4:28                 ` joel
2018-07-12 13:35                 ` Steven Rostedt
2018-07-12 13:35                   ` Steven Rostedt
2018-07-12 13:35                   ` rostedt
2018-07-12 19:17                   ` Joel Fernandes
2018-07-12 19:17                     ` Joel Fernandes
2018-07-12 19:17                     ` joel
2018-07-12 20:15                     ` Steven Rostedt
2018-07-12 20:15                       ` Steven Rostedt
2018-07-12 20:15                       ` rostedt
2018-07-12 20:29                       ` Joel Fernandes
2018-07-12 20:29                         ` Joel Fernandes
2018-07-12 20:29                         ` joel
2018-07-12 20:31                         ` Steven Rostedt
2018-07-12 20:31                           ` Steven Rostedt
2018-07-12 20:31                           ` rostedt
2018-07-11 12:53   ` Peter Zijlstra
2018-07-11 12:53     ` Peter Zijlstra
2018-07-11 12:53     ` peterz
2018-07-12  2:32     ` Joel Fernandes
2018-07-12  2:32       ` Joel Fernandes
2018-07-12  2:32       ` joel
2018-07-11 12:56   ` Peter Zijlstra
2018-07-11 12:56     ` Peter Zijlstra
2018-07-11 12:56     ` peterz
2018-07-11 13:06     ` Steven Rostedt
2018-07-11 13:06       ` Steven Rostedt
2018-07-11 13:06       ` rostedt
2018-07-11 15:17       ` Peter Zijlstra
2018-07-11 15:17         ` Peter Zijlstra
2018-07-11 15:17         ` peterz
2018-07-11 15:26         ` Steven Rostedt
2018-07-11 15:26           ` Steven Rostedt
2018-07-11 15:26           ` rostedt
2018-07-11 16:46           ` Mathieu Desnoyers
2018-07-11 16:46             ` Mathieu Desnoyers
2018-07-11 16:46             ` mathieu.desnoyers
2018-07-11 16:40         ` Mathieu Desnoyers
2018-07-11 16:40           ` Mathieu Desnoyers
2018-07-11 16:40           ` mathieu.desnoyers
2018-07-12  0:31       ` Joel Fernandes
2018-07-12  0:31         ` Joel Fernandes
2018-07-12  0:31         ` joel
2018-07-12  1:26         ` Steven Rostedt
2018-07-12  1:26           ` Steven Rostedt
2018-07-12  1:26           ` rostedt
2018-06-28 18:21 ` [PATCH v9 5/7] tracing: Centralize preemptirq tracepoints and unify their usage Joel Fernandes
2018-06-28 18:21   ` Joel Fernandes
2018-06-28 18:21   ` joel
2018-07-06 22:06   ` Steven Rostedt
2018-07-06 22:06     ` Steven Rostedt
2018-07-06 22:06     ` rostedt
2018-07-07  4:20     ` Joel Fernandes
2018-07-07  4:20       ` Joel Fernandes
2018-07-07  4:20       ` joel
2018-07-10 14:20   ` Steven Rostedt
2018-07-10 14:20     ` Steven Rostedt
2018-07-10 14:20     ` rostedt
2018-07-10 17:33     ` Joel Fernandes
2018-07-10 17:33       ` Joel Fernandes
2018-07-10 17:33       ` joel
2018-07-11 13:12   ` Peter Zijlstra
2018-07-11 13:12     ` Peter Zijlstra
2018-07-11 13:12     ` peterz
2018-07-11 13:19     ` Steven Rostedt
2018-07-11 13:19       ` Steven Rostedt
2018-07-11 13:19       ` rostedt
2018-07-11 13:22       ` Steven Rostedt
2018-07-11 13:22         ` Steven Rostedt
2018-07-11 13:22         ` rostedt
2018-07-12  8:38       ` Joel Fernandes
2018-07-12  8:38         ` Joel Fernandes
2018-07-12  8:38         ` joel
2018-07-12 13:37         ` Steven Rostedt
2018-07-12 13:37           ` Steven Rostedt
2018-07-12 13:37           ` rostedt
2018-07-12  0:44     ` Joel Fernandes
2018-07-12  0:44       ` Joel Fernandes
2018-07-12  0:44       ` joel
2018-06-28 18:21 ` [PATCH v9 6/7] lib: Add module to simulate atomic sections for testing preemptoff tracers Joel Fernandes
2018-06-28 18:21   ` Joel Fernandes
2018-06-28 18:21   ` joel
2018-07-11  0:47   ` Steven Rostedt
2018-07-11  0:47     ` Steven Rostedt
2018-07-11  0:47     ` rostedt
2018-07-11  5:26     ` Joel Fernandes
2018-07-11  5:26       ` Joel Fernandes
2018-07-11  5:26       ` joel
2018-06-28 18:21 ` [PATCH v9 7/7] kselftests: Add tests for the preemptoff and irqsoff tracers Joel Fernandes
2018-06-28 18:21   ` Joel Fernandes
2018-06-28 18:21   ` joel
2018-07-11  0:49   ` Steven Rostedt
2018-07-11  0:49     ` Steven Rostedt
2018-07-11  0:49     ` rostedt
2018-07-11  5:27     ` Joel Fernandes
2018-07-11  5:27       ` Joel Fernandes
2018-07-11  5:27       ` joel
2018-07-03 14:15 ` [PATCH v9 0/7] Centralize and unify usage of preempt/irq tracepoints Joel Fernandes
2018-07-03 14:15   ` Joel Fernandes
2018-07-03 14:15   ` joel
2018-07-03 14:23   ` Steven Rostedt
2018-07-03 14:23     ` Steven Rostedt
2018-07-03 14:23     ` rostedt
  -- strict thread matches above, loose matches on Subject: below --
2018-06-21 22:32 Joel Fernandes
2018-06-21 22:32 ` [PATCH v9 4/7] tracepoint: Make rcuidle tracepoint callers use SRCU Joel Fernandes
2018-06-21 22:32   ` Joel Fernandes
2018-06-21 22:32   ` joel
2018-06-07 20:38 [PATCH v9 0/7] Centralize and unify usage of preempt/irq Joel Fernandes
2018-06-07 20:38 ` [PATCH v9 4/7] tracepoint: Make rcuidle tracepoint callers use SRCU Joel Fernandes
2018-06-07 20:38   ` Joel Fernandes
2018-06-07 20:38   ` joelaf

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=20180711212237.3eff418f@vmware.local.home \
    --to=rostedt@goodmis.org \
    --cc=boqun.feng@gmail.com \
    --cc=byungchul.park@lge.com \
    --cc=joel@joelfernandes.org \
    --cc=julia@ni.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mhiramat@kernel.org \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=tom.zanussi@linux.intel.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.