All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH tip/core/rcu 0/6] Torture-test updates for 4.3
@ 2015-07-17 23:45 Paul E. McKenney
  2015-07-17 23:45 ` [PATCH tip/core/rcu 1/6] rcutorture: Better bounds checking for n_barrier_cbs Paul E. McKenney
  0 siblings, 1 reply; 7+ messages in thread
From: Paul E. McKenney @ 2015-07-17 23:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: mingo, jiangshanlai, dipankar, akpm, mathieu.desnoyers, josh,
	tglx, peterz, rostedt, dhowells, edumazet, dvhart, fweisbec, oleg,
	bobby.prani

Hello!

This series contains torture-test updates:

1.	Improve bounds checking for n_barrier_cbs: No more negatives.

2.	Improve bounds checking for nfakewriters: No more negatives.

3.	Improve bounds checking for shuffle_interval: No more negatives.

4.	Fix rcu_torture_cbflood() for callback-free RCU to avoid
	occasional segfaults when disabled.

5.	Add RCU-tasks qualifier to dereference to avoid lockdep
	false positives during torture testing.

6.	Enable lockdep-RCU on TASKS01 to improve test coverage.

							Thanx, Paul

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

 b/kernel/rcu/rcutorture.c                                |   40 ++++++++++-----
 b/tools/testing/selftests/rcutorture/configs/rcu/TASKS01 |    4 -
 2 files changed, 29 insertions(+), 15 deletions(-)


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

* [PATCH tip/core/rcu 1/6] rcutorture: Better bounds checking for n_barrier_cbs
  2015-07-17 23:45 [PATCH tip/core/rcu 0/6] Torture-test updates for 4.3 Paul E. McKenney
@ 2015-07-17 23:45 ` Paul E. McKenney
  2015-07-17 23:45   ` [PATCH tip/core/rcu 2/6] rcutorture: Check nfakewriters parameter Paul E. McKenney
                     ` (4 more replies)
  0 siblings, 5 replies; 7+ messages in thread
From: Paul E. McKenney @ 2015-07-17 23:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: mingo, jiangshanlai, dipankar, akpm, mathieu.desnoyers, josh,
	tglx, peterz, rostedt, dhowells, edumazet, dvhart, fweisbec, oleg,
	bobby.prani, Paul E. McKenney

From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>

A negative value for rcutorture.n_barrier_cbs can pass a negative value
to the memory allocator, so this commit instead causes rcu_barrier()
testing to be disabled in this case.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
---
 kernel/rcu/rcutorture.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
index 59e32684c23b..7e29a3266139 100644
--- a/kernel/rcu/rcutorture.c
+++ b/kernel/rcu/rcutorture.c
@@ -1507,7 +1507,7 @@ static int rcu_torture_barrier_init(void)
 	int i;
 	int ret;
 
