Torture-test updates for 4.2
Subsystems (4)
cover Torture-test updates for 4.2
Hello!
This series contains torture-test updates:
1. Use correct locking primitive, thus avoiding deadlock, courtesy
of Alexey Kodanev.
2. Exchange TREE03 and TREE04 geometries in order to improve bug-location
rates.
3. Exchange TREE03 and TREE08 NR_CPUS, speed up CPU hotplug to further
improve bug-location rates.
4. Allow negative values of nreaders to in order to oversubscribe
the CPUs, again to improve bug-location rates.
5. Change longdelay_us to longdelay_ms in order to better reflect
reality. (Not that gcc cares, but people reading the code just might.)
6. Replace open-coded memory barriers with the shiny new
smp_store_release() and smp_load_acquire() primitives.
7. Test SRCU cleanup code path in order to improve test coverage.
8. Avoid explicitly setting CONFIG_TASKS_RCU, given that it is
now set implicitly based on other configuration options.
9. Update configuration fragments from CONFIG_RCU_FANOUT_EXACT to
the new rcutree.rcu_fanout_exact= boot parameter.
10. Make rcutorture scripts force RCU_EXPERT so that they can still
build the needed kernel configurations.
11. Update TREE_RCU-kconfig.txt to describe new kernel-parameter
setup.
12. Make torture scripts display "make oldconfig" errors
13. Allow repetition factors in Kconfig-fragment lists. Because
typing 48 repetitions of "TINY02" is getting old.
Thanx, Paul
------------------------------------------------------------------------
b/kernel/locking/locktorture.c | 14 - b/kernel/rcu/rcutorture.c | 103 ++++++---- b/tools/testing/selftests/rcutorture/bin/configinit.sh | 2 b/tools/testing/selftests/rcutorture/bin/kvm-recheck.sh | 4 b/tools/testing/selftests/rcutorture/bin/kvm.sh | 25 +- b/tools/testing/selftests/rcutorture/configs/rcu/SRCU-N | 1 b/tools/testing/selftests/rcutorture/configs/rcu/SRCU-P | 1 b/tools/testing/selftests/rcutorture/configs/rcu/SRCU-P.boot | 2 b/tools/testing/selftests/rcutorture/configs/rcu/TASKS01 | 5 b/tools/testing/selftests/rcutorture/configs/rcu/TASKS02 | 1 b/tools/testing/selftests/rcutorture/configs/rcu/TASKS03 | 2 b/tools/testing/selftests/rcutorture/configs/rcu/TINY02 | 2 b/tools/testing/selftests/rcutorture/configs/rcu/TREE01 | 1 b/tools/testing/selftests/rcutorture/configs/rcu/TREE02 | 2 b/tools/testing/selftests/rcutorture/configs/rcu/TREE02-T | 1 b/tools/testing/selftests/rcutorture/configs/rcu/TREE03 | 8 b/tools/testing/selftests/rcutorture/configs/rcu/TREE03.boot | 1 b/tools/testing/selftests/rcutorture/configs/rcu/TREE04 | 8 b/tools/testing/selftests/rcutorture/configs/rcu/TREE05 | 4 b/tools/testing/selftests/rcutorture/configs/rcu/TREE06 | 4 b/tools/testing/selftests/rcutorture/configs/rcu/TREE06.boot | 1 b/tools/testing/selftests/rcutorture/configs/rcu/TREE07 | 4 b/tools/testing/selftests/rcutorture/configs/rcu/TREE08 | 6 b/tools/testing/selftests/rcutorture/configs/rcu/TREE08-T | 1 b/tools/testing/selftests/rcutorture/configs/rcu/TREE08-T.boot | 1 b/tools/testing/selftests/rcutorture/configs/rcu/TREE08.boot | 1 b/tools/testing/selftests/rcutorture/configs/rcu/TREE09 | 1 b/tools/testing/selftests/rcutorture/doc/TREE_RCU-kconfig.txt | 36 +-- 28 files changed, 148 insertions(+), 94 deletions(-)
PATCH 1/13 locktorture: fix deadlock in 'rw_lock_irq' type
From: Alexey Kodanev <[email protected]>
torture_rwlock_read_unlock_irq() must use read_unlock_irqrestore() instead of write_unlock_irqrestore().
Use read_unlock_irqrestore() instead of write_unlock_irqrestore().
--- kernel/locking/locktorture.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/locking/locktorture.c +1 -1
@@ -309,7 +309,7 @@ static int torture_rwlock_read_lock_irq(void) __acquires(torture_rwlock)static void torture_rwlock_read_unlock_irq (void )__releases (torture_rwlock) { -write_unlock_irqrestore (&torture_rwlock, cxt.cur_ops->flags); +read_unlock_irqrestore (&torture_rwlock, cxt.cur_ops->flags); }static struct lock_torture_ops rw_lock_irq_ops = {
Signature · 1 line
1.8.1.5
PATCH 2/13 rcutorture: Exchange TREE03 and TREE04 geometries
From: "Paul E. McKenney" <[email protected]>
Given that the combination of PREEMPT_RCU and HOTPLUG_CPU is producing the most bugs lately, this commit swaps the TREE03 and TREE04 rcu_node-tree geometries so that the test exercising PREEMPT_RCU and HOTPLUG_CPU has three-level rather than two-level rcu_node trees.
--- tools/testing/selftests/rcutorture/configs/rcu/TREE03 | 4 ++-- tools/testing/selftests/rcutorture/configs/rcu/TREE04 | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-)
tools/testing/selftests/rcutorture/configs/rcu/TREE03 +2 -2
@@ -9,8 +9,8 @@ CONFIG_NO_HZ_IDLE=n CONFIG_NO_HZ_FULL=n CONFIG_RCU_TRACE=y CONFIG_HOTPLUG_CPU=y -CONFIG_RCU_FANOUT=4 -CONFIG_RCU_FANOUT_LEAF=4 +CONFIG_RCU_FANOUT=2 +CONFIG_RCU_FANOUT_LEAF=2 CONFIG_RCU_FANOUT_EXACT=n CONFIG_RCU_NOCB_CPU=n CONFIG_DEBUG_LOCK_ALLOC=n
tools/testing/selftests/rcutorture/configs/rcu/TREE04 +2 -2
@@ -13,8 +13,8 @@ CONFIG_RCU_TRACE=y CONFIG_HOTPLUG_CPU=n CONFIG_SUSPEND=n CONFIG_HIBERNATION=n -CONFIG_RCU_FANOUT=2 -CONFIG_RCU_FANOUT_LEAF=2 +CONFIG_RCU_FANOUT=4 +CONFIG_RCU_FANOUT_LEAF=4 CONFIG_RCU_FANOUT_EXACT=n CONFIG_RCU_NOCB_CPU=n CONFIG_DEBUG_LOCK_ALLOC=n
Signature · 1 line
1.8.1.5
PATCH 3/13 rcutorture: Exchange TREE03 and TREE08 NR_CPUS, speed up CPU hotplug
In reply to Paul E. McKenneyFrom: "Paul E. McKenney" <[email protected]>
TREE03 has been especially effective at finding bugs lately. This commit makes it even more effective by speeding up its CPU hotplug testing and increasing its NR_CPUs from 8 to 16. TREE08's NR_CPUS is decreased from 16 to 8 in order to maintain the same test duration.
--- tools/testing/selftests/rcutorture/configs/rcu/TREE03 | 2 +- tools/testing/selftests/rcutorture/configs/rcu/TREE03.boot | 1 + tools/testing/selftests/rcutorture/configs/rcu/TREE08 | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/TREE03.boot
tools/testing/selftests/rcutorture/configs/rcu/TREE03 +1 -1
@@ -1,5 +1,5 @@ CONFIG_SMP=y -CONFIG_NR_CPUS=8 +CONFIG_NR_CPUS=16 CONFIG_PREEMPT_NONE=n CONFIG_PREEMPT_VOLUNTARY=n CONFIG_PREEMPT=y
tools/testing/selftests/rcutorture/configs/rcu/TREE03.boot new file +1 -0
@@ -0,0 +1 @@ +rcutorture.onoff_interval=1 rcutorture.onoff_holdoff=30
tools/testing/selftests/rcutorture/configs/rcu/TREE08 +1 -1
@@ -1,5 +1,5 @@ CONFIG_SMP=y -CONFIG_NR_CPUS=16 +CONFIG_NR_CPUS=8 CONFIG_PREEMPT_NONE=n CONFIG_PREEMPT_VOLUNTARY=n CONFIG_PREEMPT=y
Signature · 1 line
1.8.1.5
PATCH 4/13 rcutorture: Allow negative values of nreaders to oversubscribe
In reply to Paul E. McKenneyFrom: "Paul E. McKenney" <[email protected]>
By default, with rcutorture.nreaders equal to -1, rcutorture provisions N-1 reader kthreads, where N is the number of CPUs. This avoids rcutorture-induced stalls, but also avoids heavier levels of torture. This commit therefore allows negative values of rcutorture.nreaders to specify larger numbers of reader kthreads, so that for example rcutorture.nreaders=-2 provisions N kthreads and rcutorture.nreaders=-5 provisions N+3 kthreads.
--- kernel/rcu/rcutorture.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/rcu/rcutorture.c +1 -1
@@ -1701,7 +1701,7 @@ rcu_torture_init(void)if (nreaders >=0 ) { nrealreaders = nreaders; }else { - nrealreaders =num_online_cpus () -1 ; + nrealreaders =num_online_cpus () -2 - nreaders;if (nrealreaders <=0 ) nrealreaders =1 ; }
Signature · 1 line
1.8.1.5
[email protected]
maintainerRe: [PATCH tip/core/rcu 04/13] rcutorture: Allow negative values of nreaders to oversubscribe
Quoted 11 lines · Paul E. McKenney
From: "Paul E. McKenney" <[email protected]>
By default, with rcutorture.nreaders equal to -1, rcutorture provisions N-1 reader kthreads, where N is the number of CPUs. This avoids rcutorture-induced stalls, but also avoids heavier levels of torture. This commit therefore allows negative values of rcutorture.nreaders to specify larger numbers of reader kthreads, so that for example rcutorture.nreaders=-2 provisions N kthreads and rcutorture.nreaders=-5 provisions N+3 kthreads.
Signed-off-by Paul E. McKenney <[email protected]>
That seems rather excessively arcane. Then again, I guess we started down the road to arcana when we allowed -1 to mean N-1.
However, could you please document this in the module parameter documentation?
Quoted 19 lines
kernel/rcu/rcutorture.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)kernel/rcu/rcutorture.c +1
-1@@ -1701,7 +1701,7 @@ rcu_torture_init(void)if (nreaders >=0 ) { nrealreaders = nreaders; }else { - nrealreaders =num_online_cpus () -1 ; + nrealreaders =num_online_cpus () -2 - nreaders;if (nrealreaders <=0 ) nrealreaders =1 ; }Signature · 1 line
1.8.1.5
Re: [PATCH tip/core/rcu 04/13] rcutorture: Allow negative values of nreaders to oversubscribe
Quoted 11 lines · On Tue, May 12, 2015 at 06:03:13PM -0700, [email protected] wrote:
Quoted 10 lines · Paul E. McKenney
From: "Paul E. McKenney" <[email protected]>
By default, with rcutorture.nreaders equal to -1, rcutorture provisions N-1 reader kthreads, where N is the number of CPUs. This avoids rcutorture-induced stalls, but also avoids heavier levels of torture. This commit therefore allows negative values of rcutorture.nreaders to specify larger numbers of reader kthreads, so that for example rcutorture.nreaders=-2 provisions N kthreads and rcutorture.nreaders=-5 provisions N+3 kthreads.
Quoted 4 lines
Quoted 1 line
Signed-off-by Paul E. McKenney <[email protected]>That seems rather excessively arcane. Then again, I guess we started down the road to arcana when we allowed -1 to mean N-1.
Indeed...
Quoted 2 lines
However, could you please document this in the module parameter documentation?
Good point, fixed!
Thanx, Paul
Quoted 20 lines
Quoted 19 lines
kernel/rcu/rcutorture.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)kernel/rcu/rcutorture.c +1
-1@@ -1701,7 +1701,7 @@ rcu_torture_init(void)if (nreaders >=0 ) { nrealreaders = nreaders; }else { - nrealreaders =num_online_cpus () -1 ; + nrealreaders =num_online_cpus () -2 - nreaders;if (nrealreaders <=0 ) nrealreaders =1 ; }Signature · 1 line
1.8.1.5
PATCH 5/13 locktorture: Change longdelay_us to longdelay_ms
In reply to Paul E. McKenneyFrom: "Paul E. McKenney" <[email protected]>
The locktorture long delays are in milliseconds rather than microseconds, so this commit changes the name of the corresponding variable from longdelay_us to longdelay_ms.
--- kernel/locking/locktorture.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
kernel/locking/locktorture.c +6 -6
@@ -122,12 +122,12 @@ static int torture_lock_busted_write_lock(void)static void torture_lock_busted_write_delay (struct torture_random_state *trsp) { -const unsigned long longdelay_us =100 ; +const unsigned long longdelay_ms =100 ;/* We want a long delay occasionally to force massive contention. */ if (!(torture_random (trsp) % - (cxt.nrealwriters_stress *2000 * longdelay_us))) -mdelay (longdelay_us); + (cxt.nrealwriters_stress *2000 * longdelay_ms))) +mdelay (longdelay_ms);#ifdef CONFIG_PREEMPT if (!(torture_random (trsp) % (cxt.nrealwriters_stress *20000 )))preempt_schedule ();/* Allow test to be preempted. */
@@ -160,14 +160,14 @@ static int torture_spin_lock_write_lock(void) __acquires(torture_spinlock)static void torture_spin_lock_write_delay (struct torture_random_state *trsp) {const unsigned long shortdelay_us =2 ; -const unsigned long longdelay_us =100 ; +const unsigned long longdelay_ms =100 ;/* We want a short delay mostly to emulate likely code, and * we want a long delay occasionally to force massive contention. */ if (!(torture_random (trsp) % - (cxt.nrealwriters_stress *2000 * longdelay_us))) -mdelay (longdelay_us); + (cxt.nrealwriters_stress *2000 * longdelay_ms))) +mdelay (longdelay_ms);if (!(torture_random (trsp) % (cxt.nrealwriters_stress *2 * shortdelay_us)))udelay (shortdelay_us);
Signature · 1 line
1.8.1.5
PATCH 6/13 rcutorture: Replace barriers with smp_store_release() and smp_load_acquire()
In reply to Paul E. McKenneyFrom: "Paul E. McKenney" <[email protected]>
The rcutorture.c file uses several explicit memory barriers that can easily be converted to smp_store_release() and smp_load_acquire(), which improves maintainability and also improves performance a bit.
--- kernel/rcu/rcutorture.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-)
kernel/rcu/rcutorture.c +13 -11
@@ -672,8 +672,8 @@ static void rcu_torture_boost_cb(struct rcu_head *head)struct rcu_boost_inflight *rbip = container_of(head, struct rcu_boost_inflight, rcu); -smp_mb ();/* Ensure RCU-core accesses precede clearing ->inflight */ - rbip->inflight =0 ; +/* Ensure RCU-core accesses precede clearing ->inflight */ +smp_store_release (&rbip->inflight,0 ); }static int rcu_torture_boost (void *arg)
@@ -710,9 +710,9 @@ static int rcu_torture_boost(void *arg) call_rcu_time = jiffies;while (ULONG_CMP_LT (jiffies, endtime)) {/* If we don't have a callback in flight, post one. */ -if (!rbi.inflight) { -smp_mb ();/* RCU core before ->inflight = 1. */ - rbi.inflight =1 ; +if (!smp_load_acquire (&rbi.inflight)) { +/* RCU core before ->inflight = 1. */ +smp_store_release (&rbi.inflight,1 );call_rcu (&rbi.rcu, rcu_torture_boost_cb);if (jiffies - call_rcu_time > test_boost_duration *HZ -HZ /2 ) {
@@ -751,11 +751,10 @@ checkwait: stutter_wait("rcu_torture_boost"); }while (!torture_must_stop ());/* Clean up and exit. */ -while (!kthread_should_stop () || rbi.inflight) { +while (!kthread_should_stop () ||smp_load_acquire (&rbi.inflight)) {torture_shutdown_absorb ("rcu_torture_boost" );schedule_timeout_uninterruptible (1 ); } -smp_mb ();/* order accesses to ->inflight before stack-frame death. */ destroy_rcu_head_on_stack (&rbi.rcu);torture_kthread_stopping ("rcu_torture_boost" );return 0 ;
@@ -1413,12 +1412,15 @@ static int rcu_torture_barrier_cbs(void *arg) do { wait_event(barrier_cbs_wq[myid], (newphase = - READ_ONCE(barrier_phase)) != lastphase || + smp_load_acquire(&barrier_phase)) != lastphase || torture_must_stop()); lastphase = newphase; - smp_mb(); /* ensure barrier_phase load before ->call(). */ if (torture_must_stop()) break; + /* + * The above smp_load_acquire() ensures barrier_phase load + * is ordered before the folloiwng ->call(). + */ cur_ops->call(&rcu, rcu_torture_barrier_cbf); if (atomic_dec_and_test(&barrier_cbs_count)) wake_up(&barrier_wq);
@@ -1439,8 +1441,8 @@ static int rcu_torture_barrier(void *arg) do { atomic_set(&barrier_cbs_invoked, 0); atomic_set(&barrier_cbs_count, n_barrier_cbs); - smp_mb(); /* Ensure barrier_phase after prior assignments. */ - barrier_phase = !barrier_phase; + /* Ensure barrier_phase ordered after prior assignments. */ + smp_store_release(&barrier_phase, !barrier_phase); for (i = 0; i < n_barrier_cbs; i++) wake_up(&barrier_cbs_wq[i]); wait_event(barrier_wq,
Signature · 1 line
1.8.1.5
PATCH 7/13 rcutorture: Test SRCU cleanup code path
In reply to Paul E. McKenneyFrom: "Paul E. McKenney" <[email protected]>
The current rcutorture testing does not do any cleanup operations. This works because the srcu_struct is statically allocated, but it does represent a memory leak of the associated dynamically allocated ->per_cpu_ref per-CPU variables. However, rcutorture currently uses a statically allocated srcu_struct, which cannot legally be passed to cleanup_srcu_struct(). Therefore, this commit adds a second form of srcu (called srcud) that dynamically allocates and frees the associated per-CPU variables. This commit also adds a ->cleanup() member to rcu_torture_ops that is invoked at the end of the test, after ->cb_barriers(). This ->cleanup() pointer is NULL for all existing tests, and thus only used for scrud. Finally, the SRCU-P torture-test configuration selects scrud instead of srcu, with SRCU-N continuing to use srcu, thereby testing both static and dynamic srcu_struct structures.
--- kernel/rcu/rcutorture.c | 77 ++++++++++++++++------ .../selftests/rcutorture/configs/rcu/SRCU-P.boot | 2 +- 2 files changed, 59 insertions(+), 20 deletions(-)
kernel/rcu/rcutorture.c +58 -19
@@ -241,6 +241,7 @@ rcu_torture_free(struct rcu_torture *p)struct rcu_torture_ops {int ttype;void (*init)(void ); +void (*cleanup)(void );int (*readlock)(void );void (*read_delay)(struct torture_random_state *rrsp);void (*readunlock)(int idx);
@@ -477,10 +478,12 @@ static struct rcu_torture_ops rcu_busted_ops = {*/ DEFINE_STATIC_SRCU (srcu_ctl); +static struct srcu_struct srcu_ctld; +static struct srcu_struct *srcu_ctlp = &srcu_ctl; -static int srcu_torture_read_lock(void) __acquires(&srcu_ctl) +static int srcu_torture_read_lock (void )__acquires (srcu_ctlp) { -return srcu_read_lock (&srcu_ctl); +return srcu_read_lock (srcu_ctlp); }static void srcu_read_delay (struct torture_random_state *rrsp)
@@ -499,49 +502,49 @@ static void srcu_read_delay(struct torture_random_state *rrsp)rcu_read_delay (rrsp); } -static void srcu_torture_read_unlock(int idx) __releases(&srcu_ctl) +static void srcu_torture_read_unlock (int idx)__releases (srcu_ctlp) { -srcu_read_unlock (&srcu_ctl, idx); +srcu_read_unlock (srcu_ctlp, idx); }static unsigned long srcu_torture_completed (void ) { -return srcu_batches_completed (&srcu_ctl); +return srcu_batches_completed (srcu_ctlp); }static void srcu_torture_deferred_free (struct rcu_torture *rp) { -call_srcu (&srcu_ctl, &rp->rtort_rcu, rcu_torture_cb); +call_srcu (srcu_ctlp, &rp->rtort_rcu, rcu_torture_cb); }static void srcu_torture_synchronize (void ) { -synchronize_srcu (&srcu_ctl); +synchronize_srcu (srcu_ctlp); }static void srcu_torture_call (struct rcu_head *head,void (*func)(struct rcu_head *head)) { -call_srcu (&srcu_ctl, head, func); +call_srcu (srcu_ctlp, head, func); }static void srcu_torture_barrier (void ) { -srcu_barrier (&srcu_ctl); +srcu_barrier (srcu_ctlp); }static void srcu_torture_stats (void ) {int cpu; -int idx = srcu_ctl.completed &0x1 ; +int idx = srcu_ctlp->completed &0x1 ;pr_alert ("%s%s per-CPU(idx=%d):" , torture_type,TORTURE_FLAG , idx);for_each_possible_cpu (cpu) {long c0, c1; - c0 = (long )per_cpu_ptr (srcu_ctl.per_cpu_ref, cpu)->c[!idx]; - c1 = (long )per_cpu_ptr (srcu_ctl.per_cpu_ref, cpu)->c[idx]; + c0 = (long )per_cpu_ptr (srcu_ctlp->per_cpu_ref, cpu)->c[!idx]; + c1 = (long )per_cpu_ptr (srcu_ctlp->per_cpu_ref, cpu)->c[idx];pr_cont (" %d(%ld,%ld)" , cpu, c0, c1); }pr_cont ("\n" );
@@ -549,7 +552,7 @@ static void srcu_torture_stats(void)static void srcu_torture_synchronize_expedited (void ) { -synchronize_srcu_expedited (&srcu_ctl); +synchronize_srcu_expedited (srcu_ctlp); }static struct rcu_torture_ops srcu_ops = {
@@ -569,6 +572,38 @@ static struct rcu_torture_ops srcu_ops = { .name = "srcu" }; +static void srcu_torture_init (void ) +{ +rcu_sync_torture_init (); +WARN_ON (init_srcu_struct (&srcu_ctld)); + srcu_ctlp = &srcu_ctld; +} + +static void srcu_torture_cleanup (void ) +{ +cleanup_srcu_struct (&srcu_ctld); + srcu_ctlp = &srcu_ctl;/* In case of a later rcutorture run. */ +} + +/* As above, but dynamically allocated. */ +static struct rcu_torture_ops srcud_ops = { + .ttype =SRCU_FLAVOR , + .init = srcu_torture_init, + .cleanup = srcu_torture_cleanup, + .readlock = srcu_torture_read_lock, + .read_delay = srcu_read_delay, + .readunlock = srcu_torture_read_unlock, + .started =NULL , + .completed = srcu_torture_completed, + .deferred_free = srcu_torture_deferred_free, + .sync = srcu_torture_synchronize, + .exp_sync = srcu_torture_synchronize_expedited, + .call = srcu_torture_call, + .cb_barrier = srcu_torture_barrier, + .stats = srcu_torture_stats, + .name ="srcud" +}; +/* * Definitions for sched torture testing. */
@@ -1053,7 +1088,7 @@ 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_ctl)); +srcu_read_lock_held (srcu_ctlp));if (p ==NULL ) {/* Leave because rcu_torture_writer is not yet underway */ cur_ops->readunlock (idx);
@@ -1127,7 +1162,7 @@ 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_ctl)); +srcu_read_lock_held (srcu_ctlp));if (p ==NULL ) {/* Wait for rcu_torture_writer to get underway */ cur_ops->readunlock (idx);
@@ -1590,10 +1625,14 @@ rcu_torture_cleanup(void)rcutorture_booster_cleanup (i); } -/* Wait for all RCU callbacks to fire. */ - +/* +* Wait for all RCU callbacks to fire, then do flavor-specific +* cleanup operations. +*/ if (cur_ops->cb_barrier !=NULL ) cur_ops->cb_barrier (); +if (cur_ops->cleanup !=NULL ) + cur_ops->cleanup ();rcu_torture_stats_print ();/* -After- the stats thread is stopped! */
@@ -1670,8 +1709,8 @@ rcu_torture_init(void)int cpu;int firsterr =0 ;static struct rcu_torture_ops *torture_ops[] = { - &rcu_ops, &rcu_bh_ops, &rcu_busted_ops, &srcu_ops, &sched_ops, -RCUTORTURE_TASKS_OPS + &rcu_ops, &rcu_bh_ops, &rcu_busted_ops, &srcu_ops, &srcud_ops, + &sched_ops,RCUTORTURE_TASKS_OPS };if (!torture_init_begin (torture_type, verbose, &torture_runnable))
tools/testing/selftests/rcutorture/configs/rcu/SRCU-P.boot +1 -1
@@ -1 +1 @@ -rcutorture.torture_type=srcu +rcutorture.torture_type=srcud
Signature · 1 line
1.8.1.5
PATCH 8/13 rcutorture: TASKS_RCU set directly, so don't explicitly set it
In reply to Paul E. McKenneyFrom: "Paul E. McKenney" <[email protected]>
The TASKS01, TASKS02, and TASKS03 rcutorture config fragments currently set CONFIG_TASKS_RCU. However, now that the value of this Kconfig parameter is set via "select" statements, it is no longer necessary to set it explicitly. This commit therefore removes it from the Kconfig fragments.
--- tools/testing/selftests/rcutorture/configs/rcu/TASKS01 | 1 - tools/testing/selftests/rcutorture/configs/rcu/TASKS02 | 1 - tools/testing/selftests/rcutorture/configs/rcu/TASKS03 | 1 - 3 files changed, 3 deletions(-)
tools/testing/selftests/rcutorture/configs/rcu/TASKS01 +0 -1
@@ -6,4 +6,3 @@ CONFIG_PREEMPT_VOLUNTARY=n CONFIG_PREEMPT=y CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_PROVE_RCU=y -CONFIG_TASKS_RCU=y
tools/testing/selftests/rcutorture/configs/rcu/TASKS02 +0 -1
@@ -2,4 +2,3 @@ CONFIG_SMP=n CONFIG_PREEMPT_NONE=y CONFIG_PREEMPT_VOLUNTARY=n CONFIG_PREEMPT=n -CONFIG_TASKS_RCU=y
tools/testing/selftests/rcutorture/configs/rcu/TASKS03 +0 -1
@@ -6,7 +6,6 @@ CONFIG_HIBERNATION=n CONFIG_PREEMPT_NONE=n CONFIG_PREEMPT_VOLUNTARY=n CONFIG_PREEMPT=y -CONFIG_TASKS_RCU=y CONFIG_HZ_PERIODIC=n CONFIG_NO_HZ_IDLE=n CONFIG_NO_HZ_FULL=y
Signature · 1 line
1.8.1.5
PATCH 9/13 rcutorture: Update configuration fragments for rcutree.rcu_fanout_exact
In reply to Paul E. McKenneyFrom: "Paul E. McKenney" <[email protected]>
This commit updates rcutortures configuration-fragment files to account for the move from the CONFIG_RCU_FANOUT_EXACT Kconfig parameter to the new rcutree.rcu_fanout_exact= boot parameter.
--- tools/testing/selftests/rcutorture/configs/rcu/TREE02 | 1 - tools/testing/selftests/rcutorture/configs/rcu/TREE02-T | 1 - tools/testing/selftests/rcutorture/configs/rcu/TREE03 | 1 - tools/testing/selftests/rcutorture/configs/rcu/TREE04 | 1 - tools/testing/selftests/rcutorture/configs/rcu/TREE05 | 1 - tools/testing/selftests/rcutorture/configs/rcu/TREE06 | 1 - tools/testing/selftests/rcutorture/configs/rcu/TREE06.boot | 1 + tools/testing/selftests/rcutorture/configs/rcu/TREE07 | 1 - tools/testing/selftests/rcutorture/configs/rcu/TREE08 | 1 - tools/testing/selftests/rcutorture/configs/rcu/TREE08-T | 1 - tools/testing/selftests/rcutorture/configs/rcu/TREE08-T.boot | 1 + tools/testing/selftests/rcutorture/configs/rcu/TREE08.boot | 1 + 12 files changed, 3 insertions(+), 9 deletions(-) create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/TREE08-T.boot
tools/testing/selftests/rcutorture/configs/rcu/TREE02 +0 -1
@@ -14,7 +14,6 @@ CONFIG_SUSPEND=n CONFIG_HIBERNATION=n CONFIG_RCU_FANOUT=3 CONFIG_RCU_FANOUT_LEAF=3 -CONFIG_RCU_FANOUT_EXACT=n CONFIG_RCU_NOCB_CPU=n CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_PROVE_LOCKING=n
tools/testing/selftests/rcutorture/configs/rcu/TREE02-T +0 -1
@@ -14,7 +14,6 @@ CONFIG_SUSPEND=n CONFIG_HIBERNATION=n CONFIG_RCU_FANOUT=3 CONFIG_RCU_FANOUT_LEAF=3 -CONFIG_RCU_FANOUT_EXACT=n CONFIG_RCU_NOCB_CPU=n CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_PROVE_LOCKING=n
tools/testing/selftests/rcutorture/configs/rcu/TREE03 +0 -1
@@ -11,7 +11,6 @@ CONFIG_RCU_TRACE=y CONFIG_HOTPLUG_CPU=y CONFIG_RCU_FANOUT=2 CONFIG_RCU_FANOUT_LEAF=2 -CONFIG_RCU_FANOUT_EXACT=n CONFIG_RCU_NOCB_CPU=n CONFIG_DEBUG_LOCK_ALLOC=n CONFIG_RCU_CPU_STALL_INFO=n
tools/testing/selftests/rcutorture/configs/rcu/TREE04 +0 -1
@@ -15,7 +15,6 @@ CONFIG_SUSPEND=n CONFIG_HIBERNATION=n CONFIG_RCU_FANOUT=4 CONFIG_RCU_FANOUT_LEAF=4 -CONFIG_RCU_FANOUT_EXACT=n CONFIG_RCU_NOCB_CPU=n CONFIG_DEBUG_LOCK_ALLOC=n CONFIG_RCU_CPU_STALL_INFO=y
tools/testing/selftests/rcutorture/configs/rcu/TREE05 +0 -1
@@ -12,7 +12,6 @@ CONFIG_RCU_TRACE=n CONFIG_HOTPLUG_CPU=y CONFIG_RCU_FANOUT=6 CONFIG_RCU_FANOUT_LEAF=6 -CONFIG_RCU_FANOUT_EXACT=n CONFIG_RCU_NOCB_CPU=y CONFIG_RCU_NOCB_CPU_NONE=y CONFIG_DEBUG_LOCK_ALLOC=y
tools/testing/selftests/rcutorture/configs/rcu/TREE06 +0 -1
@@ -14,7 +14,6 @@ CONFIG_SUSPEND=n CONFIG_HIBERNATION=n CONFIG_RCU_FANOUT=6 CONFIG_RCU_FANOUT_LEAF=6 -CONFIG_RCU_FANOUT_EXACT=y CONFIG_RCU_NOCB_CPU=n CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_PROVE_LOCKING=y
tools/testing/selftests/rcutorture/configs/rcu/TREE06.boot +1 -0
@@ -1,3 +1,4 @@ rcupdate.rcu_self_test=1 rcupdate.rcu_self_test_bh=1 rcupdate.rcu_self_test_sched=1 +rcutree.rcu_fanout_exact=1
tools/testing/selftests/rcutorture/configs/rcu/TREE07 +0 -1
@@ -15,7 +15,6 @@ CONFIG_RCU_TRACE=y CONFIG_HOTPLUG_CPU=y CONFIG_RCU_FANOUT=2 CONFIG_RCU_FANOUT_LEAF=2 -CONFIG_RCU_FANOUT_EXACT=n CONFIG_RCU_NOCB_CPU=n CONFIG_DEBUG_LOCK_ALLOC=n CONFIG_RCU_CPU_STALL_INFO=y
tools/testing/selftests/rcutorture/configs/rcu/TREE08 +0 -1
@@ -13,7 +13,6 @@ CONFIG_HOTPLUG_CPU=n CONFIG_SUSPEND=n CONFIG_HIBERNATION=n CONFIG_RCU_FANOUT=3 -CONFIG_RCU_FANOUT_EXACT=y CONFIG_RCU_FANOUT_LEAF=2 CONFIG_RCU_NOCB_CPU=y CONFIG_RCU_NOCB_CPU_ALL=y
tools/testing/selftests/rcutorture/configs/rcu/TREE08-T +0 -1
@@ -13,7 +13,6 @@ CONFIG_HOTPLUG_CPU=n CONFIG_SUSPEND=n CONFIG_HIBERNATION=n CONFIG_RCU_FANOUT=3 -CONFIG_RCU_FANOUT_EXACT=y CONFIG_RCU_FANOUT_LEAF=2 CONFIG_RCU_NOCB_CPU=y CONFIG_RCU_NOCB_CPU_ALL=y
tools/testing/selftests/rcutorture/configs/rcu/TREE08-T.boot new file +1 -0
@@ -0,0 +1 @@ +rcutree.rcu_fanout_exact=1
tools/testing/selftests/rcutorture/configs/rcu/TREE08.boot +1 -0
@@ -1,3 +1,4 @@ rcutorture.torture_type=sched rcupdate.rcu_self_test=1 rcupdate.rcu_self_test_sched=1 +rcutree.rcu_fanout_exact=1
Signature · 1 line
1.8.1.5
PATCH 10/13 rcutorture: Make rcutorture scripts force RCU_EXPERT
In reply to Paul E. McKenneyFrom: "Paul E. McKenney" <[email protected]>
This commit causes the rcutorture scripts to force RCU_EXPERT so that these scripts can cause rcutorture to torture RCU in the various required configurations. However, SRCU-P, TASKS03, and TREE09 retain !RCU_EXPERT in order to ensure testing of the vanilla configuration.
--- tools/testing/selftests/rcutorture/configs/rcu/SRCU-N | 1 + tools/testing/selftests/rcutorture/configs/rcu/SRCU-P | 1 + tools/testing/selftests/rcutorture/configs/rcu/TASKS01 | 1 + tools/testing/selftests/rcutorture/configs/rcu/TASKS03 | 1 + tools/testing/selftests/rcutorture/configs/rcu/TREE01 | 1 + tools/testing/selftests/rcutorture/configs/rcu/TREE02 | 1 + tools/testing/selftests/rcutorture/configs/rcu/TREE03 | 1 + tools/testing/selftests/rcutorture/configs/rcu/TREE04 | 1 + tools/testing/selftests/rcutorture/configs/rcu/TREE05 | 1 + tools/testing/selftests/rcutorture/configs/rcu/TREE06 | 1 + tools/testing/selftests/rcutorture/configs/rcu/TREE07 | 1 + tools/testing/selftests/rcutorture/configs/rcu/TREE08 | 1 + tools/testing/selftests/rcutorture/configs/rcu/TREE09 | 1 + 13 files changed, 13 insertions(+)
tools/testing/selftests/rcutorture/configs/rcu/SRCU-N +1 -0
@@ -5,3 +5,4 @@ CONFIG_HOTPLUG_CPU=y CONFIG_PREEMPT_NONE=y CONFIG_PREEMPT_VOLUNTARY=n CONFIG_PREEMPT=n +CONFIG_RCU_EXPERT=y
tools/testing/selftests/rcutorture/configs/rcu/SRCU-P +1 -0
@@ -5,3 +5,4 @@ CONFIG_HOTPLUG_CPU=y CONFIG_PREEMPT_NONE=n CONFIG_PREEMPT_VOLUNTARY=n CONFIG_PREEMPT=y +#CHECK#CONFIG_RCU_EXPERT=n
tools/testing/selftests/rcutorture/configs/rcu/TASKS01 +1 -0
@@ -6,3 +6,4 @@ CONFIG_PREEMPT_VOLUNTARY=n CONFIG_PREEMPT=y CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_PROVE_RCU=y +CONFIG_RCU_EXPERT=y
tools/testing/selftests/rcutorture/configs/rcu/TASKS03 +1 -0
@@ -10,3 +10,4 @@ CONFIG_HZ_PERIODIC=n CONFIG_NO_HZ_IDLE=n CONFIG_NO_HZ_FULL=y CONFIG_NO_HZ_FULL_ALL=y +#CHECK#CONFIG_RCU_EXPERT=n
tools/testing/selftests/rcutorture/configs/rcu/TREE01 +1 -0
@@ -16,3 +16,4 @@ CONFIG_DEBUG_LOCK_ALLOC=n CONFIG_RCU_CPU_STALL_INFO=n CONFIG_RCU_BOOST=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=n +CONFIG_RCU_EXPERT=y
tools/testing/selftests/rcutorture/configs/rcu/TREE02 +1 -0
@@ -20,3 +20,4 @@ CONFIG_PROVE_LOCKING=n CONFIG_RCU_CPU_STALL_INFO=n CONFIG_RCU_BOOST=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=n +CONFIG_RCU_EXPERT=y
tools/testing/selftests/rcutorture/configs/rcu/TREE03 +1 -0
@@ -17,3 +17,4 @@ CONFIG_RCU_CPU_STALL_INFO=n CONFIG_RCU_BOOST=y CONFIG_RCU_KTHREAD_PRIO=2 CONFIG_DEBUG_OBJECTS_RCU_HEAD=n +CONFIG_RCU_EXPERT=y
tools/testing/selftests/rcutorture/configs/rcu/TREE04 +1 -0
@@ -19,3 +19,4 @@ CONFIG_RCU_NOCB_CPU=n CONFIG_DEBUG_LOCK_ALLOC=n CONFIG_RCU_CPU_STALL_INFO=y CONFIG_DEBUG_OBJECTS_RCU_HEAD=n +CONFIG_RCU_EXPERT=y
tools/testing/selftests/rcutorture/configs/rcu/TREE05 +1 -0
@@ -19,3 +19,4 @@ CONFIG_PROVE_LOCKING=y CONFIG_PROVE_RCU=y CONFIG_RCU_CPU_STALL_INFO=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=n +CONFIG_RCU_EXPERT=y
tools/testing/selftests/rcutorture/configs/rcu/TREE06 +1 -0
@@ -20,3 +20,4 @@ CONFIG_PROVE_LOCKING=y CONFIG_PROVE_RCU=y CONFIG_RCU_CPU_STALL_INFO=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=y +CONFIG_RCU_EXPERT=y
tools/testing/selftests/rcutorture/configs/rcu/TREE07 +1 -0
@@ -19,3 +19,4 @@ CONFIG_RCU_NOCB_CPU=n CONFIG_DEBUG_LOCK_ALLOC=n CONFIG_RCU_CPU_STALL_INFO=y CONFIG_DEBUG_OBJECTS_RCU_HEAD=n +CONFIG_RCU_EXPERT=y
tools/testing/selftests/rcutorture/configs/rcu/TREE08 +1 -0
@@ -22,3 +22,4 @@ CONFIG_PROVE_RCU=y CONFIG_RCU_CPU_STALL_INFO=n CONFIG_RCU_BOOST=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=n +CONFIG_RCU_EXPERT=y
tools/testing/selftests/rcutorture/configs/rcu/TREE09 +1 -0
@@ -16,3 +16,4 @@ CONFIG_DEBUG_LOCK_ALLOC=n CONFIG_RCU_CPU_STALL_INFO=n CONFIG_RCU_BOOST=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=n +#CHECK#CONFIG_RCU_EXPERT=n
Signature · 1 line
1.8.1.5
PATCH 11/13 rcutorture: Update TREE_RCU-kconfig.txt
In reply to Paul E. McKenneyFrom: "Paul E. McKenney" <[email protected]>
This commit updates TREE_RCU-kconfig.txt to reflect changes in RCU's Kconfig setup. This commit also updates rcutorture's Kconfig fragments to account for Kconfig parameters that are now driven directly off of other Kconfig parameters.
--- .../selftests/rcutorture/configs/rcu/TASKS01 | 3 +- .../selftests/rcutorture/configs/rcu/TINY02 | 2 +- .../selftests/rcutorture/configs/rcu/TREE04 | 2 +- .../selftests/rcutorture/configs/rcu/TREE05 | 2 +- .../selftests/rcutorture/configs/rcu/TREE06 | 2 +- .../selftests/rcutorture/configs/rcu/TREE07 | 2 +- .../selftests/rcutorture/configs/rcu/TREE08 | 2 +- .../selftests/rcutorture/doc/TREE_RCU-kconfig.txt | 36 ++++++++-------------- 8 files changed, 21 insertions(+), 30 deletions(-)
tools/testing/selftests/rcutorture/configs/rcu/TASKS01 +2 -1
@@ -5,5 +5,6 @@ CONFIG_PREEMPT_NONE=n CONFIG_PREEMPT_VOLUNTARY=n CONFIG_PREEMPT=y CONFIG_DEBUG_LOCK_ALLOC=y -CONFIG_PROVE_RCU=y +CONFIG_PROVE_LOCKING=n +#CHECK#CONFIG_PROVE_RCU=n CONFIG_RCU_EXPERT=y
tools/testing/selftests/rcutorture/configs/rcu/TINY02 +1 -1
@@ -8,7 +8,7 @@ CONFIG_NO_HZ_IDLE=n CONFIG_NO_HZ_FULL=n CONFIG_RCU_TRACE=y CONFIG_PROVE_LOCKING=y -CONFIG_PROVE_RCU=y +#CHECK#CONFIG_PROVE_RCU=y CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_DEBUG_OBJECTS_RCU_HEAD=n CONFIG_PREEMPT_COUNT=y
tools/testing/selftests/rcutorture/configs/rcu/TREE04 +1 -1
@@ -17,6 +17,6 @@ CONFIG_RCU_FANOUT=4 CONFIG_RCU_FANOUT_LEAF=4 CONFIG_RCU_NOCB_CPU=n CONFIG_DEBUG_LOCK_ALLOC=n -CONFIG_RCU_CPU_STALL_INFO=y +CONFIG_RCU_CPU_STALL_INFO=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=n CONFIG_RCU_EXPERT=y
tools/testing/selftests/rcutorture/configs/rcu/TREE05 +1 -1
@@ -16,7 +16,7 @@ CONFIG_RCU_NOCB_CPU=y CONFIG_RCU_NOCB_CPU_NONE=y CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_PROVE_LOCKING=y -CONFIG_PROVE_RCU=y +#CHECK#CONFIG_PROVE_RCU=y CONFIG_RCU_CPU_STALL_INFO=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=n CONFIG_RCU_EXPERT=y
tools/testing/selftests/rcutorture/configs/rcu/TREE06 +1 -1
@@ -17,7 +17,7 @@ CONFIG_RCU_FANOUT_LEAF=6 CONFIG_RCU_NOCB_CPU=n CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_PROVE_LOCKING=y -CONFIG_PROVE_RCU=y +#CHECK#CONFIG_PROVE_RCU=y CONFIG_RCU_CPU_STALL_INFO=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=y CONFIG_RCU_EXPERT=y
tools/testing/selftests/rcutorture/configs/rcu/TREE07 +1 -1
@@ -17,6 +17,6 @@ CONFIG_RCU_FANOUT=2 CONFIG_RCU_FANOUT_LEAF=2 CONFIG_RCU_NOCB_CPU=n CONFIG_DEBUG_LOCK_ALLOC=n -CONFIG_RCU_CPU_STALL_INFO=y +CONFIG_RCU_CPU_STALL_INFO=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=n CONFIG_RCU_EXPERT=y
tools/testing/selftests/rcutorture/configs/rcu/TREE08 +1 -1
@@ -18,7 +18,7 @@ CONFIG_RCU_NOCB_CPU=y CONFIG_RCU_NOCB_CPU_ALL=y CONFIG_DEBUG_LOCK_ALLOC=n CONFIG_PROVE_LOCKING=y -CONFIG_PROVE_RCU=y +#CHECK#CONFIG_PROVE_RCU=y CONFIG_RCU_CPU_STALL_INFO=n CONFIG_RCU_BOOST=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
tools/testing/selftests/rcutorture/doc/TREE_RCU-kconfig.txt +13 -23
@@ -12,13 +12,12 @@ CONFIG_NO_HZ_IDLE -- Do those not otherwise specified. (Groups of two.) CONFIG_NO_HZ_FULL -- Do two, one with CONFIG_NO_HZ_FULL_SYSIDLE. CONFIG_NO_HZ_FULL_SYSIDLE -- Do one. CONFIG_PREEMPT -- Do half. (First three and #8.) -CONFIG_PROVE_LOCKING -- Do all but two, covering CONFIG_PROVE_RCU and not. -CONFIG_PROVE_RCU -- Do all but one under CONFIG_PROVE_LOCKING. +CONFIG_PROVE_LOCKING -- Do several, covering CONFIG_DEBUG_LOCK_ALLOC=y and not. +CONFIG_PROVE_RCU -- Hardwired to CONFIG_PROVE_LOCKING. CONFIG_RCU_BOOST -- one of PREEMPT_RCU. CONFIG_RCU_KTHREAD_PRIO -- set to 2 for _BOOST testing. -CONFIG_RCU_CPU_STALL_INFO -- Do one. -CONFIG_RCU_FANOUT -- Cover hierarchy as currently, but overlap with others. -CONFIG_RCU_FANOUT_EXACT -- Do one. +CONFIG_RCU_CPU_STALL_INFO -- Now default, avoid at least twice. +CONFIG_RCU_FANOUT -- Cover hierarchy, but overlap with others. CONFIG_RCU_FANOUT_LEAF -- Do one non-default. CONFIG_RCU_FAST_NO_HZ -- Do one, but not with CONFIG_RCU_NOCB_CPU_ALL. CONFIG_RCU_NOCB_CPU -- Do three, see below.
@@ -27,28 +26,19 @@ CONFIG_RCU_NOCB_CPU_NONE -- Do one. CONFIG_RCU_NOCB_CPU_ZERO -- Do one. CONFIG_RCU_TRACE -- Do half. CONFIG_SMP -- Need one !SMP for PREEMPT_RCU. +!RCU_EXPERT -- Do a few, but these have to be vanilla configurations. RCU-bh: Do one with PREEMPT and one with !PREEMPT. RCU-sched: Do one with PREEMPT but not BOOST. -Hierarchy: - -TREE01. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=8, CONFIG_RCU_FANOUT_EXACT=n. -TREE02. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=3, CONFIG_RCU_FANOUT_EXACT=n, - CONFIG_RCU_FANOUT_LEAF=3. -TREE03. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=4, CONFIG_RCU_FANOUT_EXACT=n, - CONFIG_RCU_FANOUT_LEAF=4. -TREE04. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=2, CONFIG_RCU_FANOUT_EXACT=n, - CONFIG_RCU_FANOUT_LEAF=2. -TREE05. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=6, CONFIG_RCU_FANOUT_EXACT=n - CONFIG_RCU_FANOUT_LEAF=6. -TREE06. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=6, CONFIG_RCU_FANOUT_EXACT=y - CONFIG_RCU_FANOUT_LEAF=6. -TREE07. CONFIG_NR_CPUS=16, CONFIG_RCU_FANOUT=2, CONFIG_RCU_FANOUT_EXACT=n, - CONFIG_RCU_FANOUT_LEAF=2. -TREE08. CONFIG_NR_CPUS=16, CONFIG_RCU_FANOUT=3, CONFIG_RCU_FANOUT_EXACT=y, - CONFIG_RCU_FANOUT_LEAF=2. -TREE09. CONFIG_NR_CPUS=1. +Boot parameters: + +nohz_full - do at least one. +maxcpu -- do at least one. +rcupdate.rcu_self_test_bh -- Do at least one each, offloaded and not. +rcupdate.rcu_self_test_sched -- Do at least one each, offloaded and not. +rcupdate.rcu_self_test -- Do at least one each, offloaded and not. +rcutree.rcu_fanout_exact -- Do at least one. Kconfig Parameters Ignored:
Signature · 1 line
1.8.1.5
[email protected]
maintainerRe: [PATCH tip/core/rcu 11/13] rcutorture: Update TREE_RCU-kconfig.txt
Quoted 9 lines · Paul E. McKenney
From: "Paul E. McKenney" <[email protected]>
This commit updates TREE_RCU-kconfig.txt to reflect changes in RCU's
Kconfigsetup. This commit also updates rcutorture'sKconfigfragments to account forKconfigparameters that are now driven directly off of otherKconfigparameters.Reported-by Pranith Kumar <[email protected]>Signed-off-by Paul E. McKenney <[email protected]>
Can you please explain the #CHECK# prefix that this adds to several of the configs?
Quoted 161 lines
.../selftests/rcutorture/configs/rcu/TASKS01 | 3 +- .../selftests/rcutorture/configs/rcu/TINY02 | 2 +- .../selftests/rcutorture/configs/rcu/TREE04 | 2 +- .../selftests/rcutorture/configs/rcu/TREE05 | 2 +- .../selftests/rcutorture/configs/rcu/TREE06 | 2 +- .../selftests/rcutorture/configs/rcu/TREE07 | 2 +- .../selftests/rcutorture/configs/rcu/TREE08 | 2 +- .../selftests/rcutorture/doc/TREE_RCU-kconfig.txt | 36 ++++++++-------------- 8 files changed, 21 insertions(+), 30 deletions(-)tools/testing/selftests/rcutorture/configs/rcu/TASKS01 +2
-1@@ -5,5 +5,6 @@ CONFIG_PREEMPT_NONE=n CONFIG_PREEMPT_VOLUNTARY=n CONFIG_PREEMPT=y CONFIG_DEBUG_LOCK_ALLOC=y -CONFIG_PROVE_RCU=y +CONFIG_PROVE_LOCKING=n +#CHECK#CONFIG_PROVE_RCU=n CONFIG_RCU_EXPERT=ytools/testing/selftests/rcutorture/configs/rcu/TINY02 +1
-1@@ -8,7 +8,7 @@ CONFIG_NO_HZ_IDLE=n CONFIG_NO_HZ_FULL=n CONFIG_RCU_TRACE=y CONFIG_PROVE_LOCKING=y -CONFIG_PROVE_RCU=y +#CHECK#CONFIG_PROVE_RCU=y CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_DEBUG_OBJECTS_RCU_HEAD=n CONFIG_PREEMPT_COUNT=ytools/testing/selftests/rcutorture/configs/rcu/TREE04 +1
-1@@ -17,6 +17,6 @@ CONFIG_RCU_FANOUT=4 CONFIG_RCU_FANOUT_LEAF=4 CONFIG_RCU_NOCB_CPU=n CONFIG_DEBUG_LOCK_ALLOC=n -CONFIG_RCU_CPU_STALL_INFO=y +CONFIG_RCU_CPU_STALL_INFO=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=n CONFIG_RCU_EXPERT=ytools/testing/selftests/rcutorture/configs/rcu/TREE05 +1
-1@@ -16,7 +16,7 @@ CONFIG_RCU_NOCB_CPU=y CONFIG_RCU_NOCB_CPU_NONE=y CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_PROVE_LOCKING=y -CONFIG_PROVE_RCU=y +#CHECK#CONFIG_PROVE_RCU=y CONFIG_RCU_CPU_STALL_INFO=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=n CONFIG_RCU_EXPERT=ytools/testing/selftests/rcutorture/configs/rcu/TREE06 +1
-1@@ -17,7 +17,7 @@ CONFIG_RCU_FANOUT_LEAF=6 CONFIG_RCU_NOCB_CPU=n CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_PROVE_LOCKING=y -CONFIG_PROVE_RCU=y +#CHECK#CONFIG_PROVE_RCU=y CONFIG_RCU_CPU_STALL_INFO=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=y CONFIG_RCU_EXPERT=ytools/testing/selftests/rcutorture/configs/rcu/TREE07 +1
-1@@ -17,6 +17,6 @@ CONFIG_RCU_FANOUT=2 CONFIG_RCU_FANOUT_LEAF=2 CONFIG_RCU_NOCB_CPU=n CONFIG_DEBUG_LOCK_ALLOC=n -CONFIG_RCU_CPU_STALL_INFO=y +CONFIG_RCU_CPU_STALL_INFO=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=n CONFIG_RCU_EXPERT=ytools/testing/selftests/rcutorture/configs/rcu/TREE08 +1
-1@@ -18,7 +18,7 @@ CONFIG_RCU_NOCB_CPU=y CONFIG_RCU_NOCB_CPU_ALL=y CONFIG_DEBUG_LOCK_ALLOC=n CONFIG_PROVE_LOCKING=y -CONFIG_PROVE_RCU=y +#CHECK#CONFIG_PROVE_RCU=y CONFIG_RCU_CPU_STALL_INFO=n CONFIG_RCU_BOOST=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=ntools/testing/selftests/rcutorture/doc/TREE_RCU-kconfig.txt +13
-23@@ -12,13 +12,12 @@ CONFIG_NO_HZ_IDLE -- Do those not otherwise specified. (Groups of two.) CONFIG_NO_HZ_FULL -- Do two, one with CONFIG_NO_HZ_FULL_SYSIDLE. CONFIG_NO_HZ_FULL_SYSIDLE -- Do one. CONFIG_PREEMPT -- Do half. (First three and #8.) -CONFIG_PROVE_LOCKING -- Do all but two, covering CONFIG_PROVE_RCU and not. -CONFIG_PROVE_RCU -- Do all but one under CONFIG_PROVE_LOCKING. +CONFIG_PROVE_LOCKING -- Do several, covering CONFIG_DEBUG_LOCK_ALLOC=y and not. +CONFIG_PROVE_RCU -- Hardwired to CONFIG_PROVE_LOCKING. CONFIG_RCU_BOOST -- one of PREEMPT_RCU. CONFIG_RCU_KTHREAD_PRIO -- set to 2 for _BOOST testing. -CONFIG_RCU_CPU_STALL_INFO -- Do one. -CONFIG_RCU_FANOUT -- Cover hierarchy as currently, but overlap with others. -CONFIG_RCU_FANOUT_EXACT -- Do one. +CONFIG_RCU_CPU_STALL_INFO -- Now default, avoid at least twice. +CONFIG_RCU_FANOUT -- Cover hierarchy, but overlap with others. CONFIG_RCU_FANOUT_LEAF -- Do one non-default. CONFIG_RCU_FAST_NO_HZ -- Do one, but not with CONFIG_RCU_NOCB_CPU_ALL. CONFIG_RCU_NOCB_CPU -- Do three, see below.@@ -27,28 +26,19 @@ CONFIG_RCU_NOCB_CPU_NONE -- Do one. CONFIG_RCU_NOCB_CPU_ZERO -- Do one. CONFIG_RCU_TRACE -- Do half. CONFIG_SMP -- Need one !SMP for PREEMPT_RCU. +!RCU_EXPERT -- Do a few, but these have to be vanilla configurations. RCU-bh: Do one with PREEMPT and one with !PREEMPT. RCU-sched: Do one with PREEMPT but not BOOST. -Hierarchy: - -TREE01. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=8, CONFIG_RCU_FANOUT_EXACT=n. -TREE02. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=3, CONFIG_RCU_FANOUT_EXACT=n, - CONFIG_RCU_FANOUT_LEAF=3. -TREE03. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=4, CONFIG_RCU_FANOUT_EXACT=n, - CONFIG_RCU_FANOUT_LEAF=4. -TREE04. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=2, CONFIG_RCU_FANOUT_EXACT=n, - CONFIG_RCU_FANOUT_LEAF=2. -TREE05. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=6, CONFIG_RCU_FANOUT_EXACT=n - CONFIG_RCU_FANOUT_LEAF=6. -TREE06. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=6, CONFIG_RCU_FANOUT_EXACT=y - CONFIG_RCU_FANOUT_LEAF=6. -TREE07. CONFIG_NR_CPUS=16, CONFIG_RCU_FANOUT=2, CONFIG_RCU_FANOUT_EXACT=n, - CONFIG_RCU_FANOUT_LEAF=2. -TREE08. CONFIG_NR_CPUS=16, CONFIG_RCU_FANOUT=3, CONFIG_RCU_FANOUT_EXACT=y, - CONFIG_RCU_FANOUT_LEAF=2. -TREE09. CONFIG_NR_CPUS=1. +Boot parameters: + +nohz_full - do at least one. +maxcpu -- do at least one. +rcupdate.rcu_self_test_bh -- Do at least one each, offloaded and not. +rcupdate.rcu_self_test_sched -- Do at least one each, offloaded and not. +rcupdate.rcu_self_test -- Do at least one each, offloaded and not. +rcutree.rcu_fanout_exact -- Do at least one. Kconfig Parameters Ignored:Signature · 1 line
1.8.1.5
Re: [PATCH tip/core/rcu 11/13] rcutorture: Update TREE_RCU-kconfig.txt
Quoted 8 lines · On Tue, May 12, 2015 at 06:06:43PM -0700, [email protected] wrote:
Quoted 7 lines · Paul E. McKenney
From: "Paul E. McKenney" <[email protected]>
This commit updates TREE_RCU-kconfig.txt to reflect changes in RCU's
Kconfigsetup. This commit also updates rcutorture'sKconfigfragments to account forKconfigparameters that are now driven directly off of otherKconfigparameters.
Quoted 5 lines
Quoted 2 lines
Reported-by Pranith Kumar <[email protected]>Signed-off-by Paul E. McKenney <[email protected]>Can you please explain the #CHECK# prefix that this adds to several of the configs?
I added the following paragraph to the commit log:
The #CHECK# prefix tells the rcutorture scripts to take no action to try to set the Kconfig parameter, but to check that it does in fact get set. This is useful for verifying that Kconfig parameters that are supposed to be automatically set do in fact get set to the required values.
Does that help?
Thanx, Paul
Quoted 162 lines
Quoted 161 lines
.../selftests/rcutorture/configs/rcu/TASKS01 | 3 +- .../selftests/rcutorture/configs/rcu/TINY02 | 2 +- .../selftests/rcutorture/configs/rcu/TREE04 | 2 +- .../selftests/rcutorture/configs/rcu/TREE05 | 2 +- .../selftests/rcutorture/configs/rcu/TREE06 | 2 +- .../selftests/rcutorture/configs/rcu/TREE07 | 2 +- .../selftests/rcutorture/configs/rcu/TREE08 | 2 +- .../selftests/rcutorture/doc/TREE_RCU-kconfig.txt | 36 ++++++++-------------- 8 files changed, 21 insertions(+), 30 deletions(-)tools/testing/selftests/rcutorture/configs/rcu/TASKS01 +2
-1@@ -5,5 +5,6 @@ CONFIG_PREEMPT_NONE=n CONFIG_PREEMPT_VOLUNTARY=n CONFIG_PREEMPT=y CONFIG_DEBUG_LOCK_ALLOC=y -CONFIG_PROVE_RCU=y +CONFIG_PROVE_LOCKING=n +#CHECK#CONFIG_PROVE_RCU=n CONFIG_RCU_EXPERT=ytools/testing/selftests/rcutorture/configs/rcu/TINY02 +1
-1@@ -8,7 +8,7 @@ CONFIG_NO_HZ_IDLE=n CONFIG_NO_HZ_FULL=n CONFIG_RCU_TRACE=y CONFIG_PROVE_LOCKING=y -CONFIG_PROVE_RCU=y +#CHECK#CONFIG_PROVE_RCU=y CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_DEBUG_OBJECTS_RCU_HEAD=n CONFIG_PREEMPT_COUNT=ytools/testing/selftests/rcutorture/configs/rcu/TREE04 +1
-1@@ -17,6 +17,6 @@ CONFIG_RCU_FANOUT=4 CONFIG_RCU_FANOUT_LEAF=4 CONFIG_RCU_NOCB_CPU=n CONFIG_DEBUG_LOCK_ALLOC=n -CONFIG_RCU_CPU_STALL_INFO=y +CONFIG_RCU_CPU_STALL_INFO=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=n CONFIG_RCU_EXPERT=ytools/testing/selftests/rcutorture/configs/rcu/TREE05 +1
-1@@ -16,7 +16,7 @@ CONFIG_RCU_NOCB_CPU=y CONFIG_RCU_NOCB_CPU_NONE=y CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_PROVE_LOCKING=y -CONFIG_PROVE_RCU=y +#CHECK#CONFIG_PROVE_RCU=y CONFIG_RCU_CPU_STALL_INFO=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=n CONFIG_RCU_EXPERT=ytools/testing/selftests/rcutorture/configs/rcu/TREE06 +1
-1@@ -17,7 +17,7 @@ CONFIG_RCU_FANOUT_LEAF=6 CONFIG_RCU_NOCB_CPU=n CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_PROVE_LOCKING=y -CONFIG_PROVE_RCU=y +#CHECK#CONFIG_PROVE_RCU=y CONFIG_RCU_CPU_STALL_INFO=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=y CONFIG_RCU_EXPERT=ytools/testing/selftests/rcutorture/configs/rcu/TREE07 +1
-1@@ -17,6 +17,6 @@ CONFIG_RCU_FANOUT=2 CONFIG_RCU_FANOUT_LEAF=2 CONFIG_RCU_NOCB_CPU=n CONFIG_DEBUG_LOCK_ALLOC=n -CONFIG_RCU_CPU_STALL_INFO=y +CONFIG_RCU_CPU_STALL_INFO=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=n CONFIG_RCU_EXPERT=ytools/testing/selftests/rcutorture/configs/rcu/TREE08 +1
-1@@ -18,7 +18,7 @@ CONFIG_RCU_NOCB_CPU=y CONFIG_RCU_NOCB_CPU_ALL=y CONFIG_DEBUG_LOCK_ALLOC=n CONFIG_PROVE_LOCKING=y -CONFIG_PROVE_RCU=y +#CHECK#CONFIG_PROVE_RCU=y CONFIG_RCU_CPU_STALL_INFO=n CONFIG_RCU_BOOST=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=ntools/testing/selftests/rcutorture/doc/TREE_RCU-kconfig.txt +13
-23@@ -12,13 +12,12 @@ CONFIG_NO_HZ_IDLE -- Do those not otherwise specified. (Groups of two.) CONFIG_NO_HZ_FULL -- Do two, one with CONFIG_NO_HZ_FULL_SYSIDLE. CONFIG_NO_HZ_FULL_SYSIDLE -- Do one. CONFIG_PREEMPT -- Do half. (First three and #8.) -CONFIG_PROVE_LOCKING -- Do all but two, covering CONFIG_PROVE_RCU and not. -CONFIG_PROVE_RCU -- Do all but one under CONFIG_PROVE_LOCKING. +CONFIG_PROVE_LOCKING -- Do several, covering CONFIG_DEBUG_LOCK_ALLOC=y and not. +CONFIG_PROVE_RCU -- Hardwired to CONFIG_PROVE_LOCKING. CONFIG_RCU_BOOST -- one of PREEMPT_RCU. CONFIG_RCU_KTHREAD_PRIO -- set to 2 for _BOOST testing. -CONFIG_RCU_CPU_STALL_INFO -- Do one. -CONFIG_RCU_FANOUT -- Cover hierarchy as currently, but overlap with others. -CONFIG_RCU_FANOUT_EXACT -- Do one. +CONFIG_RCU_CPU_STALL_INFO -- Now default, avoid at least twice. +CONFIG_RCU_FANOUT -- Cover hierarchy, but overlap with others. CONFIG_RCU_FANOUT_LEAF -- Do one non-default. CONFIG_RCU_FAST_NO_HZ -- Do one, but not with CONFIG_RCU_NOCB_CPU_ALL. CONFIG_RCU_NOCB_CPU -- Do three, see below.@@ -27,28 +26,19 @@ CONFIG_RCU_NOCB_CPU_NONE -- Do one. CONFIG_RCU_NOCB_CPU_ZERO -- Do one. CONFIG_RCU_TRACE -- Do half. CONFIG_SMP -- Need one !SMP for PREEMPT_RCU. +!RCU_EXPERT -- Do a few, but these have to be vanilla configurations. RCU-bh: Do one with PREEMPT and one with !PREEMPT. RCU-sched: Do one with PREEMPT but not BOOST. -Hierarchy: - -TREE01. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=8, CONFIG_RCU_FANOUT_EXACT=n. -TREE02. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=3, CONFIG_RCU_FANOUT_EXACT=n, - CONFIG_RCU_FANOUT_LEAF=3. -TREE03. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=4, CONFIG_RCU_FANOUT_EXACT=n, - CONFIG_RCU_FANOUT_LEAF=4. -TREE04. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=2, CONFIG_RCU_FANOUT_EXACT=n, - CONFIG_RCU_FANOUT_LEAF=2. -TREE05. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=6, CONFIG_RCU_FANOUT_EXACT=n - CONFIG_RCU_FANOUT_LEAF=6. -TREE06. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=6, CONFIG_RCU_FANOUT_EXACT=y - CONFIG_RCU_FANOUT_LEAF=6. -TREE07. CONFIG_NR_CPUS=16, CONFIG_RCU_FANOUT=2, CONFIG_RCU_FANOUT_EXACT=n, - CONFIG_RCU_FANOUT_LEAF=2. -TREE08. CONFIG_NR_CPUS=16, CONFIG_RCU_FANOUT=3, CONFIG_RCU_FANOUT_EXACT=y, - CONFIG_RCU_FANOUT_LEAF=2. -TREE09. CONFIG_NR_CPUS=1. +Boot parameters: + +nohz_full - do at least one. +maxcpu -- do at least one. +rcupdate.rcu_self_test_bh -- Do at least one each, offloaded and not. +rcupdate.rcu_self_test_sched -- Do at least one each, offloaded and not. +rcupdate.rcu_self_test -- Do at least one each, offloaded and not. +rcutree.rcu_fanout_exact -- Do at least one. Kconfig Parameters Ignored:Signature · 1 line
1.8.1.5
Re: [PATCH tip/core/rcu 11/13] rcutorture: Update TREE_RCU-kconfig.txt
Quoted 17 lines · Paul E. McKenney
Quoted 8 lines · On Tue, May 12, 2015 at 06:06:43PM -0700, [email protected] wrote:
Quoted 7 lines · Paul E. McKenney
From: "Paul E. McKenney" <[email protected]>
This commit updates TREE_RCU-kconfig.txt to reflect changes in RCU's
Kconfigsetup. This commit also updates rcutorture'sKconfigfragments to account forKconfigparameters that are now driven directly off of otherKconfigparameters.Quoted 5 lines
Quoted 2 lines
Reported-by Pranith Kumar <[email protected]>Signed-off-by Paul E. McKenney <[email protected]>Can you please explain the #CHECK# prefix that this adds to several of the configs?
I added the following paragraph to the commit log:
Quoted 7 lines
The #CHECK# prefix tells the rcutorture scripts to take no action to try to set the
Kconfigparameter, but to check that it does in fact get set. This is useful for verifying thatKconfigparameters that are supposed to be automatically set do in fact get set to the required values.Does that help?
Yes, that helps, thanks.
With that added:
Quoted 165 lines
Thanx, Paul
Quoted 162 lines
Quoted 161 lines
.../selftests/rcutorture/configs/rcu/TASKS01 | 3 +- .../selftests/rcutorture/configs/rcu/TINY02 | 2 +- .../selftests/rcutorture/configs/rcu/TREE04 | 2 +- .../selftests/rcutorture/configs/rcu/TREE05 | 2 +- .../selftests/rcutorture/configs/rcu/TREE06 | 2 +- .../selftests/rcutorture/configs/rcu/TREE07 | 2 +- .../selftests/rcutorture/configs/rcu/TREE08 | 2 +- .../selftests/rcutorture/doc/TREE_RCU-kconfig.txt | 36 ++++++++-------------- 8 files changed, 21 insertions(+), 30 deletions(-)tools/testing/selftests/rcutorture/configs/rcu/TASKS01 +2
-1@@ -5,5 +5,6 @@ CONFIG_PREEMPT_NONE=n CONFIG_PREEMPT_VOLUNTARY=n CONFIG_PREEMPT=y CONFIG_DEBUG_LOCK_ALLOC=y -CONFIG_PROVE_RCU=y +CONFIG_PROVE_LOCKING=n +#CHECK#CONFIG_PROVE_RCU=n CONFIG_RCU_EXPERT=ytools/testing/selftests/rcutorture/configs/rcu/TINY02 +1
-1@@ -8,7 +8,7 @@ CONFIG_NO_HZ_IDLE=n CONFIG_NO_HZ_FULL=n CONFIG_RCU_TRACE=y CONFIG_PROVE_LOCKING=y -CONFIG_PROVE_RCU=y +#CHECK#CONFIG_PROVE_RCU=y CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_DEBUG_OBJECTS_RCU_HEAD=n CONFIG_PREEMPT_COUNT=ytools/testing/selftests/rcutorture/configs/rcu/TREE04 +1
-1@@ -17,6 +17,6 @@ CONFIG_RCU_FANOUT=4 CONFIG_RCU_FANOUT_LEAF=4 CONFIG_RCU_NOCB_CPU=n CONFIG_DEBUG_LOCK_ALLOC=n -CONFIG_RCU_CPU_STALL_INFO=y +CONFIG_RCU_CPU_STALL_INFO=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=n CONFIG_RCU_EXPERT=ytools/testing/selftests/rcutorture/configs/rcu/TREE05 +1
-1@@ -16,7 +16,7 @@ CONFIG_RCU_NOCB_CPU=y CONFIG_RCU_NOCB_CPU_NONE=y CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_PROVE_LOCKING=y -CONFIG_PROVE_RCU=y +#CHECK#CONFIG_PROVE_RCU=y CONFIG_RCU_CPU_STALL_INFO=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=n CONFIG_RCU_EXPERT=ytools/testing/selftests/rcutorture/configs/rcu/TREE06 +1
-1@@ -17,7 +17,7 @@ CONFIG_RCU_FANOUT_LEAF=6 CONFIG_RCU_NOCB_CPU=n CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_PROVE_LOCKING=y -CONFIG_PROVE_RCU=y +#CHECK#CONFIG_PROVE_RCU=y CONFIG_RCU_CPU_STALL_INFO=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=y CONFIG_RCU_EXPERT=ytools/testing/selftests/rcutorture/configs/rcu/TREE07 +1
-1@@ -17,6 +17,6 @@ CONFIG_RCU_FANOUT=2 CONFIG_RCU_FANOUT_LEAF=2 CONFIG_RCU_NOCB_CPU=n CONFIG_DEBUG_LOCK_ALLOC=n -CONFIG_RCU_CPU_STALL_INFO=y +CONFIG_RCU_CPU_STALL_INFO=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=n CONFIG_RCU_EXPERT=ytools/testing/selftests/rcutorture/configs/rcu/TREE08 +1
-1@@ -18,7 +18,7 @@ CONFIG_RCU_NOCB_CPU=y CONFIG_RCU_NOCB_CPU_ALL=y CONFIG_DEBUG_LOCK_ALLOC=n CONFIG_PROVE_LOCKING=y -CONFIG_PROVE_RCU=y +#CHECK#CONFIG_PROVE_RCU=y CONFIG_RCU_CPU_STALL_INFO=n CONFIG_RCU_BOOST=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=ntools/testing/selftests/rcutorture/doc/TREE_RCU-kconfig.txt +13
-23@@ -12,13 +12,12 @@ CONFIG_NO_HZ_IDLE -- Do those not otherwise specified. (Groups of two.) CONFIG_NO_HZ_FULL -- Do two, one with CONFIG_NO_HZ_FULL_SYSIDLE. CONFIG_NO_HZ_FULL_SYSIDLE -- Do one. CONFIG_PREEMPT -- Do half. (First three and #8.) -CONFIG_PROVE_LOCKING -- Do all but two, covering CONFIG_PROVE_RCU and not. -CONFIG_PROVE_RCU -- Do all but one under CONFIG_PROVE_LOCKING. +CONFIG_PROVE_LOCKING -- Do several, covering CONFIG_DEBUG_LOCK_ALLOC=y and not. +CONFIG_PROVE_RCU -- Hardwired to CONFIG_PROVE_LOCKING. CONFIG_RCU_BOOST -- one of PREEMPT_RCU. CONFIG_RCU_KTHREAD_PRIO -- set to 2 for _BOOST testing. -CONFIG_RCU_CPU_STALL_INFO -- Do one. -CONFIG_RCU_FANOUT -- Cover hierarchy as currently, but overlap with others. -CONFIG_RCU_FANOUT_EXACT -- Do one. +CONFIG_RCU_CPU_STALL_INFO -- Now default, avoid at least twice. +CONFIG_RCU_FANOUT -- Cover hierarchy, but overlap with others. CONFIG_RCU_FANOUT_LEAF -- Do one non-default. CONFIG_RCU_FAST_NO_HZ -- Do one, but not with CONFIG_RCU_NOCB_CPU_ALL. CONFIG_RCU_NOCB_CPU -- Do three, see below.@@ -27,28 +26,19 @@ CONFIG_RCU_NOCB_CPU_NONE -- Do one. CONFIG_RCU_NOCB_CPU_ZERO -- Do one. CONFIG_RCU_TRACE -- Do half. CONFIG_SMP -- Need one !SMP for PREEMPT_RCU. +!RCU_EXPERT -- Do a few, but these have to be vanilla configurations. RCU-bh: Do one with PREEMPT and one with !PREEMPT. RCU-sched: Do one with PREEMPT but not BOOST. -Hierarchy: - -TREE01. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=8, CONFIG_RCU_FANOUT_EXACT=n. -TREE02. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=3, CONFIG_RCU_FANOUT_EXACT=n, - CONFIG_RCU_FANOUT_LEAF=3. -TREE03. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=4, CONFIG_RCU_FANOUT_EXACT=n, - CONFIG_RCU_FANOUT_LEAF=4. -TREE04. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=2, CONFIG_RCU_FANOUT_EXACT=n, - CONFIG_RCU_FANOUT_LEAF=2. -TREE05. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=6, CONFIG_RCU_FANOUT_EXACT=n - CONFIG_RCU_FANOUT_LEAF=6. -TREE06. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=6, CONFIG_RCU_FANOUT_EXACT=y - CONFIG_RCU_FANOUT_LEAF=6. -TREE07. CONFIG_NR_CPUS=16, CONFIG_RCU_FANOUT=2, CONFIG_RCU_FANOUT_EXACT=n, - CONFIG_RCU_FANOUT_LEAF=2. -TREE08. CONFIG_NR_CPUS=16, CONFIG_RCU_FANOUT=3, CONFIG_RCU_FANOUT_EXACT=y, - CONFIG_RCU_FANOUT_LEAF=2. -TREE09. CONFIG_NR_CPUS=1. +Boot parameters: + +nohz_full - do at least one. +maxcpu -- do at least one. +rcupdate.rcu_self_test_bh -- Do at least one each, offloaded and not. +rcupdate.rcu_self_test_sched -- Do at least one each, offloaded and not. +rcupdate.rcu_self_test -- Do at least one each, offloaded and not. +rcutree.rcu_fanout_exact -- Do at least one. Kconfig Parameters Ignored:Signature · 1 line
1.8.1.5
PATCH 12/13 rcutorture: Display "make oldconfig" errors
In reply to Paul E. McKenneyFrom: "Paul E. McKenney" <[email protected]>
The current rcutorture scripting fails to dump out errors from "make oldconfig", so this commit addresses this issue.
--- tools/testing/selftests/rcutorture/bin/configinit.sh | 2 +- tools/testing/selftests/rcutorture/bin/kvm-recheck.sh | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-)
tools/testing/selftests/rcutorture/bin/configinit.sh +1 -1
@@ -66,7 +66,7 @@ make $buildloc $TORTURE_DEFCONFIG > $builddir/Make.defconfig.out 2>&1 mv $builddir/.config $builddir/.config.sav sh $T/upd.sh < $builddir/.config.sav > $builddir/.config cp $builddir/.config $builddir/.config.new -yes '' | make $buildloc oldconfig > $builddir/Make.modconfig.out 2>&1 +yes '' | make $buildloc oldconfig > $builddir/Make.oldconfig.out 2> $builddir/Make.oldconfig.err # verify new config matches specification. configcheck.sh $builddir/.config $c
tools/testing/selftests/rcutorture/bin/kvm-recheck.sh +4 -0
@@ -43,6 +43,10 @@ do if test -f "$i/console.log" then configcheck.sh $i/.config $i/ConfigFragment + if test -r $i/Make.oldconfig.err + then + cat $i/Make.oldconfig.err + fi parse-build.sh $i/Make.out $configfile parse-torture.sh $i/console.log $configfile parse-console.sh $i/console.log $configfile
Signature · 1 line
1.8.1.5
PATCH 13/13 rcutorture: Allow repetition factors in Kconfig-fragment lists
In reply to Paul E. McKenneyFrom: "Paul E. McKenney" <[email protected]>
Although it is currently possible to run the same test in parallel, '--config "TINY01 TINY01 TINY01"' can get a bit verbose, especially if you want to run 48 instances of TINY01 in parallel. This commit therefore allows prefixing the Kconfig fragment with a repeat count, for example, '--config "48*TINY01"' to run 48 instances in parallel. At least assuming that you have 48 CPUs and also gave '--cpus 48'.
--- tools/testing/selftests/rcutorture/bin/kvm.sh | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-)
tools/testing/selftests/rcutorture/bin/kvm.sh +19 -6
@@ -55,7 +55,7 @@ usage () { echo " --bootargs kernel-boot-arguments" echo " --bootimage relative-path-to-kernel-boot-image" echo " --buildonly" - echo " --configs \"config-file list\"" + echo " --configs \"config-file list w/ repeat factor (3*TINY01)\"" echo " --cpus N" echo " --datestamp string" echo " --defconfig string"
@@ -178,13 +178,26 @@ fi touch $T/cfgcpu for CF in $configs do - if test -f "$CONFIGFRAG/$CF" + case $CF in + [0-9]\**|[0-9][0-9]\**|[0-9][0-9][0-9]\**) + config_reps=`echo $CF | sed -e 's/\*.*$//'` + CF1=`echo $CF | sed -e 's/^[^*]*\*//'` + ;; + *) + config_reps=1 + CF1=$CF + ;; + esac + if test -f "$CONFIGFRAG/$CF1" then - cpu_count=`configNR_CPUS.sh $CONFIGFRAG/$CF` - cpu_count=`configfrag_boot_cpus "$TORTURE_BOOTARGS" "$CONFIGFRAG/$CF" "$cpu_count"` - echo $CF $cpu_count >> $T/cfgcpu + cpu_count=`configNR_CPUS.sh $CONFIGFRAG/$CF1` + cpu_count=`configfrag_boot_cpus "$TORTURE_BOOTARGS" "$CONFIGFRAG/$CF1" "$cpu_count"` + for ((cur_rep=0;cur_rep<$config_reps;cur_rep++)) + do + echo $CF1 $cpu_count >> $T/cfgcpu + done else - echo "The --configs file $CF does not exist, terminating." + echo "The --configs file $CF1 does not exist, terminating." exit 1 fi done
Signature · 1 line
1.8.1.5
Quoted 34 lines · Paul E. McKenney
Hello!
This series contains torture-test updates:
1. Use correct locking primitive, thus avoiding deadlock, courtesy
of Alexey Kodanev.2. Exchange TREE03 and TREE04 geometries in order to improve bug-location
rates.3. Exchange TREE03 and TREE08
NR_CPUS, speed up CPU hotplug to further
improve bug-location rates.4. Allow negative values of nreaders to in order to oversubscribe
the CPUs, again to improve bug-location rates.5. Change
longdelay_ustolongdelay_msin order to better reflectreality. (Not that gcc cares, but people reading the code just might.)6. Replace open-coded memory barriers with the shiny new
smp_store_release()andsmp_load_acquire()primitives.7. Test SRCU cleanup code path in order to improve test coverage.
8. Avoid explicitly setting
CONFIG_TASKS_RCU, given that it is
now set implicitly based on other configuration options.9. Update configuration fragments from
CONFIG_RCU_FANOUT_EXACTto
the new rcutree.rcu_fanout_exact= boot parameter.10. Make rcutorture scripts force
RCU_EXPERTso that they can still
build the needed kernel configurations.
Quoted 7 lines
11. Update TREE_RCU-kconfig.txt to describe new kernel-parameter
setup.12. Make torture scripts display "make oldconfig" errors
13. Allow repetition factors in Kconfig-fragment lists. Because
typing 48 repetitions of "TINY02" is getting old.
I replied to patches 4 and 11 with feedback. For the rest: