All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 1/2] rcu: Create a function for rcu_nocb_mask boot time setup
@ 2014-07-25  0:37 Pranith Kumar
  2014-07-25  0:37 ` [PATCH v2 2/2] rcu: Check the return value of rcu_nocb_mask cpumask allocation Pranith Kumar
  2014-07-25 15:27 ` [PATCH v2 1/2] rcu: Create a function for rcu_nocb_mask boot time setup Paul E. McKenney
  0 siblings, 2 replies; 6+ messages in thread
From: Pranith Kumar @ 2014-07-25  0:37 UTC (permalink / raw)
  To: Paul E. McKenney, Josh Triplett, Steven Rostedt,
	Mathieu Desnoyers, Lai Jiangshan, open list:READ-COPY UPDATE...

This commit creates a function rcu_bootup_announce_oddness_nocb(), which handles
allocation of rcu_nocb_mask and setting it according to the kernel configuration
parameters.

Signed-off-by: Pranith Kumar <bobby.prani@gmail.com>
---
v2: don't break the print string (comment from paulmck)

 kernel/rcu/tree_plugin.h | 61 +++++++++++++++++++++++++++---------------------
 1 file changed, 35 insertions(+), 26 deletions(-)

diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
index c31eb28..520538a 100644
--- a/kernel/rcu/tree_plugin.h
+++ b/kernel/rcu/tree_plugin.h
@@ -47,6 +47,39 @@ static char __initdata nocb_buf[NR_CPUS * 5];
 #endif /* #ifdef CONFIG_RCU_NOCB_CPU */
 
 /*
+ * This is a helper for rcu_bootup_announce_oddness(), which takes care of
+ * setting up rcu_nocb_mask for nocb specific kernel configuration parameters
+ */
+static void __init rcu_bootup_announce_oddness_nocb(void)
+{
+#ifndef CONFIG_RCU_NOCB_CPU_NONE
+	if (!have_rcu_nocb_mask) {
+		zalloc_cpumask_var(&rcu_nocb_mask, GFP_KERNEL);
+		have_rcu_nocb_mask = true;
+	}
+#ifdef CONFIG_RCU_NOCB_CPU_ZERO
+	pr_info("\tOffload RCU callbacks from CPU 0\n");
+	cpumask_set_cpu(0, rcu_nocb_mask);
+#endif /* #ifdef CONFIG_RCU_NOCB_CPU_ZERO */
+#ifdef CONFIG_RCU_NOCB_CPU_ALL
+	pr_info("\tOffload RCU callbacks from all CPUs\n");
+	cpumask_copy(rcu_nocb_mask, cpu_possible_mask);
+#endif /* #ifdef CONFIG_RCU_NOCB_CPU_ALL */
+#endif /* #ifndef CONFIG_RCU_NOCB_CPU_NONE */
+	if (have_rcu_nocb_mask) {
+		if (!cpumask_subset(rcu_nocb_mask, cpu_possible_mask)) {
+			pr_info("\tNote: kernel parameter 'rcu_nocbs=' contains nonexistent CPUs.\n");
+			cpumask_and(rcu_nocb_mask, cpu_possible_mask,
+				    rcu_nocb_mask);
+		}
+		cpulist_scnprintf(nocb_buf, sizeof(nocb_buf), rcu_nocb_mask);
+		pr_info("\tOffload RCU callbacks from CPUs: %s.\n", nocb_buf);
+		if (rcu_nocb_poll)
+			pr_info("\tPoll for callbacks from no-CBs CPUs.\n");
+	}
+}
+
+/*
  * Check the RCU kernel configuration parameters and print informative
  * messages about anything out of the ordinary.  If you like #ifdef, you
  * will love this function.
@@ -86,32 +119,8 @@ static void __init rcu_bootup_announce_oddness(void)
 	if (nr_cpu_ids != NR_CPUS)
 		pr_info("\tRCU restricting CPUs from NR_CPUS=%d to nr_cpu_ids=%d.\n", NR_CPUS, nr_cpu_ids);
 #ifdef CONFIG_RCU_NOCB_CPU
-#ifndef CONFIG_RCU_NOCB_CPU_NONE
-	if (!have_rcu_nocb_mask) {
-		zalloc_cpumask_var(&rcu_nocb_mask, GFP_KERNEL);
-		have_rcu_nocb_mask = true;
-	}
-#ifdef CONFIG_RCU_NOCB_CPU_ZERO
-	pr_info("\tOffload RCU callbacks from CPU 0\n");
-	cpumask_set_cpu(0, rcu_nocb_mask);
-#endif /* #ifdef CONFIG_RCU_NOCB_CPU_ZERO */
-#ifdef CONFIG_RCU_NOCB_CPU_ALL
-	pr_info("\tOffload RCU callbacks from all CPUs\n");
-	cpumask_copy(rcu_nocb_mask, cpu_possible_mask);
-#endif /* #ifdef CONFIG_RCU_NOCB_CPU_ALL */
-#endif /* #ifndef CONFIG_RCU_NOCB_CPU_NONE */
-	if (have_rcu_nocb_mask) {
-		if (!cpumask_subset(rcu_nocb_mask, cpu_possible_mask)) {
-			pr_info("\tNote: kernel parameter 'rcu_nocbs=' contains nonexistent CPUs.\n");
-			cpumask_and(rcu_nocb_mask, cpu_possible_mask,
-				    rcu_nocb_mask);
-		}
-		cpulist_scnprintf(nocb_buf, sizeof(nocb_buf), rcu_nocb_mask);
-		pr_info("\tOffload RCU callbacks from CPUs: %s.\n", nocb_buf);
-		if (rcu_nocb_poll)
-			pr_info("\tPoll for callbacks from no-CBs CPUs.\n");
-	}
-#endif /* #ifdef CONFIG_RCU_NOCB_CPU */
+	rcu_bootup_announce_oddness_nocb();
+#endif
 }
 
 #ifdef CONFIG_TREE_PREEMPT_RCU
