* [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.