]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
Merge branches 'exp.2022.02.24a', 'fixes.2022.02.14a', 'rcu_barrier.2022.02.08a'...
authorPaul E. McKenney <paulmck@kernel.org>
Thu, 24 Feb 2022 17:38:46 +0000 (09:38 -0800)
committerPaul E. McKenney <paulmck@kernel.org>
Thu, 24 Feb 2022 17:38:46 +0000 (09:38 -0800)
exp.2022.02.24a: Expedited grace-period updates.
fixes.2022.02.14a: Miscellaneous fixes.
rcu_barrier.2022.02.08a: Make rcu_barrier() no longer exclude CPU hotplug.
rcu-tasks.2022.02.08a: RCU-tasks updates.
rt.2022.02.01b: Real-time-related updates.
torture.2022.02.01b: Torture-test updates.
torturescript.2022.02.08a: Torture-test scripting updates.

1  2  3  4  5  6  7 
kernel/rcu/rcutorture.c
kernel/rcu/tree.c
kernel/rcu/tree.h
kernel/rcu/tree_nocb.h
kernel/rcu/tree_plugin.h

Simple merge
index a4c25a6283b0ba511381a43ba880f8562c31861a,ca8d7dd026eebe6cfd97469d67e546564d364289,1d3507d563db156238e9b976bf2d9801407a00bf,a4c25a6283b0ba511381a43ba880f8562c31861a,bd9b2af247abdb3fef732df2b2cc026d56780945,a4c25a6283b0ba511381a43ba880f8562c31861a,a4c25a6283b0ba511381a43ba880f8562c31861a..acf39852681832e2874962ab44ea577fd44f5b9b
@@@@@@@@ -4056,29 -4049,29 -4087,31 -4056,29 -4059,29 -4056,29 -4056,29 +4083,31 @@@@@@@@ void rcu_barrier(void
         */
        for_each_possible_cpu(cpu) {
                rdp = per_cpu_ptr(&rcu_data, cpu);
-- ----         if (cpu_is_offline(cpu) &&
-- ----             !rcu_rdp_is_offloaded(rdp))
++ ++++retry:
++ ++++         if (smp_load_acquire(&rdp->barrier_seq_snap) == gseq)
    +                   continue;
-- - --         if (rcu_segcblist_n_cbs(&rdp->cblist) && cpu_online(cpu)) {
-- - --                 rcu_barrier_trace(TPS("OnlineQ"), cpu,
-- - --                                   rcu_state.barrier_sequence);
-- - --                 smp_call_function_single(cpu, rcu_barrier_func, (void *)cpu, 1);
-- - --         } else if (rcu_segcblist_n_cbs(&rdp->cblist) &&
-- - --                    cpu_is_offline(cpu)) {
-- - --                 rcu_barrier_trace(TPS("OfflineNoCBQ"), cpu,
-- - --                                   rcu_state.barrier_sequence);
-- - --                 local_irq_disable();
-- - --                 rcu_barrier_func((void *)cpu);
-- - --                 local_irq_enable();
-- - --         } else if (cpu_is_offline(cpu)) {
-- - --                 rcu_barrier_trace(TPS("OfflineNoCBNoQ"), cpu,
-- - --                                   rcu_state.barrier_sequence);
-- - --         } else {
-- - --                 rcu_barrier_trace(TPS("OnlineNQ"), cpu,
-- - --                                   rcu_state.barrier_sequence);
++ ++++         raw_spin_lock_irqsave(&rcu_state.barrier_lock, flags);
++ ++++         if (!rcu_segcblist_n_cbs(&rdp->cblist)) {
++ ++++                 WRITE_ONCE(rdp->barrier_seq_snap, gseq);
++ ++++                 raw_spin_unlock_irqrestore(&rcu_state.barrier_lock, flags);
++ ++++                 rcu_barrier_trace(TPS("NQ"), cpu, rcu_state.barrier_sequence);
++ + ++                 continue;
    -           if (rcu_segcblist_n_cbs(&rdp->cblist) && cpu_online(cpu)) {
    -                   rcu_barrier_trace(TPS("OnlineQ"), cpu,
    -                                     rcu_state.barrier_sequence);
    -                   smp_call_function_single(cpu, rcu_barrier_func, (void *)cpu, 1);
    -           } else if (rcu_segcblist_n_cbs(&rdp->cblist) &&
    -                      cpu_is_offline(cpu)) {
    -                   rcu_barrier_trace(TPS("OfflineNoCBQ"), cpu,
    -                                     rcu_state.barrier_sequence);
    -                   local_irq_disable();
    -                   rcu_barrier_func((void *)cpu);
    -                   local_irq_enable();
    -           } else if (cpu_is_offline(cpu)) {
    -                   rcu_barrier_trace(TPS("OfflineNoCBNoQ"), cpu,
    -                                     rcu_state.barrier_sequence);
    -           } else {
    -                   rcu_barrier_trace(TPS("OnlineNQ"), cpu,
    -                                     rcu_state.barrier_sequence);
++ + ++         }
++ ++++         if (!rcu_rdp_cpu_online(rdp)) {
++ ++++                 rcu_barrier_entrain(rdp);
++ ++++                 WARN_ON_ONCE(READ_ONCE(rdp->barrier_seq_snap) != gseq);
++ ++++                 raw_spin_unlock_irqrestore(&rcu_state.barrier_lock, flags);
++ ++++                 rcu_barrier_trace(TPS("OfflineNoCBQ"), cpu, rcu_state.barrier_sequence);
++ ++++                 continue;
++ ++++         }
++ ++++         raw_spin_unlock_irqrestore(&rcu_state.barrier_lock, flags);
++ ++++         if (smp_call_function_single(cpu, rcu_barrier_handler, (void *)cpu, 1)) {
++ ++++                 schedule_timeout_uninterruptible(1);
++ ++++                 goto retry;
    +           }
++ ++++         WARN_ON_ONCE(READ_ONCE(rdp->barrier_seq_snap) != gseq);
++ ++++         rcu_barrier_trace(TPS("OnlineQ"), cpu, rcu_state.barrier_sequence);
        }
-- ---- cpus_read_unlock();
       
        /*
         * Now that we have an rcu_barrier_callback() callback on each
Simple merge
Simple merge
index c5b45c2f68a159574b63479ffd5adb8b936e9298,efd0c87d2ffae5ba409b2ac4a41c65988c890abe,d3db2168598ef74668f5e440540ce6833b2b58fc,c5b45c2f68a159574b63479ffd5adb8b936e9298,8167cab1bffc8487bcc57ee1ba3ce20fd05f6ab5,c5b45c2f68a159574b63479ffd5adb8b936e9298,c5b45c2f68a159574b63479ffd5adb8b936e9298..6082dd23408f858e35d54061039bb47996b70de1
@@@@@@@@ -1172,11 -1172,12 -1170,11 -1172,11 -1175,9 -1172,11 -1172,11 +1173,10 @@@@@@@@ static void rcu_spawn_one_boost_kthread
        struct sched_param sp;
        struct task_struct *t;
       
+ +++++ mutex_lock(&rnp->boost_kthread_mutex);
        if (rnp->boost_kthread_task || !rcu_scheduler_fully_active)
- -----         return;
- -- --
- -- -- rcu_state.boost = 1;
+ +++++         goto out;
       
 -      rcu_state.boost = 1;
 -     
        t = kthread_create(rcu_boost_kthread, (void *)rnp,
                           "rcub/%d", rnp_index);
        if (WARN_ON_ONCE(IS_ERR(t)))