-- 
2.0.1


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

* [PATCH v2 2/2] rcu: Check the return value of rcu_nocb_mask cpumask allocation
  2014-07-25  0:37 [PATCH v2 1/2] rcu: Create a function for rcu_nocb_mask boot time setup Pranith Kumar
@ 2014-07-25  0:37 ` Pranith Kumar
  2014-07-25 15:25   ` Paul E. McKenney
  2014-07-25 15:27 ` [PATCH v2 1/2] rcu: Create a function for rcu_nocb_mask boot time setup Paul E. McKenney
  1 sibling, 1 reply; 6+ messages in thread
From: Pranith Kumar @ 2014-07-25  0:37 UTC (permalink / raw)
  To: Paul E. McKenney, Josh Triplett, Steven Rostedt,
	Mathieu Desnoyers, Lai Jiangshan, open list:READ-COPY UPDATE...

This commit checks the return value of the zalloc_cpumask_var() used for
allocating cpumask for rcu_nocb_mask.

Signed-off-by: Pranith Kumar <bobby.prani@gmail.com>
---
v2: no change from v1

 kernel/rcu/tree_plugin.h | 23 ++++++++++++-----------
 1 file changed, 12 insertions(+), 11 deletions(-)

diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
index 520538a..9c9a01c 100644
--- a/kernel/rcu/tree_plugin.h
+++ b/kernel/rcu/tree_plugin.h
@@ -54,7 +54,10 @@ static void __init rcu_bootup_announce_oddness_nocb(void)
 {
 #ifndef CONFIG_RCU_NOCB_CPU_NONE
 	if (!have_rcu_nocb_mask) {
-		zalloc_cpumask_var(&rcu_nocb_mask, GFP_KERNEL);
+		if (!zalloc_cpumask_var(&rcu_nocb_mask, GFP_KERNEL)) {
+			pr_info("rcu_nocb_mask allocation failed\n");
+			return;
+		}
 		have_rcu_nocb_mask = true;
 	}
 #ifdef CONFIG_RCU_NOCB_CPU_ZERO
@@ -66,17 +69,15 @@ static void __init rcu_bootup_announce_oddness_nocb(void)
 	cpumask_copy(rcu_nocb_mask, cpu_possible_mask);
 #endif /* #ifdef CONFIG_RCU_NOCB_CPU_ALL */
 #endif /* #ifndef CONFIG_RCU_NOCB_CPU_NONE */
-	if (have_rcu_nocb_mask) {
-		if (!cpumask_subset(rcu_nocb_mask, cpu_possible_mask)) {
-			pr_info("\tNote: kernel parameter 'rcu_nocbs=' contains nonexistent CPUs.\n");
-			cpumask_and(rcu_nocb_mask, cpu_possible_mask,
-				    rcu_nocb_mask);
-		}
-		cpulist_scnprintf(nocb_buf, sizeof(nocb_buf), rcu_nocb_mask);
-		pr_info("\tOffload RCU callbacks from CPUs: %s.\n", nocb_buf);
-		if (rcu_nocb_poll)
-			pr_info("\tPoll for callbacks from no-CBs CPUs.\n");
+	if (!cpumask_subset(rcu_nocb_mask, cpu_possible_mask)) {
+		pr_info("\tNote: kernel parameter 'rcu_nocbs=' contains nonexistent CPUs.\n");
+		cpumask_and(rcu_nocb_mask, cpu_possible_mask,
+				rcu_nocb_mask);
 	}
+	cpulist_scnprintf(nocb_buf, sizeof(nocb_buf), rcu_nocb_mask);
+	pr_info("\tOffload RCU callbacks from CPUs: %s.\n", nocb_buf);
+	if (rcu_nocb_poll)
+		pr_info("\tPoll for callbacks from no-CBs CPUs.\n");
 }
 
 /*
-- 
2.0.1


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

* Re: [PATCH v2 2/2] rcu: Check the return value of rcu_nocb_mask cpumask allocation
  2014-07-25  0:37 ` [PATCH v2 2/2] rcu: Check the return value of rcu_nocb_mask cpumask allocation Pranith Kumar
