All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joel Fernandes <joel@joelfernandes.org>
To: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: Steven Rostedt <rostedt@goodmis.org>,
	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 13:56:39 -0700	[thread overview]
Message-ID: <20180711205639.GB32091@joelaf.mtv.corp.google.com> (raw)
In-Reply-To: <20180711151559.GR3593@linux.vnet.ibm.com>

On Wed, Jul 11, 2018 at 08:15:59AM -0700, Paul E. McKenney wrote:
> On Wed, Jul 11, 2018 at 10:46:18AM -0400, Steven Rostedt wrote:
> > On Wed, 11 Jul 2018 07:27:44 -0700
> > "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> wrote:
> > 
> > > On Wed, Jul 11, 2018 at 09:00:03AM -0400, Steven Rostedt wrote:
> > > > On Wed, 11 Jul 2018 14:49:54 +0200
> > > > Peter Zijlstra <peterz@infradead.org> wrote:
> > > >   
> > > > > On Thu, Jun 28, 2018 at 11:21:46AM -0700, Joel Fernandes wrote:  
> > > > > > -		it_func_ptr = rcu_dereference_sched((tp)->funcs);	\    
> > > > > 
> > > > > I would convert to rcu_dereference_raw() to appease sparse. The fancy
> > > > > stuff below is pointless if you then turn off all checking.  
> > > > 
> > > > The problem with doing this is if we use a trace event without the
> > > > proper _idle() or whatever, we wont get a warning that it is used
> > > > incorrectly with lockdep. Or does lockdep still check if "rcu is
> > > > watching" with rcu_dereference_raw()?  
> > > 
> > > No lockdep checking is done by rcu_dereference_raw().
> > 
> > Correct, but I think we can do this regardless. So Joel please resend
> > with Peter's suggestion.
> > 
> > The reason being is because of this:
> > 
> > 
> > #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?

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.

thanks!

- Joel






WARNING: multiple messages have this Message-ID (diff)
From: joel at joelfernandes.org (Joel Fernandes)
Subject: [PATCH v9 4/7] tracepoint: Make rcuidle tracepoint callers use SRCU
Date: Wed, 11 Jul 2018 13:56:39 -0700	[thread overview]
Message-ID: <20180711205639.GB32091@joelaf.mtv.corp.google.com> (raw)
In-Reply-To: <20180711151559.GR3593@linux.vnet.ibm.com>

On Wed, Jul 11, 2018 at 08:15:59AM -0700, Paul E. McKenney wrote:
> On Wed, Jul 11, 2018 at 10:46:18AM -0400, Steven Rostedt wrote:
> > On Wed, 11 Jul 2018 07:27:44 -0700
> > "Paul E. McKenney" <paulmck at linux.vnet.ibm.com> wrote:
> > 
> > > On Wed, Jul 11, 2018 at 09:00:03AM -0400, Steven Rostedt wrote:
> > > > On Wed, 11 Jul 2018 14:49:54 +0200
> > > > Peter Zijlstra <peterz at infradead.org> wrote:
> > > >   
> > > > > On Thu, Jun 28, 2018 at 11:21:46AM -0700, Joel Fernandes wrote:  
> > > > > > -		it_func_ptr = rcu_dereference_sched((tp)->funcs);	\    
> > > > > 
> > > > > I would convert to rcu_dereference_raw() to appease sparse. The fancy
> > > > > stuff below is pointless if you then turn off all checking.  
> > > > 
> > > > The problem with doing this is if we use a trace event without the
> > > > proper _idle() or whatever, we wont get a warning that it is used
> > > > incorrectly with lockdep. Or does lockdep still check if "rcu is
> > > > watching" with rcu_dereference_raw()?  
> > > 
> > > No lockdep checking is done by rcu_dereference_raw().
> > 
> > Correct, but I think we can do this regardless. So Joel please resend
> > with Peter's suggestion.
> > 
> > The reason being is because of this:
> > 
> > 
> > #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?

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.

thanks!

- Joel





--
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: joel@joelfernandes.org (Joel Fernandes)
Subject: [PATCH v9 4/7] tracepoint: Make rcuidle tracepoint callers use SRCU
Date: Wed, 11 Jul 2018 13:56:39 -0700	[thread overview]
Message-ID: <20180711205639.GB32091@joelaf.mtv.corp.google.com> (raw)
Message-ID: <20180711205639.BYOSYfMBM3DM6qmeUWSPP2xj_vzgF3BWg5SMxQhsXIQ@z> (raw)
In-Reply-To: <20180711151559.GR3593@linux.vnet.ibm.com>

On Wed, Jul 11, 2018@08:15:59AM -0700, Paul E. McKenney wrote:
> On Wed, Jul 11, 2018@10:46:18AM -0400, Steven Rostedt wrote:
> > On Wed, 11 Jul 2018 07:27:44 -0700
> > "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> wrote:
> > 
> > > On Wed, Jul 11, 2018@09:00:03AM -0400, Steven Rostedt wrote:
> > > > On Wed, 11 Jul 2018 14:49:54 +0200
> > > > Peter Zijlstra <peterz@infradead.org> wrote:
> > > >   
> > > > > On Thu, Jun 28, 2018 at 11:21:46AM -0700, Joel Fernandes wrote:  
> > > > > > -		it_func_ptr = rcu_dereference_sched((tp)->funcs);	\    
> > > > > 
> > > > > I would convert to rcu_dereference_raw() to appease sparse. The fancy
> > > > > stuff below is pointless if you then turn off all checking.  
> > > > 
> > > > The problem with doing this is if we use a trace event without the
> > > > proper _idle() or whatever, we wont get a warning that it is used
> > > > incorrectly with lockdep. Or does lockdep still check if "rcu is
> > > > watching" with rcu_dereference_raw()?  
> > > 
> > > No lockdep checking is done by rcu_dereference_raw().
> > 
> > Correct, but I think we can do this regardless. So Joel please resend
> > with Peter's suggestion.
> > 
> > The reason being is because of this:
> > 
> > 
> > #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?

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.

thanks!

- Joel





--
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-11 20:56 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 [this message]
2018-07-11 20:56               ` Joel Fernandes
2018-07-11 20:56               ` joel
2018-07-12  1:22               ` Steven Rostedt
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=20180711205639.GB32091@joelaf.mtv.corp.google.com \
    --to=joel@joelfernandes.org \
    --cc=boqun.feng@gmail.com \
    --cc=byungchul.park@lge.com \
    --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=rostedt@goodmis.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.