linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] events: callchain: Annotate RCU pointer with __rcu
@ 2020-01-29 16:08 Amol Grover
  2020-01-29 16:08 ` [PATCH 2/2] events: callchain: Use RCU API to access RCU pointer Amol Grover
  2020-01-29 22:19 ` [PATCH 1/2] events: callchain: Annotate RCU pointer with __rcu Joel Fernandes
  0 siblings, 2 replies; 7+ messages in thread
From: Amol Grover @ 2020-01-29 16:08 UTC (permalink / raw)
  To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
	Mark Rutland, Alexander Shishkin, Jiri Olsa, Namhyung Kim
  Cc: linux-kernel, linux-kernel-mentees, Joel Fernandes,
	Madhuparna Bhowmik, Paul E . McKenney, Amol Grover

Fixes following instances of sparse error
error: incompatible types in comparison expression
(different address spaces)
kernel/events/callchain.c:66:9: error: incompatible types in comparison
kernel/events/callchain.c:96:9: error: incompatible types in comparison
kernel/events/callchain.c:161:19: error: incompatible types in comparison

This introduces the following warning
kernel/events/callchain.c:65:17: warning: incorrect type in assignment

Signed-off-by: Amol Grover <frextrite@gmail.com>
---
 kernel/events/callchain.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/events/callchain.c b/kernel/events/callchain.c
index c2b41a263166..f91e1f41d25d 100644
--- a/kernel/events/callchain.c
+++ b/kernel/events/callchain.c
@@ -32,7 +32,7 @@ static inline size_t perf_callchain_entry__sizeof(void)
 static DEFINE_PER_CPU(int, callchain_recursion[PERF_NR_CONTEXTS]);
 static atomic_t nr_callchain_events;
 static DEFINE_MUTEX(callchain_mutex);
-static struct callchain_cpus_entries *callchain_cpus_entries;
+static struct callchain_cpus_entries __rcu *callchain_cpus_entries;
 
 
 __weak void perf_callchain_kernel(struct perf_callchain_entry_ctx *entry,
-- 
2.24.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/2] events: callchain: Use RCU API to access RCU pointer
  2020-01-29 16:08 [PATCH 1/2] events: callchain: Annotate RCU pointer with __rcu Amol Grover
@ 2020-01-29 16:08 ` Amol Grover
  2020-01-29 22:19   ` Joel Fernandes
  2020-01-29 22:19 ` [PATCH 1/2] events: callchain: Annotate RCU pointer with __rcu Joel Fernandes
  1 sibling, 1 reply; 7+ messages in thread
From: Amol Grover @ 2020-01-29 16:08 UTC (permalink / raw)
  To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
	Mark Rutland, Alexander Shishkin, Jiri Olsa, Namhyung Kim
  Cc: linux-kernel, linux-kernel-mentees, Joel Fernandes,
	Madhuparna Bhowmik, Paul E . McKenney, Amol Grover

callchain_cpus_entries is annotated as an RCU pointer.
Hence rcu_dereference_protected or similar RCU API is
required to dereference the pointer.

This fixes the following sparse warning
kernel/events/callchain.c:65:17: warning: incorrect type in assignment

Signed-off-by: Amol Grover <frextrite@gmail.com>
---
 kernel/events/callchain.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/kernel/events/callchain.c b/kernel/events/callchain.c
index f91e1f41d25d..a672d02a1b3a 100644
--- a/kernel/events/callchain.c
+++ b/kernel/events/callchain.c
@@ -62,7 +62,8 @@ static void release_callchain_buffers(void)
 {
 	struct callchain_cpus_entries *entries;
 
-	entries = callchain_cpus_entries;
+	entries = rcu_dereference_protected(callchain_cpus_entries,
+					    lockdep_is_held(&callchain_mutex));
 	RCU_INIT_POINTER(callchain_cpus_entries, NULL);
 	call_rcu(&entries->rcu_head, release_callchain_buffers_rcu);
 }
-- 
2.24.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] events: callchain: Use RCU API to access RCU pointer
  2020-01-29 16:08 ` [PATCH 2/2] events: callchain: Use RCU API to access RCU pointer Amol Grover