@ 2014-07-25 15:25   ` Paul E. McKenney
  2014-07-25 18:06     ` Paul E. McKenney
  0 siblings, 1 reply; 6+ messages in thread
From: Paul E. McKenney @ 2014-07-25 15:25 UTC (permalink / raw)
  To: Pranith Kumar
  Cc: Josh Triplett, Steven Rostedt, Mathieu Desnoyers, Lai Jiangshan,
	open list:READ-COPY UPDATE...

On Thu, Jul 24, 2014 at 08:37:32PM -0400, Pranith Kumar wrote:
> This commit checks the return value of the zalloc_cpumask_var() used for
> allocating cpumask for rcu_nocb_mask.
> 
> Signed-off-by: Pranith Kumar <bobby.prani@gmail.com>

Hmmm...  I saw the check in the previous patch, but didn't see removal
of the later have_rcu_nocb_mask check.  Please see below.

							Thanx, Paul

> ---
> v2: no change from v1
> 
>  kernel/rcu/tree_plugin.h | 23 ++++++++++++-----------
>  1 file changed, 12 insertions(+), 11 deletions(-)
> 
> diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
> index 520538a..9c9a01c 100644
> --- a/kernel/rcu/tree_plugin.h
> +++ b/kernel/rcu/tree_plugin.h
> @@ -54,7 +54,10 @@ static void __init rcu_bootup_announce_oddness_nocb(void)
>  {
>  #ifndef CONFIG_RCU_NOCB_CPU_NONE
>  	if (!have_rcu_nocb_mask) {
> -		zalloc_cpumask_var(&rcu_nocb_mask, GFP_KERNEL);
> +		if (!zalloc_cpumask_var(&rcu_nocb_mask, GFP_KERNEL)) {
> +			pr_info("rcu_nocb_mask allocation failed\n");
> +			return;
> +		}
>  		have_rcu_nocb_mask = true;
>  	}
>  #ifdef CONFIG_RCU_NOCB_CPU_ZERO
> @@ -66,17 +69,15 @@ static void __init rcu_bootup_announce_oddness_nocb(void)
>  	cpumask_copy(rcu_nocb_mask, cpu_possible_mask);
>  #endif /* #ifdef CONFIG_RCU_NOCB_CPU_ALL */
>  #endif /* #ifndef CONFIG_RCU_NOCB_CPU_NONE */
> -	if (have_rcu_nocb_mask) {
> -		if (!cpumask_subset(rcu_nocb_mask, cpu_possible_mask)) {
> -			pr_info("\tNote: kernel parameter 'rcu_nocbs=' contains nonexistent CPUs.\n");
> -			cpumask_and(rcu_nocb_mask, cpu_possible_mask,
> -				    rcu_nocb_mask);
> -		}
> -		cpulist_scnprintf(nocb_buf, sizeof(nocb_buf), rcu_nocb_mask);
> -		pr_info("\tOffload RCU callbacks from CPUs: %s.\n", nocb_buf);
> -		if (rcu_nocb_poll)
> -			pr_info("\tPoll for callbacks from no-CBs CPUs.\n");
> +	if (!cpumask_subset(rcu_nocb_mask, cpu_possible_mask)) {

What happens if CONFIG_RCU_NOCB_CPU_NONE=y and the rcu_nocbs= boot
parameter is not specified and we get here?

In order to get visible failures when testing, build with
CONFIG_CPUMASK_OFFSTACK=y.

> +		pr_info("\tNote: kernel parameter 'rcu_nocbs=' contains nonexistent CPUs.\n");
> +		cpumask_and(rcu_nocb_mask, cpu_possible_mask,
> +				rcu_nocb_mask);
>  	}
> +	cpulist_scnprintf(nocb_buf, sizeof(nocb_buf), rcu_nocb_mask);
> +	pr_info("\tOffload RCU callbacks from CPUs: %s.\n", nocb_buf);
> +	if (rcu_nocb_poll)
> +		pr_info("\tPoll for callbacks from no-CBs CPUs.\n");
>  }
> 
>  /*
> -- 
> 2.0.1
> 


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

* Re: [PATCH v2 1/2] rcu: Create a function for rcu_nocb_mask boot time setup
  2014-07-25  0:37 [PATCH v2 1/2] rcu: Create a function for rcu_nocb_mask boot time setup Pranith Kumar
  2014-07-25  0:37 ` [PATCH v2 2/2] rcu: Check the return value of rcu_nocb_mask cpumask allocation Pranith Kumar
@ 2014-07-25 15:27 ` Paul E. McKenney
  1 sibling, 0 replies; 6+ messages in thread
From: Paul E. McKenney @ 2014-07-25 15:27 UTC (permalink / raw)
  To: Pranith Kumar
  Cc: Josh Triplett, Steven Rostedt, Mathieu Desnoyers, Lai Jiangshan,
	open list:READ-COPY UPDATE...

On Thu, Jul 24, 2014 at 08:37:31PM -0400, Pranith Kumar wrote:
> This commit creates a function rcu_bootup_announce_oddness_nocb(), which handles
> allocation of rcu_nocb_mask and setting it according to the kernel configuration
> parameters.
> 
> Signed-off-by: Pranith Kumar <bobby.prani@gmail.com>

Much better!

One more change called out below.

							Thanx, Paul

> ---
> v2: don't break the print string (comment from paulmck)
> 
>  kernel/rcu/tree_plugin.h | 61 +++++++++++++++++++++++++++---------------------
>  1 file changed, 35 insertions(+), 26 deletions(-)
> 
> diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
> index c31eb28..520538a 100644
> --- a/kernel/rcu/tree_plugin.h
> +++ b/kernel/rcu/tree_plugin.h
> @@ -47,6 +47,39 @@ static char __initdata nocb_buf[NR_CPUS * 5];
>  #endif /* #ifdef CONFIG_RCU_NOCB_CPU */
> 
>  /*
> + * This is a helper for rcu_bootup_announce_oddness(), which takes care of
> + * setting up rcu_nocb_mask for nocb specific kernel configuration parameters
> + */
> +static void __init rcu_bootup_announce_oddness_nocb(void)
> +{
> +#ifndef CONFIG_RCU_NOCB_CPU_NONE
> +	if (!have_rcu_nocb_mask) {
> +		zalloc_cpumask_var(&rcu_nocb_mask, GFP_KERNEL);
> +		have_rcu_nocb_mask = true;
> +	}
> +#ifdef CONFIG_RCU_NOCB_CPU_ZERO
> +	pr_info("\tOffload RCU callbacks from CPU 0\n");
> +	cpumask_set_cpu(0, rcu_nocb_mask);
> +#endif /* #ifdef CONFIG_RCU_NOCB_CPU_ZERO */
> +#ifdef CONFIG_RCU_NOCB_CPU_ALL
> +	pr_info("\tOffload RCU callbacks from all CPUs\n");
> +	cpumask_copy(rcu_nocb_mask, cpu_possible_mask);
> +#endif /* #ifdef CONFIG_RCU_NOCB_CPU_ALL */
> +#endif /* #ifndef CONFIG_RCU_NOCB_CPU_NONE */
> +	if (have_rcu_nocb_mask) {
> +		if (!cpumask_subset(rcu_nocb_mask, cpu_possible_mask)) {
> +			pr_info("\tNote: kernel parameter 'rcu_nocbs=' contains nonexistent CPUs.\n");
> +			cpumask_and(rcu_nocb_mask, cpu_possible_mask,
> +				    rcu_nocb_mask);
> +		}
> +		cpulist_scnprintf(nocb_buf, sizeof(nocb_buf), rcu_nocb_mask);
> +		pr_info("\tOffload RCU callbacks from CPUs: %s.\n", nocb_buf);
> +		if (rcu_nocb_poll)
> +			pr_info("\tPoll for callbacks from no-CBs CPUs.\n");
> +	}
> +}
> +
> +/*
>   * Check the RCU kernel configuration parameters and print informative
>   * messages about anything out of the ordinary.  If you like #ifdef, you
>   * will love this function.
> @@ -86,32 +119,8 @@ static void __init rcu_bootup_announce_oddness(void)
>  	if (nr_cpu_ids != NR_CPUS)
>  		pr_info("\tRCU restricting CPUs from NR_CPUS=%d to nr_cpu_ids=%d.\n", NR_CPUS, nr_cpu_ids);
>  #ifdef CONFIG_RCU_NOCB_CPU

Please also move the above #ifdef into rcu_bootup_announce_oddness_nocb().
The compiler will inline the resulting empty function, and it is cleaner
to have all of the NOCB-related #ifdefs in that function.

> -#ifndef CONFIG_RCU_NOCB_CPU_NONE
> -	if (!have_rcu_nocb_mask) {
> -		zalloc_cpumask_var(&rcu_nocb_mask, GFP_KERNEL);
> -		have_rcu_nocb_mask = true;
> -	}
> -#ifdef CONFIG_RCU_NOCB_CPU_ZERO
> -	pr_info("\tOffload RCU callbacks from CPU 0\n");
> -	cpumask_set_cpu(0, rcu_nocb_mask);
> -#endif /* #ifdef CONFIG_RCU_NOCB_CPU_ZERO */
> -#ifdef CONFIG_RCU_NOCB_CPU_ALL
> -	pr_info("\tOffload RCU callbacks from all CPUs\n");
> -	cpumask_copy(rcu_nocb_mask, cpu_possible_mask);
> -#endif /* #ifdef CONFIG_RCU_NOCB_CPU_ALL */
> -#endif /* #ifndef CONFIG_RCU_NOCB_CPU_NONE */
> -	if (have_rcu_nocb_mask) {
> -		if (!cpumask_subset(rcu_nocb_mask, cpu_possible_mask)) {
> -			pr_info("\tNote: kernel parameter 'rcu_nocbs=' contains nonexistent CPUs.\n");
> -			cpumask_and(rcu_nocb_mask, cpu_possible_mask,
> -				    rcu_nocb_mask);
> -		}
> -		cpulist_scnprintf(nocb_buf, sizeof(nocb_buf), rcu_nocb_mask);
> -		pr_info("\tOffload RCU callbacks from CPUs: %s.\n", nocb_buf);
> -		if (rcu_nocb_poll)
> -			pr_info("\tPoll for callbacks from no-CBs CPUs.\n");
> -	}
> -#endif /* #ifdef CONFIG_RCU_NOCB_CPU */
> +	rcu_bootup_announce_oddness_nocb();
> +#endif
>  }
> 
>  #ifdef CONFIG_TREE_PREEMPT_RCU
> -- 
> 2.0.1
> 


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

