rcu.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH rcu 0/5] smp_call_function() torture-test updates for v5.16
@ 2021-09-15 23:41 Paul E. McKenney
  2021-09-15 23:41 ` [PATCH rcu 1/5] scftorture: Allow zero weight to exclude an smp_call_function*() category Paul E. McKenney
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Paul E. McKenney @ 2021-09-15 23:41 UTC (permalink / raw)
  To: rcu
  Cc: linux-kernel, kernel-team, mingo, jiangshanlai, akpm,
	mathieu.desnoyers, josh, tglx, peterz, rostedt, dhowells,
	edumazet, fweisbec, oleg, joel

Hello!

This series contains in-kernel torture-test updates for smp_call_function()
and friends, AKA scftorture.

1.	Allow zero weight to exclude an smp_call_function*() category.

2.	Shut down if nonsensical arguments given.

3.	Account for weight_resched when checking for all zeroes.

4.	Count reschedule IPIs.

5.	Warn on individual scf_torture_init() error conditions.

						Thanx, Paul

------------------------------------------------------------------------

 b/kernel/scftorture.c |   24 ++++++++++++------------
 kernel/scftorture.c   |   19 ++++++++++++-------
 2 files changed, 24 insertions(+), 19 deletions(-)

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

* [PATCH rcu 1/5] scftorture: Allow zero weight to exclude an smp_call_function*() category
  2021-09-15 23:41 [PATCH rcu 0/5] smp_call_function() torture-test updates for v5.16 Paul E. McKenney
@ 2021-09-15 23:41 ` Paul E. McKenney
  2021-09-15 23:41 ` [PATCH rcu 2/5] scftorture: Shut down if nonsensical arguments given Paul E. McKenney
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Paul E. McKenney @ 2021-09-15 23:41 UTC (permalink / raw)
  To: rcu
  Cc: linux-kernel, kernel-team, mingo, jiangshanlai, akpm,
	mathieu.desnoyers, josh, tglx, peterz, rostedt, dhowells,
	edumazet, fweisbec, oleg, joel, Paul E. McKenney

This commit reworks the weighting calculations to allow zero to
be specified to diable a given weight.  For example, specifying the
scftorture.weight_resched=0 kernel boot parameter without specifying a
non-zero value for any of the other scftorture.weight_* parameters would
provide the default weights for the others, but would refrain from doing
any resched-based IPIs.

Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
---
 kernel/scftorture.c | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/kernel/scftorture.c b/kernel/scftorture.c
index 64a08288b1a6..bc3f8e26345c 100644
--- a/kernel/scftorture.c
+++ b/kernel/scftorture.c
@@ -553,18 +553,18 @@ static int __init scf_torture_init(void)
 
 	scftorture_print_module_parms("Start of test");
 
-	if (weight_resched == -1 &&
-	    weight_single == -1 && weight_single_rpc == -1 && weight_single_wait == -1 &&
-	    weight_many == -1 && weight_many_wait == -1 &&
-	    weight_all == -1 && weight_all_wait == -1) {
-		weight_resched1 = 2 * nr_cpu_ids;
-		weight_single1 = 2 * nr_cpu_ids;
-		weight_single_rpc1 = 2 * nr_cpu_ids;
-		weight_single_wait1 = 2 * nr_cpu_ids;
-		weight_many1 = 2;
-		weight_many_wait1 = 2;
-		weight_all1 = 1;
-		weight_all_wait1 = 1;
+	if (weight_resched <= 0 &&
+	    weight_single <= 0 && weight_single_rpc <= 0 && weight_single_wait <= 0 &&
+	    weight_many <= 0 && weight_many_wait <= 0 &&
+	    weight_all <= 0 && weight_all_wait <= 0) {
+		weight_resched1 = weight_resched == 0 ? 0 : 2 * nr_cpu_ids;
+		weight_single1 = weight_single == 0 ? 0 : 2 * nr_cpu_ids;
+		weight_single_rpc1 = weight_single_rpc == 0 ? 0 : 2 * nr_cpu_ids;
+		weight_single_wait1 = weight_single_wait == 0 ? 0 : 2 * nr_cpu_ids;
+		weight_many1 = weight_many == 0 ? 0 : 2;
+		weight_many_wait1 = weight_many_wait == 0 ? 0 : 2;
+		weight_all1 = weight_all == 0 ? 0 : 1;
+		weight_all_wait1 = weight_all_wait == 0 ? 0 : 1;
 	} else {
 		if (weight_resched == -1)
 			weight_resched1 = 0;
-- 
2.31.1.189.g2e36527f23


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

* [PATCH rcu 2/5] scftorture: Shut down if nonsensical arguments given
  2021-09-15 23:41 [PATCH rcu 0/5] smp_call_function() torture-test updates for v5.16 Paul E. McKenney
  2021-09-15 23:41 ` [PATCH rcu 1/5] scftorture: Allow zero weight to exclude an smp_call_function*() category Paul E. McKenney
