]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
Merge branches 'doc.2018.08.30a', 'dynticks.2018.08.30b', 'srcu.2018.08.30b' and...
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Thu, 30 Aug 2018 23:12:53 +0000 (16:12 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Thu, 30 Aug 2018 23:12:53 +0000 (16:12 -0700)
doc.2018.08.30a: Documentation updates
dynticks.2018.08.30b: RCU flavor consolidation updates and cleanups
srcu.2018.08.30b: SRCU updates
torture.2018.08.29a: Torture-test updates

1  2  3  4 
Documentation/RCU/Design/Requirements/Requirements.html
Documentation/admin-guide/kernel-parameters.txt
include/linux/rcutiny.h
kernel/rcu/rcu.h
kernel/rcu/rcuperf.c
kernel/rcu/rcutorture.c
kernel/rcu/srcutree.c
kernel/rcu/tiny.c
kernel/rcu/tree.c
kernel/rcu/update.c
tools/testing/selftests/rcutorture/configs/rcu/TREE05.boot

index 701b5c53607f8f8faf8f27b29c51b98ad77aad81,038714475edbf70be11f071e5e529321afc33890,49690228b1c69449e395e187bd13094fb0256f2b,49690228b1c69449e395e187bd13094fb0256f2b..43c4e2f05f402035b349d26e99758025d044da82
@@@@@ -2929,20 -2916,8 -2918,8 -2918,8 +2927,20 @@@@@ include
    <tt>call_rcu_bh()</tt>,
    <tt>rcu_barrier_bh()</tt>, and
    <tt>rcu_read_lock_bh_held()</tt>.
 -  <h3><a name="Sched Flavor">Sched Flavor</a></h3>
 +++However, the update-side APIs are now simple wrappers for other RCU
 +++flavors, namely RCU-sched in CONFIG_PREEMPT=n kernels and RCU-preempt
 +++otherwise.
  ++
  --<h3><a name="Sched Flavor">Sched Flavor</a></h3>
 +++<h3><a name="Sched Flavor">Sched Flavor (Historical)</a></h3>
 +  
 +++<p>
 +++The RCU-sched flavor of RCU has since been expressed in terms of
 +++the other RCU flavors as part of a consolidation of the three
 +++flavors into a single flavor.
 +++The read-side API remains, and continues to disable preemption and to
 +++be accounted for by lockdep.
 +++Much of the material in this section is therefore strictly historical
 +++in nature.
    
    <p>
    Before preemptible RCU, waiting for an RCU grace period had the
Simple merge
Simple merge
Simple merge
index c596c6f1e45717af99da5139d3c5078782deafbe,1141e0d84ff12cc674c5ac24170136f3762a109a,c596c6f1e45717af99da5139d3c5078782deafbe,a02a2f21386ba198a37819693f60c668db555415..210c774603656f0f455295b3015625a49fe2c88b
@@@@@ -325,7 -343,8 -325,7 -333,9 +351,10 @@@@@ rcu_read_delay(struct torture_random_st
        if (!(torture_random(rrsp) % (nrealreaders * 2000 * longdelay_ms))) {
                started = cur_ops->get_gp_seq();
                ts = rcu_trace_clock_local();
+++             if (preempt_count() & (SOFTIRQ_MASK | HARDIRQ_MASK))
+++                     longdelay_ms = 5; /* Avoid triggering BH limits. */
                mdelay(longdelay_ms);
+ ++            rtrsp->rt_delay_ms = longdelay_ms;
                completed = cur_ops->get_gp_seq();
                do_trace_rcu_torture_read(cur_ops->name, NULL, ts,
                                          started, completed);
@@@@@ -429,8 -452,9 -429,8 -439,9 +462,10 @@@@@ static struct rcu_torture_ops rcu_ops 
        .cb_barrier     = rcu_barrier,
        .fqs            = rcu_force_quiescent_state,
        .stats          = NULL,
+++     .stall_dur      = rcu_jiffies_till_stall_check,
        .irq_capable    = 1,
        .can_boost      = rcu_can_boost(),
+ ++    .extendables    = RCUTORTURE_MAX_EXTEND,
        .name           = "rcu"
    };
    
Simple merge
Simple merge
Simple merge
index 39cb23d22109386562683c57931df279257a9e85,fa089ead4bd6a3c88e8b90cf4d338218d3b6ac68,7d057d0aaec404ef9ca662d2178731fd1f32ac53,a6b860422d18459ecb52c93d3ec889c05ce91b15..f203b94f6b5be1f4e3047a429fa9267c1713ff60
@@@@@ -891,24 -882,10 -893,27 -892,24 +885,13 @@@@@ DEFINE_STATIC_SRCU(early_srcu)
    static void early_boot_test_call_rcu(void)
    {
        static struct rcu_head head;
++ +    static struct rcu_head shead;
    
        call_rcu(&head, test_callback);
-  -}
-  -
-  -static void early_boot_test_call_rcu_bh(void)
-  -{
-  -    static struct rcu_head head;
-  -
-  -    call_rcu_bh(&head, test_callback);
-  -}
-  -
-  -static void early_boot_test_call_rcu_sched(void)
-  -{
-  -    static struct rcu_head head;
-  -
-  -    call_rcu_sched(&head, test_callback);
++ +    if (IS_ENABLED(CONFIG_SRCU))
++ +            call_srcu(&early_srcu, &shead, test_callback);
    }
    
  - static void early_boot_test_call_rcu_bh(void)
  - {
  -     static struct rcu_head head;
  - 
  -     call_rcu_bh(&head, test_callback);
  - }
  - 
  - static void early_boot_test_call_rcu_sched(void)
  - {
  -     static struct rcu_head head;
  - 
  -     call_rcu_sched(&head, test_callback);
  - }
  - 
    void rcu_early_boot_tests(void)
    {
        pr_info("Running RCU self tests\n");
@@@@@ -930,16 -903,7 -935,20 -931,16 +909,11 @@@@@ static int rcu_verify_early_boot_tests(
        if (rcu_self_test) {
                early_boot_test_counter++;
                rcu_barrier();
++ +            if (IS_ENABLED(CONFIG_SRCU)) {
++ +                    early_boot_test_counter++;
++ +                    srcu_barrier(&early_srcu);
++ +            }
        }
- --    if (rcu_self_test_bh) {
- --            early_boot_test_counter++;
- --            rcu_barrier_bh();
- --    }
- --    if (rcu_self_test_sched) {
- --            early_boot_test_counter++;
- --            rcu_barrier_sched();
- --    }
- --
        if (rcu_self_test_counter != early_boot_test_counter) {
                WARN_ON(1);
                ret = -1;