-	if (n_barrier_cbs == 0)
+	if (n_barrier_cbs <= 0)
 		return 0;
 	if (cur_ops->call == NULL || cur_ops->cb_barrier == NULL) {
 		pr_alert("%s" TORTURE_FLAG
-- 
1.8.1.5


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

* [PATCH tip/core/rcu 2/6] rcutorture: Check nfakewriters parameter
  2015-07-17 23:45 ` [PATCH tip/core/rcu 1/6] rcutorture: Better bounds checking for n_barrier_cbs Paul E. McKenney
@ 2015-07-17 23:45   ` Paul E. McKenney
  2015-07-17 23:45   ` [PATCH tip/core/rcu 3/6] rcutorture: Bounds-check rcutorture.shuffle_interval Paul E. McKenney
                     ` (3 subsequent siblings)
  4 siblings, 0 replies; 7+ messages in thread
From: Paul E. McKenney @ 2015-07-17 23:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: mingo, jiangshanlai, dipankar, akpm, mathieu.desnoyers, josh,
	tglx, peterz, rostedt, dhowells, edumazet, dvhart, fweisbec, oleg,
	bobby.prani, Paul E. McKenney

From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>

Currently, a negative value for rcutorture.nfakewriters= can cause
rcutorture to pass a negative size to the memory allocator, which
is not really a particularly good thing to do.  This commit therefore
adds bounds checking to this parameter, so that values that are less
than or equal to zero disable fake writing.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
---
 kernel/rcu/rcutorture.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
index 7e29a3266139..2cbe569ac5dd 100644
--- a/kernel/rcu/rcutorture.c
+++ b/kernel/rcu/rcutorture.c
@@ -1786,12 +1786,15 @@ rcu_torture_init(void)
 					  writer_task);
 	if (firsterr)
 		goto unwind;
-	fakewriter_tasks = kzalloc(nfakewriters * sizeof(fakewriter_tasks[0]),
-				   GFP_KERNEL);
-	if (fakewriter_tasks == NULL) {
-		VERBOSE_TOROUT_ERRSTRING("out of memory");
-		firsterr = -ENOMEM;
-		goto unwind;
+	if (nfakewriters > 0) {
+		fakewriter_tasks = kzalloc(nfakewriters *
+					   sizeof(fakewriter_tasks[0]),
+					   GFP_KERNEL);
+		if (fakewriter_tasks == NULL) {
+			VERBOSE_TOROUT_ERRSTRING("out of memory");
+			firsterr = -ENOMEM;
+			goto unwind;
+		}
 	}
 	for (i = 0; i < nfakewriters; i++) {
 		firsterr = torture_create_kthread(rcu_torture_fakewriter,
-- 
1.8.1.5


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

* [PATCH tip/core/rcu 3/6] rcutorture: Bounds-check rcutorture.shuffle_interval
  2015-07-17 23:45 ` [PATCH tip/core/rcu 1/6] rcutorture: Better bounds checking for n_barrier_cbs Paul E. McKenney
  2015-07-17 23:45   ` [PATCH tip/core/rcu 2/6] rcutorture: Check nfakewriters parameter Paul E. McKenney
@ 2015-07-17 23:45   ` Paul E. McKenney
  2015-07-17 23:45   ` [PATCH tip/core/rcu 4/6] rcutorture: Fix rcu_torture_cbflood() for callback-free RCU Paul E. McKenney
                     ` (2 subsequent siblings)
  4 siblings, 0 replies; 7+ messages in thread
From: Paul E. McKenney @ 2015-07-17 23:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: mingo, jiangshanlai, dipankar, akpm, mathieu.desnoyers, josh,
	tglx, peterz, rostedt, dhowells, edumazet, dvhart, fweisbec, oleg,
	bobby.prani, Paul E. McKenney

From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>

Specifying a negative rcutorture.shuffle_interval value will cause a
negative value to be used as a sleep time.  This commit therefore
refuses to start shuffling unless the rcutorture.shuffle_interval
value is greater than zero.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
---
 kernel/rcu/rcutorture.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
index 2cbe569ac5dd..1cead7806ca6 100644
--- a/kernel/rcu/rcutorture.c
+++ b/kernel/rcu/rcutorture.c
@@ -1821,7 +1821,7 @@ rcu_torture_init(void)
 		if (firsterr)
 			goto unwind;
 	}
-	if (test_no_idle_hz) {
+	if (test_no_idle_hz && shuffle_interval > 0) {
 		firsterr = torture_shuffle_init(shuffle_interval * HZ);
 		if (firsterr)
 			goto unwind;
-- 
1.8.1.5


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

* [PATCH tip/core/rcu 4/6] rcutorture: Fix rcu_torture_cbflood() for callback-free RCU
  2015-07-17 23:45 ` [PATCH tip/core/rcu 1/6] rcutorture: Better bounds checking for n_barrier_cbs Paul E. McKenney
  2015-07-17 23:45   ` [PATCH tip/core/rcu 2/6] rcutorture: Check nfakewriters parameter Paul E. McKenney
  2015-07-17 23:45   ` [PATCH tip/core/rcu 3/6] rcutorture: Bounds-check rcutorture.shuffle_interval Paul E. McKenney
@ 2015-07-17 23:45   ` Paul E. McKenney
  2015-07-17 23:45   ` [PATCH tip/core/rcu 5/6] rcutorture: Add RCU-tasks qualifier to dereference Paul E. McKenney
  2015-07-17 23:45   ` [PATCH tip/core/rcu 6/6] rcutorture: Enable lockdep-RCU on TASKS01 Paul E. McKenney
  4 siblings, 0 replies; 7+ messages in thread
From: Paul E. McKenney @ 2015-07-17 23:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: mingo, jiangshanlai, dipankar, akpm, mathieu.desnoyers, josh,
	tglx, peterz, rostedt, dhowells, edumazet, dvhart, fweisbec, oleg,
	bobby.prani, Paul E. McKenney

From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>

The rcu_torture_cbflood() function correctly checks for flavors of
RCU that lack analogs to call_rcu() and rcu_barrier(), but in that
case it fails to terminate correctly.  In fact, it terminates so
incorrectly that segfaults can result.  This commit therefore causes
rcu_torture_cbflood() to do the proper wait-for-stop procedure.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
---
 kernel/rcu/rcutorture.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
index 1cead7806ca6..e0eda3c1b621 100644
--- a/kernel/rcu/rcutorture.c
+++ b/kernel/rcu/rcutorture.c
@@ -823,9 +823,7 @@ rcu_torture_cbflood(void *arg)
 	}
 	if (err) {
 		VERBOSE_TOROUT_STRING("rcu_torture_cbflood disabled: Bad args or OOM");
-		while (!torture_must_stop())
-			schedule_timeout_interruptible(HZ);
-		return 0;
+		goto wait_for_stop;
 	}
 	VERBOSE_TOROUT_STRING("rcu_torture_cbflood task started");
 	do {
@@ -844,6 +842,7 @@ rcu_torture_cbflood(void *arg)
 		stutter_wait("rcu_torture_cbflood");
 	} while (!torture_must_stop());
 	vfree(rhp);
+wait_for_stop:
 	torture_kthread_stopping("rcu_torture_cbflood");
 	return 0;
 }
-- 
1.8.1.5


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

* [PATCH tip/core/rcu 5/6] rcutorture: Add RCU-tasks qualifier to dereference
  2015-07-17 23:45 ` [PATCH tip/core/rcu 1/6] rcutorture: Better bounds checking for n_barrier_cbs Paul E. McKenney
                     ` (2 preceding siblings ...)
  2015-07-17 23:45   ` [PATCH tip/core/rcu 4/6] rcutorture: Fix rcu_torture_cbflood() for callback-free RCU Paul E. McKenney
@ 2015-07-17 23:45   ` Paul E. McKenney
  2015-07-17 23:45   ` [PATCH tip/core/rcu 6/6] rcutorture: Enable lockdep-RCU on TASKS01 Paul E. McKenney
  4 siblings, 0 replies; 7+ messages in thread
From: Paul E. McKenney @ 2015-07-17 23:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: mingo, jiangshanlai, dipankar, akpm, mathieu.desnoyers, josh,
	tglx, peterz, rostedt, dhowells, edumazet, dvhart, fweisbec, oleg,
	bobby.prani, Paul E. McKenney

From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>

Although RCU-tasks isn't really designed to support rcu_dereference()
and list manipulation, that is how rcutorture tests it.  Which means
that lockdep-RCU complains about the rcu_dereference_check() invocations
because RCU-tasks doesn't have read-side markers.  This commit therefore
creates a torturing_tasks() to silence the lockdep-RCU complaints from
rcu_dereference_check() when RCU-tasks is being tortured.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
---
 kernel/rcu/rcutorture.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
index e0eda3c1b621..67b3f260720e 100644
--- a/kernel/rcu/rcutorture.c
+++ b/kernel/rcu/rcutorture.c
@@ -684,10 +684,20 @@ static struct rcu_torture_ops tasks_ops = {
 
 #define RCUTORTURE_TASKS_OPS &tasks_ops,
 
+static bool __maybe_unused torturing_tasks(void)
+{
+	return cur_ops == &tasks_ops;
+}
+
 #else /* #ifdef CONFIG_TASKS_RCU */
 
 #define RCUTORTURE_TASKS_OPS
 
+static bool torturing_tasks(void)
+{
+	return false;
+}
+
 #endif /* #else #ifdef CONFIG_TASKS_RCU */
 
 /*
@@ -1087,7 +1097,8 @@ static void rcu_torture_timer(unsigned long unused)
 	p = rcu_dereference_check(rcu_torture_current,
 				  rcu_read_lock_bh_held() ||
 				  rcu_read_lock_sched_held() ||
-				  srcu_read_lock_held(srcu_ctlp));
+				  srcu_read_lock_held(srcu_ctlp) ||
+				  torturing_tasks());
 	if (p == NULL) {
 		/* Leave because rcu_torture_writer is not yet underway */
 		cur_ops->readunlock(idx);
@@ -1161,7 +1172,8 @@ rcu_torture_reader(void *arg)
 		p = rcu_dereference_check(rcu_torture_current,
 					  rcu_read_lock_bh_held() ||
 					  rcu_read_lock_sched_held() ||
-					  srcu_read_lock_held(srcu_ctlp));
+					  srcu_read_lock_held(srcu_ctlp) ||
+					  torturing_tasks());
 		if (p == NULL) {
 			/* Wait for rcu_torture_writer to get underway */
 			cur_ops->readunlock(idx);
-- 
1.8.1.5


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

* [PATCH tip/core/rcu 6/6] rcutorture: Enable lockdep-RCU on TASKS01
  2015-07-17 23:45 ` [PATCH tip/core/rcu 1/6] rcutorture: Better bounds checking for n_barrier_cbs Paul E. McKenney
                     ` (3 preceding siblings ...)
  2015-07-17 23:45   ` [PATCH tip/core/rcu 5/6] rcutorture: Add RCU-tasks qualifier to dereference Paul E. McKenney
@ 2015-07-17 23:45   ` Paul E. McKenney
  4 siblings, 0 replies; 7+ messages in thread
From: Paul E. McKenney @ 2015-07-17 23:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: mingo, jiangshanlai, dipankar, akpm, mathieu.desnoyers, josh,
	tglx, peterz, rostedt, dhowells, edumazet, dvhart, fweisbec, oleg,
	bobby.prani, Paul E. McKenney

From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>

Currently none of the RCU-tasks scenarios enables lockdep-RCU, which
causes bugs to be missed.  This commit therefore enables lockdep-RCU
on TASKS01.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
---
 tools/testing/selftests/rcutorture/configs/rcu/TASKS01 | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/testing/selftests/rcutorture/configs/rcu/TASKS01 b/tools/testing/selftests/rcutorture/configs/rcu/TASKS01
index 2cc0e60eba6e..bafe94cbd739 100644
--- a/tools/testing/selftests/rcutorture/configs/rcu/TASKS01
+++ b/tools/testing/selftests/rcutorture/configs/rcu/TASKS01
@@ -5,6 +5,6 @@ CONFIG_PREEMPT_NONE=n
 CONFIG_PREEMPT_VOLUNTARY=n
 CONFIG_PREEMPT=y
 CONFIG_DEBUG_LOCK_ALLOC=y
-CONFIG_PROVE_LOCKING=n
-#CHECK#CONFIG_PROVE_RCU=n
+CONFIG_PROVE_LOCKING=y
+#CHECK#CONFIG_PROVE_RCU=y
 CONFIG_RCU_EXPERT=y
-- 
1.8.1.5


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

end of thread, other threads:[~2015-07-17 23:47 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-07-17 23:45 [PATCH tip/core/rcu 0/6] Torture-test updates for 4.3 Paul E. McKenney
2015-07-17 23:45 ` [PATCH tip/core/rcu 1/6] rcutorture: Better bounds checking for n_barrier_cbs Paul E. McKenney
2015-07-17 23:45   ` [PATCH tip/core/rcu 2/6] rcutorture: Check nfakewriters parameter Paul E. McKenney
2015-07-17 23:45   ` [PATCH tip/core/rcu 3/6] rcutorture: Bounds-check rcutorture.shuffle_interval Paul E. McKenney
2015-07-17 23:45   ` [PATCH tip/core/rcu 4/6] rcutorture: Fix rcu_torture_cbflood() for callback-free RCU Paul E. McKenney
2015-07-17 23:45   ` [PATCH tip/core/rcu 5/6] rcutorture: Add RCU-tasks qualifier to dereference Paul E. McKenney
2015-07-17 23:45   ` [PATCH tip/core/rcu 6/6] rcutorture: Enable lockdep-RCU on TASKS01 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.