@ 2021-09-15 23:41 ` Paul E. McKenney
  2021-09-15 23:41 ` [PATCH rcu 3/5] scftorture: Account for weight_resched when checking for all zeroes Paul E. McKenney
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Paul E. McKenney @ 2021-09-15 23:41 UTC (permalink / raw)
  To: rcu
  Cc: linux-kernel, kernel-team, mingo, jiangshanlai, akpm,
	mathieu.desnoyers, josh, tglx, peterz, rostedt, dhowells,
	edumazet, fweisbec, oleg, joel, Paul E. McKenney

If (say) a 10-hour scftorture run is started, but the module parameters
are so nonsensical that the run doesn't even start, then scftorture will
wait the full ten hours when run built into a guest OS.  This commit
therefore shuts down the system in this case so that the error is reported
immediately instead of ten hours hence.

Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
---
 kernel/scftorture.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/kernel/scftorture.c b/kernel/scftorture.c
index bc3f8e26345c..31b458b3b113 100644
--- a/kernel/scftorture.c
+++ b/kernel/scftorture.c
@@ -651,6 +651,10 @@ static int __init scf_torture_init(void)
 unwind:
 	torture_init_end();
 	scf_torture_cleanup();
+	if (shutdown_secs) {
+		WARN_ON(!IS_MODULE(CONFIG_SCF_TORTURE_TEST));
+		kernel_power_off();
+	}
 	return firsterr;
 }
 
-- 
2.31.1.189.g2e36527f23


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

* [PATCH rcu 3/5] scftorture: Account for weight_resched when checking for all zeroes
  2021-09-15 23:41 [PATCH rcu 0/5] smp_call_function() torture-test updates for v5.16 Paul E. McKenney
  2021-09-15 23:41 ` [PATCH rcu 1/5] scftorture: Allow zero weight to exclude an smp_call_function*() category Paul E. McKenney
  2021-09-15 23:41 ` [PATCH rcu 2/5] scftorture: Shut down if nonsensical arguments given Paul E. McKenney
@ 2021-09-15 23:41 ` Paul E. McKenney
  2021-09-15 23:41 ` [PATCH rcu 4/5] scftorture: Count reschedule IPIs Paul E. McKenney
  2021-09-15 23:41 ` [PATCH rcu 5/5] scftorture: Warn on individual scf_torture_init() error conditions Paul E. McKenney
  4 siblings, 0 replies; 6+ messages in thread
From: Paul E. McKenney @ 2021-09-15 23:41 UTC (permalink / raw)
  To: rcu
  Cc: linux-kernel, kernel-team, mingo, jiangshanlai, akpm,
	mathieu.desnoyers, josh, tglx, peterz, rostedt, dhowells,
	edumazet, fweisbec, oleg, joel, Paul E. McKenney

The "all zero weights makes no sense" error is emitted even when
scftorture.weight_resched is non-zero because it was left out of
the enclosing "if" condition.  This commit adds it in.

Fixes: 1ac78b49d61d4 ("scftorture: Add an alternative IPI vector")
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
---
 kernel/scftorture.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/scftorture.c b/kernel/scftorture.c
index 31b458b3b113..74348abc792b 100644
--- a/kernel/scftorture.c
+++ b/kernel/scftorture.c
@@ -583,8 +583,8 @@ static int __init scf_torture_init(void)
 		if (weight_all_wait == -1)
 			weight_all_wait1 = 0;
 	}
-	if (weight_single1 == 0 && weight_single_rpc1 == 0 && weight_single_wait1 == 0 &&
-	    weight_many1 == 0 && weight_many_wait1 == 0 &&
+	if (weight_resched1 == 0 && weight_single1 == 0 && weight_single_rpc1 == 0 &&
+	    weight_single_wait1 == 0 && weight_many1 == 0 && weight_many_wait1 == 0 &&
 	    weight_all1 == 0 && weight_all_wait1 == 0) {
 		VERBOSE_SCFTORTOUT_ERRSTRING("all zero weights makes no sense");
 		firsterr = -EINVAL;
-- 
2.31.1.189.g2e36527f23


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

* [PATCH rcu 4/5] scftorture: Count reschedule IPIs
  2021-09-15 23:41 [PATCH rcu 0/5] smp_call_function() torture-test updates for v5.16 Paul E. McKenney
                   ` (2 preceding siblings ...)
  2021-09-15 23:41 ` [PATCH rcu 3/5] scftorture: Account for weight_resched when checking for all zeroes Paul E. McKenney
@ 2021-09-15 23:41 ` Paul E. McKenney
  2021-09-15 23:41 ` [PATCH rcu 5/5] scftorture: Warn on individual scf_torture_init() error conditions Paul E. McKenney
  4 siblings, 0 replies; 6+ messages in thread
From: Paul E. McKenney @ 2021-09-15 23:41 UTC (permalink / raw)
  To: rcu
  Cc: linux-kernel, kernel-team, mingo, jiangshanlai, akpm,
	mathieu.desnoyers, josh, tglx, peterz, rostedt, dhowells,
	edumazet, fweisbec, oleg, joel, Paul E. McKenney

Currently, only those IPIs that invoke scftorture's scf_handler()
IPI handler function are counted.  This means that runs exercising
only scftorture.weight_resched will look like they have made no forward
progress, resulting in "GP HANG" complaints from the rcutorture scripting.
This commit therefore increments the scf_invoked_count per-CPU counter
immediately after calling resched_cpu().

Fixes: 1ac78b49d61d4 ("scftorture: Add an alternative IPI vector")
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
---
 kernel/scftorture.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/kernel/scftorture.c b/kernel/scftorture.c
index 74348abc792b..00bba2bdd4d1 100644
--- a/kernel/scftorture.c
+++ b/kernel/scftorture.c
@@ -341,6 +341,7 @@ static void scftorture_invoke_one(struct scf_statistics *scfp, struct torture_ra
 			cpu = torture_random(trsp) % nr_cpu_ids;
 			scfp->n_resched++;
 			resched_cpu(cpu);
+			this_cpu_inc(scf_invoked_count);
 		}
 		break;
 	case SCF_PRIM_SINGLE:
-- 
2.31.1.189.g2e36527f23


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

* [PATCH rcu 5/5] scftorture: Warn on individual scf_torture_init() error conditions
  2021-09-15 23:41 [PATCH rcu 0/5] smp_call_function() torture-test updates for v5.16 Paul E. McKenney
                   ` (3 preceding siblings ...)
  2021-09-15 23:41 ` [PATCH rcu 4/5] scftorture: Count reschedule IPIs Paul E. McKenney
@ 2021-09-15 23:41 ` Paul E. McKenney
  4 siblings, 0 replies; 6+ messages in thread