@ 2020-01-29 22:19   ` Joel Fernandes
  2020-01-30  8:23     ` Peter Zijlstra
  0 siblings, 1 reply; 7+ messages in thread
From: Joel Fernandes @ 2020-01-29 22:19 UTC (permalink / raw)
  To: Amol Grover
  Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
	Mark Rutland, Alexander Shishkin, Jiri Olsa, Namhyung Kim,
	linux-kernel, linux-kernel-mentees, Madhuparna Bhowmik,
	Paul E . McKenney

On Wed, Jan 29, 2020 at 09:38:13PM +0530, Amol Grover wrote:
> callchain_cpus_entries is annotated as an RCU pointer.
> Hence rcu_dereference_protected or similar RCU API is
> required to dereference the pointer.
> 
> This fixes the following sparse warning
> kernel/events/callchain.c:65:17: warning: incorrect type in assignment
> 
> Signed-off-by: Amol Grover <frextrite@gmail.com>
> ---
>  kernel/events/callchain.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/kernel/events/callchain.c b/kernel/events/callchain.c
> index f91e1f41d25d..a672d02a1b3a 100644
> --- a/kernel/events/callchain.c
> +++ b/kernel/events/callchain.c
> @@ -62,7 +62,8 @@ static void release_callchain_buffers(void)
>  {
>  	struct callchain_cpus_entries *entries;
>  
> -	entries = callchain_cpus_entries;
> +	entries = rcu_dereference_protected(callchain_cpus_entries,
> +					    lockdep_is_held(&callchain_mutex));


Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org>

thanks,

 - Joel


>  	RCU_INIT_POINTER(callchain_cpus_entries, NULL);
>  	call_rcu(&entries->rcu_head, release_callchain_buffers_rcu);
>  }
> -- 
> 2.24.1
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] events: callchain: Annotate RCU pointer with __rcu
  2020-01-29 16:08 [PATCH 1/2] events: callchain: Annotate RCU pointer with __rcu Amol Grover
  2020-01-29 16:08 ` [PATCH 2/2] events: callchain: Use RCU API to access RCU pointer Amol Grover
@ 2020-01-29 22:19 ` Joel Fernandes
  1 sibling, 0 replies; 7+ messages in thread
From: Joel Fernandes @ 2020-01-29 22:19 UTC (permalink / raw)
  To: Amol Grover
  Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
	Mark Rutland, Alexander Shishkin, Jiri Olsa, Namhyung Kim,
	linux-kernel, linux-kernel-mentees, Madhuparna Bhowmik,
	Paul E . McKenney

On Wed, Jan 29, 2020 at 09:38:12PM +0530, Amol Grover wrote:
> Fixes following instances of sparse error
> error: incompatible types in comparison expression
> (different address spaces)
> kernel/events/callchain.c:66:9: error: incompatible types in comparison
> kernel/events/callchain.c:96:9: error: incompatible types in comparison
> kernel/events/callchain.c:161:19: error: incompatible types in comparison
> 
> This introduces the following warning
> kernel/events/callchain.c:65:17: warning: incorrect type in assignment

Would have been nice if you mentioned the warning is fixed in your second
patch. But I think its ok.

Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org>

thanks,

 - Joel