* Re: [PATCH v2 2/2] rcu: Check the return value of rcu_nocb_mask cpumask allocation
  2014-07-25 15:25   ` Paul E. McKenney
@ 2014-07-25 18:06     ` Paul E. McKenney
  2014-07-25 19:33       ` Pranith Kumar
  0 siblings, 1 reply; 6+ messages in thread
From: Paul E. McKenney @ 2014-07-25 18:06 UTC (permalink / raw)
  To: Pranith Kumar
  Cc: Josh Triplett, Steven Rostedt, Mathieu Desnoyers, Lai Jiangshan,
	open list:READ-COPY UPDATE...

On Fri, Jul 25, 2014 at 08:25:51AM -0700, Paul E. McKenney wrote:
> On Thu, Jul 24, 2014 at 08:37:32PM -0400, Pranith Kumar wrote:
> > This commit checks the return value of the zalloc_cpumask_var() used for
> > allocating cpumask for rcu_nocb_mask.
> > 
> > Signed-off-by: Pranith Kumar <bobby.prani@gmail.com>
> 
> Hmmm...  I saw the check in the previous patch, but didn't see removal
> of the later have_rcu_nocb_mask check.  Please see below.

And events overtook this one.  Turns out that commit b58cc46c5f6b
(rcu: Don't offload callbacks unless specifically requested) was not
one of my best efforts.

I will adapt your patch 2/2 in this series and apply it with your
Signed-off-by.  Patch 1/2 is obsoleted by the current fix for
commit b58cc46c5f6b.

							Thanx, Paul

> > ---
> > v2: no change from v1
> > 
> >  kernel/rcu/tree_plugin.h | 23 ++++++++++++-----------
> >  1 file changed, 12 insertions(+), 11 deletions(-)
> > 
> > diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
> > index 520538a..9c9a01c 100644
> > --- a/kernel/rcu/tree_plugin.h
> > +++ b/kernel/rcu/tree_plugin.h
> > @@ -54,7 +54,10 @@ static void __init rcu_bootup_announce_oddness_nocb(void)
> >  {
> >  #ifndef CONFIG_RCU_NOCB_CPU_NONE
> >  	if (!have_rcu_nocb_mask) {
> > -		zalloc_cpumask_var(&rcu_nocb_mask, GFP_KERNEL);
> > +		if (!zalloc_cpumask_var(&rcu_nocb_mask, GFP_KERNEL)) {
> > +			pr_info("rcu_nocb_mask allocation failed\n");
> > +			return;
> > +		}
> >  		have_rcu_nocb_mask = true;
> >  	}
> >  #ifdef CONFIG_RCU_NOCB_CPU_ZERO
> > @@ -66,17 +69,15 @@ static void __init rcu_bootup_announce_oddness_nocb(void)
> >  	cpumask_copy(rcu_nocb_mask, cpu_possible_mask);
> >  #endif /* #ifdef CONFIG_RCU_NOCB_CPU_ALL */
> >  #endif /* #ifndef CONFIG_RCU_NOCB_CPU_NONE */
> > -	if (have_rcu_nocb_mask) {
> > -		if (!cpumask_subset(rcu_nocb_mask, cpu_possible_mask)) {
> > -			pr_info("\tNote: kernel parameter 'rcu_nocbs=' contains nonexistent CPUs.\n");
> > -			cpumask_and(rcu_nocb_mask, cpu_possible_mask,
> > -				    rcu_nocb_mask);
> > -		}
> > -		cpulist_scnprintf(nocb_buf, sizeof(nocb_buf), rcu_nocb_mask);
> > -		pr_info("\tOffload RCU callbacks from CPUs: %s.\n", nocb_buf);
> > -		if (rcu_nocb_poll)
> > -			pr_info("\tPoll for callbacks from no-CBs CPUs.\n");
> > +	if (!cpumask_subset(rcu_nocb_mask, cpu_possible_mask)) {
> 
> What happens if CONFIG_RCU_NOCB_CPU_NONE=y and the rcu_nocbs= boot
> parameter is not specified and we get here?
> 
> In order to get visible failures when testing, build with
> CONFIG_CPUMASK_OFFSTACK=y.
> 
> > +		pr_info("\tNote: kernel parameter 'rcu_nocbs=' contains nonexistent CPUs.\n");
> > +		cpumask_and(rcu_nocb_mask, cpu_possible_mask,
> > +				rcu_nocb_mask);
> >  	}
> > +	cpulist_scnprintf(nocb_buf, sizeof(nocb_buf), rcu_nocb_mask);
> > +	pr_info("\tOffload RCU callbacks from CPUs: %s.\n", nocb_buf);
> > +	if (rcu_nocb_poll)
> > +		pr_info("\tPoll for callbacks from no-CBs CPUs.\n");
> >  }
> > 
> >  /*
> > -- 
> > 2.0.1
> > 


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

* Re: [PATCH v2 2/2] rcu: Check the return value of rcu_nocb_mask cpumask allocation
  2014-07-25 18:06     ` Paul E. McKenney
