Merge tag 'rcu.2021.11.01a' of git://git.kernel.org/pub/scm/linux/kernel/git/paulmck...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 2 Nov 2021 03:25:38 +0000 (20:25 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 2 Nov 2021 03:25:38 +0000 (20:25 -0700)
Pull RCU updates from Paul McKenney:

 - Miscellaneous fixes

 - Torture-test updates for smp_call_function(), most notably improved
   checking of module parameters.

 - Tasks-trace RCU updates that fix a number of rare but important
   race-condition bugs.

 - Other torture-test updates, most notably better checking of module
   parameters. In addition, rcutorture may once again be run on
   CONFIG_PREEMPT_RT kernels.

 - Torture-test scripting updates, most notably specifying the new
   CONFIG_KCSAN_STRICT kconfig option rather than maintaining an
   ever-changing list of individual KCSAN kconfig options.

* tag 'rcu.2021.11.01a' of git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu: (46 commits)
  rcu: Fix rcu_dynticks_curr_cpu_in_eqs() vs noinstr
  rcu: Always inline rcu_dynticks_task*_{enter,exit}()
  torture: Make kvm-remote.sh print size of downloaded tarball
  torture: Allot 1G of memory for scftorture runs
  tools/rcu: Add an extract-stall script
  scftorture: Warn on individual scf_torture_init() error conditions
  scftorture: Count reschedule IPIs
  scftorture: Account for weight_resched when checking for all zeroes
  scftorture: Shut down if nonsensical arguments given
  scftorture: Allow zero weight to exclude an smp_call_function*() category
  rcu: Avoid unneeded function call in rcu_read_unlock()
  rcu-tasks: Update comments to cond_resched_tasks_rcu_qs()
  rcu-tasks: Fix IPI failure handling in trc_wait_for_one_reader
  rcu-tasks: Fix read-side primitives comment for call_rcu_tasks_trace
  rcu-tasks: Clarify read side section info for rcu_tasks_rude GP primitives
  rcu-tasks: Correct comparisons for CPU numbers in show_stalled_task_trace
  rcu-tasks: Correct firstreport usage in check_all_holdout_tasks_trace
  rcu-tasks: Fix s/rcu_add_holdout/trc_add_holdout/ typo in comment
  rcu-tasks: Move RTGS_WAIT_CBS to beginning of rcu_tasks_kthread() loop
  rcu-tasks: Fix s/instruction/instructions/ typo in comment
  ...

1  2 
kernel/rcu/tasks.h
kernel/rcu/update.c

@@@ -928,10 -919,10 +919,10 @@@ reset_ipi
  }
  
  /* Callback function for scheduler to check locked-down task.  */
 -static bool trc_inspect_reader(struct task_struct *t, void *arg)
 +static int trc_inspect_reader(struct task_struct *t, void *arg)
  {
        int cpu = task_cpu(t);
-       bool in_qs = false;
+       int nesting;
        bool ofl = cpu_is_offline(cpu);
  
        if (task_curr(t)) {
                n_heavy_reader_updates++;
                if (ofl)
                        n_heavy_reader_ofl_updates++;
-               in_qs = true;
+               nesting = 0;
        } else {
                // The task is not running, so C-language access is safe.
-               in_qs = likely(!t->trc_reader_nesting);
+               nesting = t->trc_reader_nesting;
        }
  
-       // Mark as checked so that the grace-period kthread will
-       // remove it from the holdout list.
-       t->trc_reader_checked = true;
-       if (in_qs)
-               return 0;  // Already in quiescent state, done!!!
+       // If not exiting a read-side critical section, mark as checked
+       // so that the grace-period kthread will remove it from the
+       // holdout list.
+       t->trc_reader_checked = nesting >= 0;
+       if (nesting <= 0)
 -              return !nesting;  // If in QS, done, otherwise try again later.
++              return nesting ? -EINVAL : 0;  // If in QS, done, otherwise try again later.
  
        // The task is in a read-side critical section, so set up its
        // state so that it will awaken the grace-period kthread upon exit
Simple merge