> 
> Signed-off-by: Amol Grover <frextrite@gmail.com>
> ---
>  kernel/events/callchain.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/kernel/events/callchain.c b/kernel/events/callchain.c
> index c2b41a263166..f91e1f41d25d 100644
> --- a/kernel/events/callchain.c
> +++ b/kernel/events/callchain.c
> @@ -32,7 +32,7 @@ static inline size_t perf_callchain_entry__sizeof(void)
>  static DEFINE_PER_CPU(int, callchain_recursion[PERF_NR_CONTEXTS]);
>  static atomic_t nr_callchain_events;
>  static DEFINE_MUTEX(callchain_mutex);
> -static struct callchain_cpus_entries *callchain_cpus_entries;
> +static struct callchain_cpus_entries __rcu *callchain_cpus_entries;
>  
>  
>  __weak void perf_callchain_kernel(struct perf_callchain_entry_ctx *entry,
> -- 
> 2.24.1
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] events: callchain: Use RCU API to access RCU pointer
  2020-01-29 22:19   ` Joel Fernandes
@ 2020-01-30  8:23     ` Peter Zijlstra
  2020-01-30 10:14       ` Amol Grover
  0 siblings, 1 reply; 7+ messages in thread
From: Peter Zijlstra @ 2020-01-30  8:23 UTC (permalink / raw)
  To: Joel Fernandes
  Cc: Amol Grover, Ingo Molnar, Arnaldo Carvalho de Melo, Mark Rutland,
	Alexander Shishkin, Jiri Olsa, Namhyung Kim, linux-kernel,
	linux-kernel-mentees, Madhuparna Bhowmik, Paul E . McKenney

On Wed, Jan 29, 2020 at 05:19:09PM -0500, Joel Fernandes wrote:
> On Wed, Jan 29, 2020 at 09:38:13PM +0530, Amol Grover wrote:
> > callchain_cpus_entries is annotated as an RCU pointer.
> > Hence rcu_dereference_protected or similar RCU API is
> > required to dereference the pointer.
> > 
> > This fixes the following sparse warning
> > kernel/events/callchain.c:65:17: warning: incorrect type in assignment

Seems silly to have this two patches; the first introduces the second
issue, might as well fix it all in one go.

Also look at the output of:

  git log --oneline kernel/events/

and then at your $subject.

> > Signed-off-by: Amol Grover <frextrite@gmail.com>
> > ---
> >  kernel/events/callchain.c | 3 ++-
> >  1 file changed, 2 insertions(+), 1 deletion(-)
> > 
> > diff --git a/kernel/events/callchain.c b/kernel/events/callchain.c
> > index f91e1f41d25d..a672d02a1b3a 100644
> > --- a/kernel/events/callchain.c
> > +++ b/kernel/events/callchain.c
> > @@ -62,7 +62,8 @@ static void release_callchain_buffers(void)
> >  {
> >  	struct callchain_cpus_entries *entries;
> >  
> > -	entries = callchain_cpus_entries;
> > +	entries = rcu_dereference_protected(callchain_cpus_entries,
> > +					    lockdep_is_held(&callchain_mutex));
> 
> 
> Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org>

Do we really need that smp_read_barrier_depends() here? Then again, I
don't suppose this is a fast path.

IIRC even Alpha got the dependent write ordering right.

> >  	RCU_INIT_POINTER(callchain_cpus_entries, NULL);
> >  	call_rcu(&entries->rcu_head, release_callchain_buffers_rcu);
> >  }
> > -- 
> > 2.24.1
> > 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] events: callchain: Use RCU API to access RCU pointer
  2020-01-30  8:23     ` Peter Zijlstra
@ 2020-01-30 10:14       ` Amol Grover
  2020-01-30 13:32         ` Peter Zijlstra
  0 siblings, 1 reply; 7+ messages in thread
From: Amol Grover @ 2020-01-30 10:14 UTC (permalink / raw)
  To: Peter Zijlstra
  Cc: Joel Fernandes, Ingo Molnar, Arnaldo Carvalho de Melo,
	Mark Rutland, Alexander Shishkin, Jiri Olsa, Namhyung Kim,
	linux-kernel, linux-kernel-mentees, Madhuparna Bhowmik,
	Paul E . McKenney

On Thu, Jan 30, 2020 at 09:23:21AM +0100, Peter Zijlstra wrote:
> On Wed, Jan 29, 2020 at 05:19:09PM -0500, Joel Fernandes wrote:
> > On Wed, Jan 29, 2020 at 09:38:13PM +0530, Amol Grover wrote:
> > > callchain_cpus_entries is annotated as an RCU pointer.
> > > Hence rcu_dereference_protected or similar RCU API is
> > > required to dereference the pointer.
> > > 
> > > This fixes the following sparse warning
> > > kernel/events/callchain.c:65:17: warning: incorrect type in assignment
> 
> Seems silly to have this two patches; the first introduces the second
> issue, might as well fix it all in one go.
> 