From: Paul E. McKenney @ 2021-09-15 23:41 UTC (permalink / raw)
  To: rcu
  Cc: linux-kernel, kernel-team, mingo, jiangshanlai, akpm,
	mathieu.desnoyers, josh, tglx, peterz, rostedt, dhowells,
	edumazet, fweisbec, oleg, joel, Paul E. McKenney

When running scftorture as a module, any scf_torture_init() issues will be
reflected in the error code from modprobe or insmod, as the case may be.
However, these error codes are not available when running scftorture
built-in, for example, when using the kvm.sh script.  This commit
therefore adds WARN_ON_ONCE() to allow distinguishing scf_torture_init()
errors when running scftorture built-in.

Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
---
 kernel/scftorture.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/kernel/scftorture.c b/kernel/scftorture.c
index 00bba2bdd4d1..5d42f44e3e1a 100644
--- a/kernel/scftorture.c
+++ b/kernel/scftorture.c
@@ -606,17 +606,17 @@ static int __init scf_torture_init(void)
 
 	if (onoff_interval > 0) {
 		firsterr = torture_onoff_init(onoff_holdoff * HZ, onoff_interval, NULL);
-		if (firsterr)
+		if (torture_init_error(firsterr))
 			goto unwind;
 	}
 	if (shutdown_secs > 0) {
 		firsterr = torture_shutdown_init(shutdown_secs, scf_torture_cleanup);
-		if (firsterr)
+		if (torture_init_error(firsterr))
 			goto unwind;
 	}
 	if (stutter > 0) {
 		firsterr = torture_stutter_init(stutter, stutter);
-		if (firsterr)
+		if (torture_init_error(firsterr))
 			goto unwind;
 	}
 
@@ -637,12 +637,12 @@ static int __init scf_torture_init(void)
 		scf_stats_p[i].cpu = i;
 		firsterr = torture_create_kthread(scftorture_invoker, (void *)&scf_stats_p[i],
 						  scf_stats_p[i].task);
-		if (firsterr)
+		if (torture_init_error(firsterr))
 			goto unwind;
 	}
 	if (stat_interval > 0) {
 		firsterr = torture_create_kthread(scf_torture_stats, NULL, scf_torture_stats_task);
-		if (firsterr)
+		if (torture_init_error(firsterr))
 			goto unwind;
 	}
 
-- 
2.31.1.189.g2e36527f23


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

end of thread, other threads:[~2021-09-15 23:41 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-15 23:41 [PATCH rcu 0/5] smp_call_function() torture-test updates for v5.16 Paul E. McKenney
2021-09-15 23:41 ` [PATCH rcu 1/5] scftorture: Allow zero weight to exclude an smp_call_function*() category Paul E. McKenney
2021-09-15 23:41 ` [PATCH rcu 2/5] scftorture: Shut down if nonsensical arguments given Paul E. McKenney
2021-09-15 23:41 ` [PATCH rcu 3/5] scftorture: Account for weight_resched when checking for all zeroes Paul E. McKenney
2021-09-15 23:41 ` [PATCH rcu 4/5] scftorture: Count reschedule IPIs Paul E. McKenney
2021-09-15 23:41 ` [PATCH rcu 5/5] scftorture: Warn on individual scf_torture_init() error conditions Paul E. McKenney

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