@ 2014-07-25 19:33       ` Pranith Kumar
  0 siblings, 0 replies; 6+ messages in thread
From: Pranith Kumar @ 2014-07-25 19:33 UTC (permalink / raw)
  To: Paul McKenney
  Cc: Josh Triplett, Steven Rostedt, Mathieu Desnoyers, Lai Jiangshan,
	open list:READ-COPY UPDATE...

On Fri, Jul 25, 2014 at 2:06 PM, Paul E. McKenney
<paulmck@linux.vnet.ibm.com> wrote:
> On Fri, Jul 25, 2014 at 08:25:51AM -0700, Paul E. McKenney wrote:
>> On Thu, Jul 24, 2014 at 08:37:32PM -0400, Pranith Kumar wrote:
>> > This commit checks the return value of the zalloc_cpumask_var() used for
>> > allocating cpumask for rcu_nocb_mask.
>> >
>> > Signed-off-by: Pranith Kumar <bobby.prani@gmail.com>
>>
>> Hmmm...  I saw the check in the previous patch, but didn't see removal
>> of the later have_rcu_nocb_mask check.  Please see below.
>
> And events overtook this one.  Turns out that commit b58cc46c5f6b
> (rcu: Don't offload callbacks unless specifically requested) was not
> one of my best efforts.
>
> I will adapt your patch 2/2 in this series and apply it with your
> Signed-off-by.  Patch 1/2 is obsoleted by the current fix for
> commit b58cc46c5f6b.
>

OK. I am curious to see what problem you found in that commit.
I look forward to see your updated patch.

>> > ---
>> > v2: no change from v1
>> >
>> >  kernel/rcu/tree_plugin.h | 23 ++++++++++++-----------
>> >  1 file changed, 12 insertions(+), 11 deletions(-)
>> >
>> > diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
>> > index 520538a..9c9a01c 100644
>> > --- a/kernel/rcu/tree_plugin.h
>> > +++ b/kernel/rcu/tree_plugin.h
>> > @@ -54,7 +54,10 @@ static void __init rcu_bootup_announce_oddness_nocb(void)
>> >  {
>> >  #ifndef CONFIG_RCU_NOCB_CPU_NONE
>> >     if (!have_rcu_nocb_mask) {
>> > -           zalloc_cpumask_var(&rcu_nocb_mask, GFP_KERNEL);
>> > +           if (!zalloc_cpumask_var(&rcu_nocb_mask, GFP_KERNEL)) {
>> > +                   pr_info("rcu_nocb_mask allocation failed\n");
>> > +                   return;
>> > +           }
>> >             have_rcu_nocb_mask = true;
>> >     }
>> >  #ifdef CONFIG_RCU_NOCB_CPU_ZERO
>> > @@ -66,17 +69,15 @@ static void __init rcu_bootup_announce_oddness_nocb(void)
>> >     cpumask_copy(rcu_nocb_mask, cpu_possible_mask);
>> >  #endif /* #ifdef CONFIG_RCU_NOCB_CPU_ALL */
>> >  #endif /* #ifndef CONFIG_RCU_NOCB_CPU_NONE */
>> > -   if (have_rcu_nocb_mask) {
>> > -           if (!cpumask_subset(rcu_nocb_mask, cpu_possible_mask)) {
>> > -                   pr_info("\tNote: kernel parameter 'rcu_nocbs=' contains nonexistent CPUs.\n");
>> > -                   cpumask_and(rcu_nocb_mask, cpu_possible_mask,
>> > -                               rcu_nocb_mask);
>> > -           }
>> > -           cpulist_scnprintf(nocb_buf, sizeof(nocb_buf), rcu_nocb_mask);
>> > -           pr_info("\tOffload RCU callbacks from CPUs: %s.\n", nocb_buf);
>> > -           if (rcu_nocb_poll)
>> > -                   pr_info("\tPoll for callbacks from no-CBs CPUs.\n");
>> > +   if (!cpumask_subset(rcu_nocb_mask, cpu_possible_mask)) {
>>
>> What happens if CONFIG_RCU_NOCB_CPU_NONE=y and the rcu_nocbs= boot
>> parameter is not specified and we get here?
>>
>> In order to get visible failures when testing, build with
>> CONFIG_CPUMASK_OFFSTACK=y.
>>
>> > +           pr_info("\tNote: kernel parameter 'rcu_nocbs=' contains nonexistent CPUs.\n");
>> > +           cpumask_and(rcu_nocb_mask, cpu_possible_mask,
>> > +                           rcu_nocb_mask);
>> >     }
>> > +   cpulist_scnprintf(nocb_buf, sizeof(nocb_buf), rcu_nocb_mask);
>> > +   pr_info("\tOffload RCU callbacks from CPUs: %s.\n", nocb_buf);
>> > +   if (rcu_nocb_poll)
>> > +           pr_info("\tPoll for callbacks from no-CBs CPUs.\n");
>> >  }
>> >
>> >  /*
>> > --
>> > 2.0.1
>> >
>



-- 
Pranith

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

end of thread, other threads:[~2014-07-25 19:34 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-07-25  0:37 [PATCH v2 1/2] rcu: Create a function for rcu_nocb_mask boot time setup Pranith Kumar
2014-07-25  0:37 ` [PATCH v2 2/2] rcu: Check the return value of rcu_nocb_mask cpumask allocation Pranith Kumar
2014-07-25 15:25   ` Paul E. McKenney
2014-07-25 18:06     ` Paul E. McKenney
2014-07-25 19:33       ` Pranith Kumar
2014-07-25 15:27 ` [PATCH v2 1/2] rcu: Create a function for rcu_nocb_mask boot time setup Paul E. McKenney

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.