Got it. I'll combine them into a single patch and re-send.

> Also look at the output of:
> 
>   git log --oneline kernel/events/
> 
> and then at your $subject.
> 
> > > Signed-off-by: Amol Grover <frextrite@gmail.com>
> > > ---
> > >  kernel/events/callchain.c | 3 ++-
> > >  1 file changed, 2 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/kernel/events/callchain.c b/kernel/events/callchain.c
> > > index f91e1f41d25d..a672d02a1b3a 100644
> > > --- a/kernel/events/callchain.c
> > > +++ b/kernel/events/callchain.c
> > > @@ -62,7 +62,8 @@ static void release_callchain_buffers(void)
> > >  {
> > >  	struct callchain_cpus_entries *entries;
> > >  
> > > -	entries = callchain_cpus_entries;
> > > +	entries = rcu_dereference_protected(callchain_cpus_entries,
> > > +					    lockdep_is_held(&callchain_mutex));
> > 
> > 
> > Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org>
> 
> Do we really need that smp_read_barrier_depends() here? Then again, I
> don't suppose this is a fast path.
> 

rcu_dereference_protected is actually a lightweight API and IIRC it
omits the READ_ONCE() and hence the memory barriers.

Thanks
Amol

> IIRC even Alpha got the dependent write ordering right.
> 
> > >  	RCU_INIT_POINTER(callchain_cpus_entries, NULL);
> > >  	call_rcu(&entries->rcu_head, release_callchain_buffers_rcu);
> > >  }
> > > -- 
> > > 2.24.1
> > > 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] events: callchain: Use RCU API to access RCU pointer
  2020-01-30 10:14       ` Amol Grover
@ 2020-01-30 13:32         ` Peter Zijlstra
  0 siblings, 0 replies; 7+ messages in thread
From: Peter Zijlstra @ 2020-01-30 13:32 UTC (permalink / raw)
  To: Amol Grover
  Cc: Joel Fernandes, Ingo Molnar, Arnaldo Carvalho de Melo,
	Mark Rutland, Alexander Shishkin, Jiri Olsa, Namhyung Kim,
	linux-kernel, linux-kernel-mentees, Madhuparna Bhowmik,
	Paul E . McKenney

On Thu, Jan 30, 2020 at 03:44:51PM +0530, Amol Grover wrote:
> > > > diff --git a/kernel/events/callchain.c b/kernel/events/callchain.c
> > > > index f91e1f41d25d..a672d02a1b3a 100644
> > > > --- a/kernel/events/callchain.c
> > > > +++ b/kernel/events/callchain.c
> > > > @@ -62,7 +62,8 @@ static void release_callchain_buffers(void)
> > > >  {
> > > >  	struct callchain_cpus_entries *entries;
> > > >  
> > > > -	entries = callchain_cpus_entries;
> > > > +	entries = rcu_dereference_protected(callchain_cpus_entries,
> > > > +					    lockdep_is_held(&callchain_mutex));
> > > 
> > > 
> > > Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org>
> > 
> > Do we really need that smp_read_barrier_depends() here? Then again, I
> > don't suppose this is a fast path.
> > 
> 
> rcu_dereference_protected is actually a lightweight API and IIRC it
> omits the READ_ONCE() and hence the memory barriers.

Oh argh, indeed. I suppose I should've had more tea this morning.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2020-01-30 13:33 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-29 16:08 [PATCH 1/2] events: callchain: Annotate RCU pointer with __rcu Amol Grover
2020-01-29 16:08 ` [PATCH 2/2] events: callchain: Use RCU API to access RCU pointer Amol Grover
2020-01-29 22:19   ` Joel Fernandes
2020-01-30  8:23     ` Peter Zijlstra
2020-01-30 10:14       ` Amol Grover
2020-01-30 13:32         ` Peter Zijlstra
2020-01-29 22:19 ` [PATCH 1/2] events: callchain: Annotate RCU pointer with __rcu Joel Fernandes

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).