Commit 4b6c2cca6eef9cc4a15350bf1c61839e12e08b84
Committed by
Linus Torvalds
1 parent
11a147013e
Exists in
master
and in
20 other branches
[PATCH] rcu: add sched torture type to rcutorture
Implement torture testing for the "sched" variant of RCU, which uses preempt_disable, preempt_enable, and synchronize_sched. Signed-off-by: Josh Triplett <josh@freedesktop.org> Acked-by: Paul E. McKenney <paulmck@us.ibm.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Showing 2 changed files with 42 additions and 3 deletions Side-by-side Diff
Documentation/RCU/torture.txt
... | ... | @@ -56,8 +56,9 @@ |
56 | 56 | torture_type The type of RCU to test: "rcu" for the rcu_read_lock() API, |
57 | 57 | "rcu_sync" for rcu_read_lock() with synchronous reclamation, |
58 | 58 | "rcu_bh" for the rcu_read_lock_bh() API, "rcu_bh_sync" for |
59 | - rcu_read_lock_bh() with synchronous reclamation, and "srcu" | |
60 | - for the "srcu_read_lock()" API. | |
59 | + rcu_read_lock_bh() with synchronous reclamation, "srcu" for | |
60 | + the "srcu_read_lock()" API, and "sched" for the use of | |
61 | + preempt_disable() together with synchronize_sched(). | |
61 | 62 | |
62 | 63 | verbose Enable debug printk()s. Default is disabled. |
63 | 64 |
kernel/rcutorture.c
... | ... | @@ -464,9 +464,47 @@ |
464 | 464 | .name = "srcu" |
465 | 465 | }; |
466 | 466 | |
467 | +/* | |
468 | + * Definitions for sched torture testing. | |
469 | + */ | |
470 | + | |
471 | +static int sched_torture_read_lock(void) | |
472 | +{ | |
473 | + preempt_disable(); | |
474 | + return 0; | |
475 | +} | |
476 | + | |
477 | +static void sched_torture_read_unlock(int idx) | |
478 | +{ | |
479 | + preempt_enable(); | |
480 | +} | |
481 | + | |
482 | +static int sched_torture_completed(void) | |
483 | +{ | |
484 | + return 0; | |
485 | +} | |
486 | + | |
487 | +static void sched_torture_synchronize(void) | |
488 | +{ | |
489 | + synchronize_sched(); | |
490 | +} | |
491 | + | |
492 | +static struct rcu_torture_ops sched_ops = { | |
493 | + .init = rcu_sync_torture_init, | |
494 | + .cleanup = NULL, | |
495 | + .readlock = sched_torture_read_lock, | |
496 | + .readdelay = rcu_read_delay, /* just reuse rcu's version. */ | |
497 | + .readunlock = sched_torture_read_unlock, | |
498 | + .completed = sched_torture_completed, | |
499 | + .deferredfree = rcu_sync_torture_deferred_free, | |
500 | + .sync = sched_torture_synchronize, | |
501 | + .stats = NULL, | |
502 | + .name = "sched" | |
503 | +}; | |
504 | + | |
467 | 505 | static struct rcu_torture_ops *torture_ops[] = |
468 | 506 | { &rcu_ops, &rcu_sync_ops, &rcu_bh_ops, &rcu_bh_sync_ops, &srcu_ops, |
469 | - NULL }; | |
507 | + &sched_ops, NULL }; | |
470 | 508 | |
471 | 509 | /* |
472 | 510 | * RCU torture writer kthread. Repeatedly substitutes a new structure |