Re: [GIT PULL rcu/next + tools/memory-model] RCU and LKMM commits for 5.4

From: Ingo Molnar
Date: Thu Aug 22 2019 - 14:54:38 EST



* Paul E. McKenney <paulmck@xxxxxxxxxxxxx> wrote:

> Hello, Ingo,
>
> This pull request contain the following changes:
>
> 1. A few more RCU flavor consolidation cleanups.
>
> https://lore.kernel.org/lkml/20190801223132.GA14044@xxxxxxxxxxxxx
>
> 2. Miscellaneous fixes.
>
> https://lore.kernel.org/lkml/20190801223708.GA14862@xxxxxxxxxxxxx
>
> In addition, this includes a spelling fix in a comment and
> an email-address change in MAINTAINERS:
>
> https://lore.kernel.org/lkml/1564386957-22833-1-git-send-email-mojha@xxxxxxxxxxxxxx
> https://lore.kernel.org/lkml/20190805121517.4734-1-parri.andrea@xxxxxxxxx/
>
> 3. Updates to RCU's list-traversal macros improving lockdep usability.
>
> https://lore.kernel.org/lkml/20190801224240.GA16092@xxxxxxxxxxxxx/
>
> 4. Torture-test updates.
>
> Fat fingered. :-/ Please let me know if you would prefer that
> I resend, then redo this full pull request next week.
>
> 5. Forward-progress improvements for no-CBs CPUs: Avoid ignoring
> incoming callbacks during grace-period waits.
>
> https://lore.kernel.org/lkml/20190801225009.GA17155@xxxxxxxxxxxxx/
>
> 6. Forward-progress improvements for no-CBs CPUs: Use ->cblist
> structure to take advantage of others' grace periods.
>
> https://lore.kernel.org/lkml/20190801230744.GA19115@xxxxxxxxxxxxx/
>
> Also added a small commit that avoids needlessly inflicting
> scheduler-clock ticks on callback-offloaded CPUs.
>
> 7. Forward-progress improvements for no-CBs CPUs: Reduce contention
> on ->nocb_lock guarding ->cblist.
>
> https://lore.kernel.org/lkml/20190801231619.GA22610@xxxxxxxxxxxxx/
>
> 8. Forward-progress improvements for no-CBs CPUs: Add ->nocb_bypass
> list to further reduce contention on ->nocb_lock guarding ->cblist.
>
> https://lore.kernel.org/lkml/20190802151435.GA1081@xxxxxxxxxxxxx/
>
> (But only patches 1-10, as patch 10 proved to be quite valuable,
> but patches 11-14 need more work and testing time.)
>
> 9. LKMM updates.
>
> https://lore.kernel.org/lkml/20190801222026.GA11315@xxxxxxxxxxxxx/
>
> (But only patches 1-3, as the remainder are either new or are
> related to ongoing work to verify LKMM against hardware memory
> models.)
>
> Please note that this series encountered a merge conflict in -next:
>
> https://lore.kernel.org/lkml/20190813155048.59dd9bdf@xxxxxxxxxxxxxxxx/
>
> Stephen's resolution looks good to me.
>
> All of these changes have been subjected to 0day Test Robot and -next
> testing, and are available in the Git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git for-mingo
>
> for you to fetch changes up to 07f038a408fb215fd656de78304b6ff4c7e4e490:
>
> Merge LKMM and RCU commits (2019-08-13 14:41:48 -0700)
>
> These changes do increase the size of the kernel by about 700 lines,
> mostly due to the no-CBs CPU forward-progress improvements. Given that
> RCU forward progress has started to become an issue over the past year
> or so, these changes do not appear to me to be in any way optional.
>
> ----------------------------------------------------------------
> Andrea Parri (2):
> tools/memory-model: Update the informal documentation
> MAINTAINERS: Update e-mail address for Andrea Parri
>
> Byungchul Park (1):
> rcu: Change return type of rcu_spawn_one_boost_kthread()
>
> Denis Efremov (1):
> torture: Remove exporting of internal functions
>
> Eric Dumazet (1):
> rcu: Allow rcu_do_batch() to dynamically adjust batch sizes
>
> Joel Fernandes (Google) (11):
> rcu: Simplify rcu_note_context_switch exit from critical section
> treewide: Rename rcu_dereference_raw_notrace() to _check()
> rcu: Remove redundant debug_locks check in rcu_read_lock_sched_held()
> rcuperf: Make rcuperf kernel test more robust for !expedited mode
> tools/memory-model: Use cumul-fence instead of fence in ->prop example
> rcu: Add support for consolidated-RCU reader checking
> rcu/sync: Remove custom check for RCU readers
> ipv4: Add lockdep condition to fix for_each_entry()
> driver/core: Convert to use built-in RCU list checking
> x86/pci: Pass lockdep condition to pcm_mmcfg_list iterator
> acpi: Use built-in RCU list checking for acpi_ioremaps list
>
> Mukesh Ojha (1):
> rcu: Fix spelling mistake "greate"->"great"
>
> Paul E. McKenney (67):
> tools/memory-model: Make scripts be executable
> rcu: Simplify rcu_read_unlock_special() deferred wakeups
> rcu: Make rcu_read_unlock_special() checks match raise_softirq_irqoff()
> lockdep: Make print_lock() address visible
> time/tick-broadcast: Fix tick_broadcast_offline() lockdep complaint
> rcu: Restore barrier() to rcu_read_lock() and rcu_read_unlock()
> rcu: Add kernel parameter to dump trace after RCU CPU stall warning
> rcu: Add destroy_work_on_stack() to match INIT_WORK_ONSTACK()
> srcu: Avoid srcutorture security-based pointer obfuscation
> doc: Add rcutree.kthread_prio pointer to stallwarn.txt
> torture: Expand last_ts variable in kvm-test-1-run.sh
> rcutorture: Test TREE03 with the threadirqs kernel boot parameter
> rcutorture: Emulate userspace sojourn during call_rcu() floods
> rcutorture: Aggressive forward-progress tests shouldn't block shutdown
> rcu: Remove redundant "if" condition from rcu_gp_is_expedited()
> arm: Use common outgoing-CPU-notification code
> Merge branches 'consolidate.2019.08.01b', 'fixes.2019.08.12a', 'lists.2019.08.13a' and 'torture.2019.08.01b' into HEAD
> rcu/nocb: Rename rcu_data fields to prepare for forward-progress work
> rcu/nocb: Update comments to prepare for forward-progress work
> rcu/nocb: Provide separate no-CBs grace-period kthreads
> rcu/nocb: Rename nocb_follower_wait() to nocb_cb_wait()
> rcu/nocb: Rename wake_nocb_leader() to wake_nocb_gp()
> rcu/nocb: Rename __wake_nocb_leader() to __wake_nocb_gp()
> rcu/nocb: Rename wake_nocb_leader_defer() to wake_nocb_gp_defer()
> rcu/nocb: Rename rcu_organize_nocb_kthreads() local variable
> rcu/nocb: Rename and document no-CB CB kthread sleep trace event
> rcu/nocb: Rename rcu_nocb_leader_stride kernel boot parameter
> rcu/nocb: Print gp/cb kthread hierarchy if dump_tree
> rcu/nocb: Use separate flag to indicate disabled ->cblist
> rcu/nocb: Use separate flag to indicate offloaded ->cblist
> rcu/nocb: Add checks for offloaded callback processing
> rcu/nocb: Make rcutree_migrate_callbacks() start at leaf rcu_node structure
> rcu/nocb: Check for deferred nocb wakeups before nohz_full early exit
> rcu/nocb: Remove deferred wakeup checks for extended quiescent states
> rcu/nocb: Allow lockless use of rcu_segcblist_restempty()
> rcu/nocb: Allow lockless use of rcu_segcblist_empty()
> rcu/nocb: Leave ->cblist enabled for no-CBs CPUs
> rcu/nocb: Use rcu_segcblist for no-CBs CPUs
> rcu/nocb: Remove obsolete nocb_head and nocb_tail fields
> rcu/nocb: Remove obsolete nocb_q_count and nocb_q_count_lazy fields
> rcu/nocb: Remove obsolete nocb_cb_tail and nocb_cb_head fields
> rcu/nocb: Remove obsolete nocb_gp_head and nocb_gp_tail fields
> rcu/nocb: Use build-time no-CBs check in rcu_do_batch()
> rcu/nocb: Use build-time no-CBs check in rcu_core()
> rcu/nocb: Use build-time no-CBs check in rcu_pending()
> rcu/nocb: Suppress uninitialized false-positive in nocb_gp_wait()
> rcu/nohz: Turn off tick for offloaded CPUs
> rcu/nocb: Enable re-awakening under high callback load
> rcu/nocb: Never downgrade ->nocb_defer_wakeup in wake_nocb_gp_defer()
> rcu/nocb: Make __call_rcu_nocb_wake() safe for many callbacks
> rcu/nocb: Avoid needless wakeups of no-CBs grace-period kthread
> rcu/nocb: Avoid ->nocb_lock capture by corresponding CPU
> rcu/nocb: Round down for number of no-CBs grace-period kthreads
> rcu/nocb: Reduce contention at no-CBs registry-time CB advancement
> rcu/nocb: Reduce contention at no-CBs invocation-done time
> rcu/nocb: Reduce ->nocb_lock contention with separate ->nocb_gp_lock
> rcu/nocb: Unconditionally advance and wake for excessive CBs
> rcu/nocb: Atomic ->len field in rcu_segcblist structure
> rcu/nocb: Add bypass callback queueing
> rcu/nocb: EXP Check use and usefulness of ->nocb_lock_contended
> rcu/nocb: Print no-CBs diagnostics when rcutorture writer unduly delayed
> rcu/nocb: Avoid synchronous wakeup in __call_rcu_nocb_wake()
> rcu/nocb: Advance CBs after merge in rcutree_migrate_callbacks()
> rcu/nocb: Reduce nocb_cb_wait() leaf rcu_node ->lock contention
> rcu/nocb: Reduce __call_rcu_nocb_wake() leaf rcu_node ->lock contention
> rcu/nocb: Don't wake no-CBs GP kthread if timer posted under overload
> Merge LKMM and RCU commits
>
> Peter Zijlstra (1):
> idle: Prevent late-arriving interrupts from disrupting offline
>
> Xiao Yang (1):
> rcuperf: Fix perf_type module-parameter description
>
> .../RCU/Design/Requirements/Requirements.html | 73 +-
> Documentation/RCU/stallwarn.txt | 6 +
> Documentation/admin-guide/kernel-parameters.txt | 17 +-
> MAINTAINERS | 2 +-
> arch/arm/kernel/smp.c | 6 +-
> arch/powerpc/include/asm/kvm_book3s_64.h | 2 +-
> arch/x86/pci/mmconfig-shared.c | 5 +-
> drivers/acpi/osl.c | 6 +-
> drivers/base/base.h | 1 +
> drivers/base/core.c | 12 +
> drivers/base/power/runtime.c | 15 +-
> include/linux/rcu_segcblist.h | 9 +
> include/linux/rcu_sync.h | 4 +-
> include/linux/rculist.h | 36 +-
> include/linux/rcupdate.h | 9 +-
> include/trace/events/rcu.h | 4 +-
> kernel/locking/lockdep.c | 2 +-
> kernel/rcu/Kconfig.debug | 11 +
> kernel/rcu/rcu.h | 1 +
> kernel/rcu/rcu_segcblist.c | 174 ++-
> kernel/rcu/rcu_segcblist.h | 54 +-
> kernel/rcu/rcuperf.c | 10 +-
> kernel/rcu/rcutorture.c | 30 +-
> kernel/rcu/srcutree.c | 5 +-
> kernel/rcu/tree.c | 205 ++--
> kernel/rcu/tree.h | 81 +-
> kernel/rcu/tree_exp.h | 8 +-
> kernel/rcu/tree_plugin.h | 1195 ++++++++++++--------
> kernel/rcu/tree_stall.h | 9 +
> kernel/rcu/update.c | 105 +-
> kernel/sched/core.c | 57 +-
> kernel/sched/idle.c | 5 +-
> kernel/torture.c | 2 -
> kernel/trace/ftrace_internal.h | 8 +-
> kernel/trace/trace.c | 4 +-
> net/ipv4/fib_frontend.c | 3 +-
> tools/memory-model/Documentation/explanation.txt | 53 +-
> tools/memory-model/README | 18 +-
> tools/memory-model/scripts/checkghlitmus.sh | 0
> tools/memory-model/scripts/checklitmushist.sh | 0
> tools/memory-model/scripts/cmplitmushist.sh | 0
> tools/memory-model/scripts/initlitmushist.sh | 0
> tools/memory-model/scripts/judgelitmus.sh | 0
> tools/memory-model/scripts/newlitmushist.sh | 0
> tools/memory-model/scripts/parseargs.sh | 0
> tools/memory-model/scripts/runlitmushist.sh | 0
> .../selftests/rcutorture/bin/kvm-test-1-run.sh | 2 +-
> .../selftests/rcutorture/configs/rcu/TREE03.boot | 1 +
> 48 files changed, 1472 insertions(+), 778 deletions(-)
> mode change 100644 => 100755 tools/memory-model/scripts/checkghlitmus.sh
> mode change 100644 => 100755 tools/memory-model/scripts/checklitmushist.sh
> mode change 100644 => 100755 tools/memory-model/scripts/cmplitmushist.sh
> mode change 100644 => 100755 tools/memory-model/scripts/initlitmushist.sh
> mode change 100644 => 100755 tools/memory-model/scripts/judgelitmus.sh
> mode change 100644 => 100755 tools/memory-model/scripts/newlitmushist.sh
> mode change 100644 => 100755 tools/memory-model/scripts/parseargs.sh
> mode change 100644 => 100755 tools/memory-model/scripts/runlitmushist.sh

Pulled into tip:core/rcu, thanks a lot Paul!

The merge commit is a bit non-standard:

07f038a408fb: Merge LKMM and RCU commits

but clear enough IMHO. Usually we try to keep this format:

6c06b66e957c: Merge branch 'X' into Y

even for internal merge commits.

Thanks,

Ingo