Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1664249 > unrolled thread

[GIT PULL rcu/next] RCU commits for 4.13

Started by"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
First post2017-06-12 23:40 +0200
Last post2017-06-19 18:30 +0200
Articles 7 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [GIT PULL rcu/next] RCU commits for 4.13 "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> - 2017-06-12 23:40 +0200
    Re: [GIT PULL rcu/next] RCU commits for 4.13 Ingo Molnar <mingo@kernel.org> - 2017-06-13 08:50 +0200
    Re: [GIT PULL rcu/next] RCU commits for 4.13 Andrea Parri <parri.andrea@gmail.com> - 2017-06-14 05:00 +0200
      Re: [GIT PULL rcu/next] RCU commits for 4.13 "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> - 2017-06-14 06:40 +0200
        Re: [GIT PULL rcu/next] RCU commits for 4.13 Andrea Parri <parri.andrea@gmail.com> - 2017-06-14 16:40 +0200
          Re: [GIT PULL rcu/next] RCU commits for 4.13 "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> - 2017-06-14 22:30 +0200
            Re: [GIT PULL rcu/next] RCU commits for 4.13 Andrea Parri <parri.andrea@gmail.com> - 2017-06-19 18:30 +0200

#1664249 — [GIT PULL rcu/next] RCU commits for 4.13

From"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Date2017-06-12 23:40 +0200
Subject[GIT PULL rcu/next] RCU commits for 4.13
Message-ID<tRFe1-7zG-5@gated-at.bofh.it>
Hello, Ingo,

This pull request is unusual in being a single linear set of commits,
as opposed to my usual topic branches.  This is due to the many
large-footprint changes, which means that reasonable topic branches
result in large numbers of merge conflicts.  In addition, some commits
depend on other commits that should be on different topic branches.
I will return to the topic-branch style next time.

The largest feature of this series is shrinking and simplification,
with the following diffstat summary:

 79 files changed, 1496 insertions(+), 4211 deletions(-)

In other words, this series represents a net reduction of more than 2700
lines of code.

These commits were posted to LKML:

	http://lkml.kernel.org/r/20170525215934.GA11578@linux.vnet.ibm.com

Two of these commits (46/88 and 48/88) have been deferred, most likely
to v4.14.  All of the remaining commits have been subjected to the 0day
Test Robot and -next testing, and are availiable in teh 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 6d48152eafde1f0d0a4a9e0584fa7d9ff4fbfdac:

  rcu: Remove RCU CPU stall warnings from Tiny RCU (2017-06-08 18:52:45 -0700)

----------------------------------------------------------------
Arnd Bergmann (1):
      bcm47xx: Fix build regression

Paul E. McKenney (83):
      rcutorture: Add lockdep to one of the SRCU scenarios
      rcutorture: Add three-level tree test for Tree SRCU
      rcutorture: Fix bug in reporting Kconfig mis-settings
      rcutorture: Add a scenario for Tiny SRCU
      rcutorture: Add a scenario for Classic SRCU
      rcu: Prevent rcu_barrier() from starting needless grace periods
      rcutorture: Correctly handle CONFIG_RCU_TORTURE_TEST_* options
      rcutorture: Update test scenarios based on new Kconfig dependencies
      srcu: Eliminate possibility of destructive counter overflow
      rcu: Complain if blocking in preemptible RCU read-side critical section
      rcuperf: Defer expedited/normal check to end of test
      rcuperf: Remove conflicting Kconfig options
      rcu: Remove obsolete reference to synchronize_kernel()
      rcuperf: Add ability to performance-test call_rcu() and friends
      rcuperf: Add a Kconfig-fragment file for Classic SRCU
      rcu: Make sync_rcu_preempt_exp_done() return bool
      checkpatch: Remove checks for expedited grace periods
      rcuperf: Add test for dynamically initialized srcu_struct
      doc/atomic_ops: Clarify smp_mb__{before,after}_atomic()
      atomics: Add header comment so spin_unlock_wait()
      rcuperf: Add the ability to test tiny RCU flavors
      srcu: Make Classic and Tree SRCU announce themselves at bootup
      rcutorture: Reduce CPUs dedicated to testing Classic SRCU
      srcu: Shrink Tiny SRCU a bit more
      rcuperf: Set more user-friendly defaults
      rcuperf: Add writer_holdoff boot parameter
      rcutorture: Add "git diff" output to testid.txt file
      srcu: Document auto-expediting requirement
      doc: Take tail recursion into account in RCU requirements
      rcu: Add preemptibility checks in rcu_sched_qs() and rcu_bh_qs()
      rcu: Print out rcupdate.c non-default boot-time settings
      rcu: Update rcu_bootup_announce_oddness()
      srcu: Make exp_holdoff module parameter be static
      srcu: Print non-default exp_holdoff values at boot time
      rcu: Add lockdep_assert_held() teeth to tree.c
      rcu: Add lockdep_assert_held() teeth to tree_plugin.h
      srcu: Make SRCU be once again optional
      srcu: Shrink Tiny SRCU a bit
      srcu: Add DEBUG_OBJECTS_RCU_HEAD functionality
      rcu: Make synchronize_rcu_mult() check for duplicates
      sched: Rely on synchronize_rcu_mult() de-duplication
      rcu: Use RCU_NOCB_WAKE rather than RCU_NOGP_WAKE
      rcu: Add memory barriers for NOCB leader wakeup
      rcu: Flag need for rcu_node_tree.h and rcu_segcblist.h visibility
      rcu: Move docbook comments out of rcupdate.h
      rcu: Move rcu_expedited and rcu_normal externs from rcupdate.h
      rcu: Move expediting-related access/control out of rcupdate.h
      rcu: Move torture-related definitions from rcupdate.h to rcu.h
      rcu: Remove UINT_CMP_GE() and UINT_CMP_LT()
      rcu: Move rcupdate.h to new empty-function style
      rcu: Eliminate the unused __rcu_is_watching() function
      rcu: Move the RCU_SCHEDULER_ definitions from rcupdate.h
      rcu: Remove linux/debugobjects.h from rcupdate.h
      rcu: Improve __call_rcu() debug-objects error message
      rcu: Move rcu_is_nocb_cpu() from rcupdate.h to rcu.h
      rcu: Move rcu_ftrace_dump() from rcupdate.h to rcu.h
      rcu: move rcupdate.h to the new true/false-function style
      rcu: Move torture-related functions out of rcutiny.h and rcutree.h
      rcu: Move rcu_request_urgent_qs_task() out of rcutiny.h and rcutree.h
      rcu: Move rcutiny.h to new empty/true/false-function style
      srcu: Prevent sdp->srcu_gp_seq_needed counter wrap
      srcu: Shrink srcu.h by moving docbook and private function
      srcu: Apply trivial callback lists to shrink Tiny SRCU
      lockdep: Use consistent printing primitives
      rcu: Refactor #includes from include/linux/rcupdate.h
      rcu: Convert rnp->lock wrappers to macros for SRCU use
      rcu: Move rnp->lock wrappers for SRCU use
      srcu: Use rnp->lock wrappers to replace explicit memory barriers
      rcu: Remove *_SLOW_* Kconfig options
      rcu: Remove the RCU_KTHREAD_PRIO Kconfig option
      rcu: Remove nohz_full full-system-idle state machine
      rcu: Remove #ifdef moving rcu_end_inkernel_boot from rcupdate.h
      rcu: Remove typecheck() from RCU locking wrapper functions
      rcu: Remove the now-obsolete PROVE_RCU_REPEATEDLY Kconfig option
      rcu: Remove SPARSE_RCU_POINTER Kconfig option
      srcu: Fix rcutorture-statistics typo
      srcu: Remove Classic SRCU
      rcu: Remove debugfs tracing
      rcu: Eliminate NOCBs CPU-state Kconfig options
      rcu: Move RCU non-debug Kconfig options to kernel/rcu
      rcu: Move RCU debug Kconfig options to kernel/rcu
      rcu: Remove event tracing from Tiny RCU
      rcu: Remove RCU CPU stall warnings from Tiny RCU

Priyalee Kushwaha (1):
      srcu-cbmc: Use /usr/bin/awk instead of /bin/awk

Stan Drozd (1):
      docs: Fix typo in Documentation/memory-barriers.txt

 Documentation/RCU/00-INDEX                         |   2 -
 .../RCU/Design/Requirements/Requirements.html      |  34 +-
 Documentation/RCU/checklist.txt                    |   8 +-
 Documentation/RCU/trace.txt                        | 535 -----------------
 Documentation/admin-guide/kernel-parameters.txt    |  41 +-
 Documentation/core-api/atomic_ops.rst              |   5 +
 Documentation/dev-tools/sparse.rst                 |   6 -
 Documentation/kernel-per-CPU-kthreads.txt          |  31 +-
 Documentation/memory-barriers.txt                  |   2 +-
 Documentation/timers/NO_HZ.txt                     |  29 +-
 include/linux/bcm47xx_nvram.h                      |   1 +
 include/linux/compiler.h                           |   4 -
 include/linux/rcu_node_tree.h                      |   4 +
 include/linux/rcu_segcblist.h                      |   4 +
 include/linux/rcupdate.h                           | 318 +---------
 include/linux/rcutiny.h                            | 167 +-----
 include/linux/rcutree.h                            |  21 +-
 include/linux/spinlock.h                           |  20 +
 include/linux/srcu.h                               |  25 +-
 include/linux/srcuclassic.h                        | 115 ----
 include/linux/srcutiny.h                           |  47 +-
 include/linux/srcutree.h                           |  13 +-
 include/trace/events/rcu.h                         |   1 +
 init/Kconfig                                       | 349 +----------
 kernel/locking/lockdep.c                           | 176 +++---
 kernel/rcu/Kconfig                                 | 242 ++++++++
 kernel/rcu/Kconfig.debug                           |  82 +++
 kernel/rcu/Makefile                                |   2 -
 kernel/rcu/rcu.h                                   | 277 +++++++++
 kernel/rcu/rcuperf.c                               | 129 +++-
 kernel/rcu/rcutorture.c                            |  21 +-
 kernel/rcu/srcu.c                                  | 661 ---------------------
 kernel/rcu/srcutiny.c                              |  86 +--
 kernel/rcu/srcutree.c                              | 187 ++++--
 kernel/rcu/tiny.c                                  |  54 +-
 kernel/rcu/tiny_plugin.h                           | 123 ----
 kernel/rcu/tree.c                                  | 195 +++---
 kernel/rcu/tree.h                                  | 109 +---
 kernel/rcu/tree_exp.h                              |   2 +-
 kernel/rcu/tree_plugin.h                           | 573 +++---------------
 kernel/rcu/tree_trace.c                            | 494 ---------------
 kernel/rcu/update.c                                |  77 ++-
 kernel/sched/core.c                                |   8 +-
 kernel/time/Kconfig                                |  50 --
 lib/Kconfig.debug                                  | 184 +-----
 lib/Makefile                                       |   3 -
 scripts/checkpatch.pl                              |  17 -
 .../selftests/rcutorture/bin/configcheck.sh        |   2 +-
 .../testing/selftests/rcutorture/bin/kvm-build.sh  |   2 +-
 tools/testing/selftests/rcutorture/bin/kvm.sh      |   5 +-
 .../selftests/rcutorture/configs/rcu/CFLIST        |   2 +
 .../selftests/rcutorture/configs/rcu/SRCU-C.boot   |   1 +
 .../selftests/rcutorture/configs/rcu/SRCU-N        |   2 +-
 .../selftests/rcutorture/configs/rcu/SRCU-P        |   6 +-
 .../selftests/rcutorture/configs/rcu/SRCU-t        |  10 +
 .../selftests/rcutorture/configs/rcu/SRCU-t.boot   |   1 +
 .../selftests/rcutorture/configs/rcu/SRCU-u        |   9 +
 .../selftests/rcutorture/configs/rcu/SRCU-u.boot   |   1 +
 .../selftests/rcutorture/configs/rcu/TINY02        |   5 +-
 .../selftests/rcutorture/configs/rcu/TREE01        |   5 +-
 .../selftests/rcutorture/configs/rcu/TREE01.boot   |   4 +
 .../selftests/rcutorture/configs/rcu/TREE02        |   5 +-
 .../selftests/rcutorture/configs/rcu/TREE03        |   4 -
 .../selftests/rcutorture/configs/rcu/TREE03.boot   |   4 +
 .../selftests/rcutorture/configs/rcu/TREE04        |   4 -
 .../selftests/rcutorture/configs/rcu/TREE05        |   4 -
 .../selftests/rcutorture/configs/rcu/TREE05.boot   |   3 +
 .../selftests/rcutorture/configs/rcu/TREE06        |   4 +-
 .../selftests/rcutorture/configs/rcu/TREE06.boot   |   3 +
 .../selftests/rcutorture/configs/rcu/TREE07        |   6 -
 .../selftests/rcutorture/configs/rcu/TREE08        |   1 -
 .../selftests/rcutorture/configs/rcu/TREE08-T      |  21 -
 .../selftests/rcutorture/configs/rcu/TREE08.boot   |   1 +
 .../configs/{rcu/TREE02-T => rcuperf/TINY}         |  19 +-
 .../selftests/rcutorture/configs/rcuperf/TREE      |   1 -
 .../selftests/rcutorture/configs/rcuperf/TREE54    |   1 -
 .../testing/selftests/rcutorture/doc/TINY_RCU.txt  |   1 -
 .../selftests/rcutorture/doc/TREE_RCU-kconfig.txt  |  34 +-
 .../rcutorture/formal/srcu-cbmc/modify_srcu.awk    |   2 +-
 79 files changed, 1496 insertions(+), 4211 deletions(-)
 delete mode 100644 Documentation/RCU/trace.txt
 delete mode 100644 include/linux/srcuclassic.h
 create mode 100644 kernel/rcu/Kconfig
 create mode 100644 kernel/rcu/Kconfig.debug
 delete mode 100644 kernel/rcu/srcu.c
 delete mode 100644 kernel/rcu/tree_trace.c
 create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/SRCU-C.boot
 create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/SRCU-t
 create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/SRCU-t.boot
 create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/SRCU-u
 create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/SRCU-u.boot
 delete mode 100644 tools/testing/selftests/rcutorture/configs/rcu/TREE08-T
 rename tools/testing/selftests/rcutorture/configs/{rcu/TREE02-T => rcuperf/TINY} (50%)

[toc] | [next] | [standalone]


#1664502

FromIngo Molnar <mingo@kernel.org>
Date2017-06-13 08:50 +0200
Message-ID<tRNOi-4yK-7@gated-at.bofh.it>
In reply to#1664249
* Paul E. McKenney <paulmck@linux.vnet.ibm.com> wrote:

> Hello, Ingo,
> 
> This pull request is unusual in being a single linear set of commits,
> as opposed to my usual topic branches.  This is due to the many
> large-footprint changes, which means that reasonable topic branches
> result in large numbers of merge conflicts.  In addition, some commits
> depend on other commits that should be on different topic branches.
> I will return to the topic-branch style next time.
> 
> The largest feature of this series is shrinking and simplification,
> with the following diffstat summary:
> 
>  79 files changed, 1496 insertions(+), 4211 deletions(-)
> 
> In other words, this series represents a net reduction of more than 2700
> lines of code.
> 
> These commits were posted to LKML:
> 
> 	http://lkml.kernel.org/r/20170525215934.GA11578@linux.vnet.ibm.com
> 
> Two of these commits (46/88 and 48/88) have been deferred, most likely
> to v4.14.  All of the remaining commits have been subjected to the 0day
> Test Robot and -next testing, and are availiable in teh 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 6d48152eafde1f0d0a4a9e0584fa7d9ff4fbfdac:
> 
>   rcu: Remove RCU CPU stall warnings from Tiny RCU (2017-06-08 18:52:45 -0700)
> 
> ----------------------------------------------------------------
> Arnd Bergmann (1):
>       bcm47xx: Fix build regression
> 
> Paul E. McKenney (83):
>       rcutorture: Add lockdep to one of the SRCU scenarios
>       rcutorture: Add three-level tree test for Tree SRCU
>       rcutorture: Fix bug in reporting Kconfig mis-settings
>       rcutorture: Add a scenario for Tiny SRCU
>       rcutorture: Add a scenario for Classic SRCU
>       rcu: Prevent rcu_barrier() from starting needless grace periods
>       rcutorture: Correctly handle CONFIG_RCU_TORTURE_TEST_* options
>       rcutorture: Update test scenarios based on new Kconfig dependencies
>       srcu: Eliminate possibility of destructive counter overflow
>       rcu: Complain if blocking in preemptible RCU read-side critical section
>       rcuperf: Defer expedited/normal check to end of test
>       rcuperf: Remove conflicting Kconfig options
>       rcu: Remove obsolete reference to synchronize_kernel()
>       rcuperf: Add ability to performance-test call_rcu() and friends
>       rcuperf: Add a Kconfig-fragment file for Classic SRCU
>       rcu: Make sync_rcu_preempt_exp_done() return bool
>       checkpatch: Remove checks for expedited grace periods
>       rcuperf: Add test for dynamically initialized srcu_struct
>       doc/atomic_ops: Clarify smp_mb__{before,after}_atomic()
>       atomics: Add header comment so spin_unlock_wait()
>       rcuperf: Add the ability to test tiny RCU flavors
>       srcu: Make Classic and Tree SRCU announce themselves at bootup
>       rcutorture: Reduce CPUs dedicated to testing Classic SRCU
>       srcu: Shrink Tiny SRCU a bit more
>       rcuperf: Set more user-friendly defaults
>       rcuperf: Add writer_holdoff boot parameter
>       rcutorture: Add "git diff" output to testid.txt file
>       srcu: Document auto-expediting requirement
>       doc: Take tail recursion into account in RCU requirements
>       rcu: Add preemptibility checks in rcu_sched_qs() and rcu_bh_qs()
>       rcu: Print out rcupdate.c non-default boot-time settings
>       rcu: Update rcu_bootup_announce_oddness()
>       srcu: Make exp_holdoff module parameter be static
>       srcu: Print non-default exp_holdoff values at boot time
>       rcu: Add lockdep_assert_held() teeth to tree.c
>       rcu: Add lockdep_assert_held() teeth to tree_plugin.h
>       srcu: Make SRCU be once again optional
>       srcu: Shrink Tiny SRCU a bit
>       srcu: Add DEBUG_OBJECTS_RCU_HEAD functionality
>       rcu: Make synchronize_rcu_mult() check for duplicates
>       sched: Rely on synchronize_rcu_mult() de-duplication
>       rcu: Use RCU_NOCB_WAKE rather than RCU_NOGP_WAKE
>       rcu: Add memory barriers for NOCB leader wakeup
>       rcu: Flag need for rcu_node_tree.h and rcu_segcblist.h visibility
>       rcu: Move docbook comments out of rcupdate.h
>       rcu: Move rcu_expedited and rcu_normal externs from rcupdate.h
>       rcu: Move expediting-related access/control out of rcupdate.h
>       rcu: Move torture-related definitions from rcupdate.h to rcu.h
>       rcu: Remove UINT_CMP_GE() and UINT_CMP_LT()
>       rcu: Move rcupdate.h to new empty-function style
>       rcu: Eliminate the unused __rcu_is_watching() function
>       rcu: Move the RCU_SCHEDULER_ definitions from rcupdate.h
>       rcu: Remove linux/debugobjects.h from rcupdate.h
>       rcu: Improve __call_rcu() debug-objects error message
>       rcu: Move rcu_is_nocb_cpu() from rcupdate.h to rcu.h
>       rcu: Move rcu_ftrace_dump() from rcupdate.h to rcu.h
>       rcu: move rcupdate.h to the new true/false-function style
>       rcu: Move torture-related functions out of rcutiny.h and rcutree.h
>       rcu: Move rcu_request_urgent_qs_task() out of rcutiny.h and rcutree.h
>       rcu: Move rcutiny.h to new empty/true/false-function style
>       srcu: Prevent sdp->srcu_gp_seq_needed counter wrap
>       srcu: Shrink srcu.h by moving docbook and private function
>       srcu: Apply trivial callback lists to shrink Tiny SRCU
>       lockdep: Use consistent printing primitives
>       rcu: Refactor #includes from include/linux/rcupdate.h
>       rcu: Convert rnp->lock wrappers to macros for SRCU use
>       rcu: Move rnp->lock wrappers for SRCU use
>       srcu: Use rnp->lock wrappers to replace explicit memory barriers
>       rcu: Remove *_SLOW_* Kconfig options
>       rcu: Remove the RCU_KTHREAD_PRIO Kconfig option
>       rcu: Remove nohz_full full-system-idle state machine
>       rcu: Remove #ifdef moving rcu_end_inkernel_boot from rcupdate.h
>       rcu: Remove typecheck() from RCU locking wrapper functions
>       rcu: Remove the now-obsolete PROVE_RCU_REPEATEDLY Kconfig option
>       rcu: Remove SPARSE_RCU_POINTER Kconfig option
>       srcu: Fix rcutorture-statistics typo
>       srcu: Remove Classic SRCU
>       rcu: Remove debugfs tracing
>       rcu: Eliminate NOCBs CPU-state Kconfig options
>       rcu: Move RCU non-debug Kconfig options to kernel/rcu
>       rcu: Move RCU debug Kconfig options to kernel/rcu
>       rcu: Remove event tracing from Tiny RCU
>       rcu: Remove RCU CPU stall warnings from Tiny RCU
> 
> Priyalee Kushwaha (1):
>       srcu-cbmc: Use /usr/bin/awk instead of /bin/awk
> 
> Stan Drozd (1):
>       docs: Fix typo in Documentation/memory-barriers.txt
> 
>  Documentation/RCU/00-INDEX                         |   2 -
>  .../RCU/Design/Requirements/Requirements.html      |  34 +-
>  Documentation/RCU/checklist.txt                    |   8 +-
>  Documentation/RCU/trace.txt                        | 535 -----------------
>  Documentation/admin-guide/kernel-parameters.txt    |  41 +-
>  Documentation/core-api/atomic_ops.rst              |   5 +
>  Documentation/dev-tools/sparse.rst                 |   6 -
>  Documentation/kernel-per-CPU-kthreads.txt          |  31 +-
>  Documentation/memory-barriers.txt                  |   2 +-
>  Documentation/timers/NO_HZ.txt                     |  29 +-
>  include/linux/bcm47xx_nvram.h                      |   1 +
>  include/linux/compiler.h                           |   4 -
>  include/linux/rcu_node_tree.h                      |   4 +
>  include/linux/rcu_segcblist.h                      |   4 +
>  include/linux/rcupdate.h                           | 318 +---------
>  include/linux/rcutiny.h                            | 167 +-----
>  include/linux/rcutree.h                            |  21 +-
>  include/linux/spinlock.h                           |  20 +
>  include/linux/srcu.h                               |  25 +-
>  include/linux/srcuclassic.h                        | 115 ----
>  include/linux/srcutiny.h                           |  47 +-
>  include/linux/srcutree.h                           |  13 +-
>  include/trace/events/rcu.h                         |   1 +
>  init/Kconfig                                       | 349 +----------
>  kernel/locking/lockdep.c                           | 176 +++---
>  kernel/rcu/Kconfig                                 | 242 ++++++++
>  kernel/rcu/Kconfig.debug                           |  82 +++
>  kernel/rcu/Makefile                                |   2 -
>  kernel/rcu/rcu.h                                   | 277 +++++++++
>  kernel/rcu/rcuperf.c                               | 129 +++-
>  kernel/rcu/rcutorture.c                            |  21 +-
>  kernel/rcu/srcu.c                                  | 661 ---------------------
>  kernel/rcu/srcutiny.c                              |  86 +--
>  kernel/rcu/srcutree.c                              | 187 ++++--
>  kernel/rcu/tiny.c                                  |  54 +-
>  kernel/rcu/tiny_plugin.h                           | 123 ----
>  kernel/rcu/tree.c                                  | 195 +++---
>  kernel/rcu/tree.h                                  | 109 +---
>  kernel/rcu/tree_exp.h                              |   2 +-
>  kernel/rcu/tree_plugin.h                           | 573 +++---------------
>  kernel/rcu/tree_trace.c                            | 494 ---------------
>  kernel/rcu/update.c                                |  77 ++-
>  kernel/sched/core.c                                |   8 +-
>  kernel/time/Kconfig                                |  50 --
>  lib/Kconfig.debug                                  | 184 +-----
>  lib/Makefile                                       |   3 -
>  scripts/checkpatch.pl                              |  17 -
>  .../selftests/rcutorture/bin/configcheck.sh        |   2 +-
>  .../testing/selftests/rcutorture/bin/kvm-build.sh  |   2 +-
>  tools/testing/selftests/rcutorture/bin/kvm.sh      |   5 +-
>  .../selftests/rcutorture/configs/rcu/CFLIST        |   2 +
>  .../selftests/rcutorture/configs/rcu/SRCU-C.boot   |   1 +
>  .../selftests/rcutorture/configs/rcu/SRCU-N        |   2 +-
>  .../selftests/rcutorture/configs/rcu/SRCU-P        |   6 +-
>  .../selftests/rcutorture/configs/rcu/SRCU-t        |  10 +
>  .../selftests/rcutorture/configs/rcu/SRCU-t.boot   |   1 +
>  .../selftests/rcutorture/configs/rcu/SRCU-u        |   9 +
>  .../selftests/rcutorture/configs/rcu/SRCU-u.boot   |   1 +
>  .../selftests/rcutorture/configs/rcu/TINY02        |   5 +-
>  .../selftests/rcutorture/configs/rcu/TREE01        |   5 +-
>  .../selftests/rcutorture/configs/rcu/TREE01.boot   |   4 +
>  .../selftests/rcutorture/configs/rcu/TREE02        |   5 +-
>  .../selftests/rcutorture/configs/rcu/TREE03        |   4 -
>  .../selftests/rcutorture/configs/rcu/TREE03.boot   |   4 +
>  .../selftests/rcutorture/configs/rcu/TREE04        |   4 -
>  .../selftests/rcutorture/configs/rcu/TREE05        |   4 -
>  .../selftests/rcutorture/configs/rcu/TREE05.boot   |   3 +
>  .../selftests/rcutorture/configs/rcu/TREE06        |   4 +-
>  .../selftests/rcutorture/configs/rcu/TREE06.boot   |   3 +
>  .../selftests/rcutorture/configs/rcu/TREE07        |   6 -
>  .../selftests/rcutorture/configs/rcu/TREE08        |   1 -
>  .../selftests/rcutorture/configs/rcu/TREE08-T      |  21 -
>  .../selftests/rcutorture/configs/rcu/TREE08.boot   |   1 +
>  .../configs/{rcu/TREE02-T => rcuperf/TINY}         |  19 +-
>  .../selftests/rcutorture/configs/rcuperf/TREE      |   1 -
>  .../selftests/rcutorture/configs/rcuperf/TREE54    |   1 -
>  .../testing/selftests/rcutorture/doc/TINY_RCU.txt  |   1 -
>  .../selftests/rcutorture/doc/TREE_RCU-kconfig.txt  |  34 +-
>  .../rcutorture/formal/srcu-cbmc/modify_srcu.awk    |   2 +-
>  79 files changed, 1496 insertions(+), 4211 deletions(-)
>  delete mode 100644 Documentation/RCU/trace.txt
>  delete mode 100644 include/linux/srcuclassic.h
>  create mode 100644 kernel/rcu/Kconfig
>  create mode 100644 kernel/rcu/Kconfig.debug
>  delete mode 100644 kernel/rcu/srcu.c
>  delete mode 100644 kernel/rcu/tree_trace.c
>  create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/SRCU-C.boot
>  create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/SRCU-t
>  create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/SRCU-t.boot
>  create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/SRCU-u
>  create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/SRCU-u.boot
>  delete mode 100644 tools/testing/selftests/rcutorture/configs/rcu/TREE08-T
>  rename tools/testing/selftests/rcutorture/configs/{rcu/TREE02-T => rcuperf/TINY} (50%)

Pulled, thanks a lot Paul!

	Ingo

[toc] | [prev] | [next] | [standalone]


#1665375

FromAndrea Parri <parri.andrea@gmail.com>
Date2017-06-14 05:00 +0200
Message-ID<tS6Hg-7QQ-13@gated-at.bofh.it>
In reply to#1664249
On Mon, Jun 12, 2017 at 02:37:55PM -0700, Paul E. McKenney wrote:
> Hello, Ingo,
> 
> This pull request is unusual in being a single linear set of commits,
> as opposed to my usual topic branches.  This is due to the many
> large-footprint changes, which means that reasonable topic branches
> result in large numbers of merge conflicts.  In addition, some commits
> depend on other commits that should be on different topic branches.
> I will return to the topic-branch style next time.
> 
> The largest feature of this series is shrinking and simplification,
> with the following diffstat summary:
> 
>  79 files changed, 1496 insertions(+), 4211 deletions(-)
> 
> In other words, this series represents a net reduction of more than 2700
> lines of code.
> 
> These commits were posted to LKML:
> 
> 	http://lkml.kernel.org/r/20170525215934.GA11578@linux.vnet.ibm.com

I did raise some issues (AFAICT, unresolved) concerning...


> 
> Two of these commits (46/88 and 48/88) have been deferred, most likely
> to v4.14.  All of the remaining commits have been subjected to the 0day
> Test Robot and -next testing, and are availiable in teh 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 6d48152eafde1f0d0a4a9e0584fa7d9ff4fbfdac:
> 
>   rcu: Remove RCU CPU stall warnings from Tiny RCU (2017-06-08 18:52:45 -0700)
> 
> ----------------------------------------------------------------
> Arnd Bergmann (1):
>       bcm47xx: Fix build regression
> 
> Paul E. McKenney (83):
>       rcutorture: Add lockdep to one of the SRCU scenarios
>       rcutorture: Add three-level tree test for Tree SRCU
>       rcutorture: Fix bug in reporting Kconfig mis-settings
>       rcutorture: Add a scenario for Tiny SRCU
>       rcutorture: Add a scenario for Classic SRCU
>       rcu: Prevent rcu_barrier() from starting needless grace periods
>       rcutorture: Correctly handle CONFIG_RCU_TORTURE_TEST_* options
>       rcutorture: Update test scenarios based on new Kconfig dependencies
>       srcu: Eliminate possibility of destructive counter overflow
>       rcu: Complain if blocking in preemptible RCU read-side critical section
>       rcuperf: Defer expedited/normal check to end of test
>       rcuperf: Remove conflicting Kconfig options
>       rcu: Remove obsolete reference to synchronize_kernel()
>       rcuperf: Add ability to performance-test call_rcu() and friends
>       rcuperf: Add a Kconfig-fragment file for Classic SRCU
>       rcu: Make sync_rcu_preempt_exp_done() return bool
>       checkpatch: Remove checks for expedited grace periods
>       rcuperf: Add test for dynamically initialized srcu_struct
>       doc/atomic_ops: Clarify smp_mb__{before,after}_atomic()
>       atomics: Add header comment so spin_unlock_wait()

... this one: c.f.,

  http://www.mail-archive.com/linux-kernel@vger.kernel.org/msg1418503.html

Any hints about those?

  Andrea

>       rcuperf: Add the ability to test tiny RCU flavors
>       srcu: Make Classic and Tree SRCU announce themselves at bootup
>       rcutorture: Reduce CPUs dedicated to testing Classic SRCU
>       srcu: Shrink Tiny SRCU a bit more
>       rcuperf: Set more user-friendly defaults
>       rcuperf: Add writer_holdoff boot parameter
>       rcutorture: Add "git diff" output to testid.txt file
>       srcu: Document auto-expediting requirement
>       doc: Take tail recursion into account in RCU requirements
>       rcu: Add preemptibility checks in rcu_sched_qs() and rcu_bh_qs()
>       rcu: Print out rcupdate.c non-default boot-time settings
>       rcu: Update rcu_bootup_announce_oddness()
>       srcu: Make exp_holdoff module parameter be static
>       srcu: Print non-default exp_holdoff values at boot time
>       rcu: Add lockdep_assert_held() teeth to tree.c
>       rcu: Add lockdep_assert_held() teeth to tree_plugin.h
>       srcu: Make SRCU be once again optional
>       srcu: Shrink Tiny SRCU a bit
>       srcu: Add DEBUG_OBJECTS_RCU_HEAD functionality
>       rcu: Make synchronize_rcu_mult() check for duplicates
>       sched: Rely on synchronize_rcu_mult() de-duplication
>       rcu: Use RCU_NOCB_WAKE rather than RCU_NOGP_WAKE
>       rcu: Add memory barriers for NOCB leader wakeup
>       rcu: Flag need for rcu_node_tree.h and rcu_segcblist.h visibility
>       rcu: Move docbook comments out of rcupdate.h
>       rcu: Move rcu_expedited and rcu_normal externs from rcupdate.h
>       rcu: Move expediting-related access/control out of rcupdate.h
>       rcu: Move torture-related definitions from rcupdate.h to rcu.h
>       rcu: Remove UINT_CMP_GE() and UINT_CMP_LT()
>       rcu: Move rcupdate.h to new empty-function style
>       rcu: Eliminate the unused __rcu_is_watching() function
>       rcu: Move the RCU_SCHEDULER_ definitions from rcupdate.h
>       rcu: Remove linux/debugobjects.h from rcupdate.h
>       rcu: Improve __call_rcu() debug-objects error message
>       rcu: Move rcu_is_nocb_cpu() from rcupdate.h to rcu.h
>       rcu: Move rcu_ftrace_dump() from rcupdate.h to rcu.h
>       rcu: move rcupdate.h to the new true/false-function style
>       rcu: Move torture-related functions out of rcutiny.h and rcutree.h
>       rcu: Move rcu_request_urgent_qs_task() out of rcutiny.h and rcutree.h
>       rcu: Move rcutiny.h to new empty/true/false-function style
>       srcu: Prevent sdp->srcu_gp_seq_needed counter wrap
>       srcu: Shrink srcu.h by moving docbook and private function
>       srcu: Apply trivial callback lists to shrink Tiny SRCU
>       lockdep: Use consistent printing primitives
>       rcu: Refactor #includes from include/linux/rcupdate.h
>       rcu: Convert rnp->lock wrappers to macros for SRCU use
>       rcu: Move rnp->lock wrappers for SRCU use
>       srcu: Use rnp->lock wrappers to replace explicit memory barriers
>       rcu: Remove *_SLOW_* Kconfig options
>       rcu: Remove the RCU_KTHREAD_PRIO Kconfig option
>       rcu: Remove nohz_full full-system-idle state machine
>       rcu: Remove #ifdef moving rcu_end_inkernel_boot from rcupdate.h
>       rcu: Remove typecheck() from RCU locking wrapper functions
>       rcu: Remove the now-obsolete PROVE_RCU_REPEATEDLY Kconfig option
>       rcu: Remove SPARSE_RCU_POINTER Kconfig option
>       srcu: Fix rcutorture-statistics typo
>       srcu: Remove Classic SRCU
>       rcu: Remove debugfs tracing
>       rcu: Eliminate NOCBs CPU-state Kconfig options
>       rcu: Move RCU non-debug Kconfig options to kernel/rcu
>       rcu: Move RCU debug Kconfig options to kernel/rcu
>       rcu: Remove event tracing from Tiny RCU
>       rcu: Remove RCU CPU stall warnings from Tiny RCU
> 
> Priyalee Kushwaha (1):
>       srcu-cbmc: Use /usr/bin/awk instead of /bin/awk
> 
> Stan Drozd (1):
>       docs: Fix typo in Documentation/memory-barriers.txt
> 
>  Documentation/RCU/00-INDEX                         |   2 -
>  .../RCU/Design/Requirements/Requirements.html      |  34 +-
>  Documentation/RCU/checklist.txt                    |   8 +-
>  Documentation/RCU/trace.txt                        | 535 -----------------
>  Documentation/admin-guide/kernel-parameters.txt    |  41 +-
>  Documentation/core-api/atomic_ops.rst              |   5 +
>  Documentation/dev-tools/sparse.rst                 |   6 -
>  Documentation/kernel-per-CPU-kthreads.txt          |  31 +-
>  Documentation/memory-barriers.txt                  |   2 +-
>  Documentation/timers/NO_HZ.txt                     |  29 +-
>  include/linux/bcm47xx_nvram.h                      |   1 +
>  include/linux/compiler.h                           |   4 -
>  include/linux/rcu_node_tree.h                      |   4 +
>  include/linux/rcu_segcblist.h                      |   4 +
>  include/linux/rcupdate.h                           | 318 +---------
>  include/linux/rcutiny.h                            | 167 +-----
>  include/linux/rcutree.h                            |  21 +-
>  include/linux/spinlock.h                           |  20 +
>  include/linux/srcu.h                               |  25 +-
>  include/linux/srcuclassic.h                        | 115 ----
>  include/linux/srcutiny.h                           |  47 +-
>  include/linux/srcutree.h                           |  13 +-
>  include/trace/events/rcu.h                         |   1 +
>  init/Kconfig                                       | 349 +----------
>  kernel/locking/lockdep.c                           | 176 +++---
>  kernel/rcu/Kconfig                                 | 242 ++++++++
>  kernel/rcu/Kconfig.debug                           |  82 +++
>  kernel/rcu/Makefile                                |   2 -
>  kernel/rcu/rcu.h                                   | 277 +++++++++
>  kernel/rcu/rcuperf.c                               | 129 +++-
>  kernel/rcu/rcutorture.c                            |  21 +-
>  kernel/rcu/srcu.c                                  | 661 ---------------------
>  kernel/rcu/srcutiny.c                              |  86 +--
>  kernel/rcu/srcutree.c                              | 187 ++++--
>  kernel/rcu/tiny.c                                  |  54 +-
>  kernel/rcu/tiny_plugin.h                           | 123 ----
>  kernel/rcu/tree.c                                  | 195 +++---
>  kernel/rcu/tree.h                                  | 109 +---
>  kernel/rcu/tree_exp.h                              |   2 +-
>  kernel/rcu/tree_plugin.h                           | 573 +++---------------
>  kernel/rcu/tree_trace.c                            | 494 ---------------
>  kernel/rcu/update.c                                |  77 ++-
>  kernel/sched/core.c                                |   8 +-
>  kernel/time/Kconfig                                |  50 --
>  lib/Kconfig.debug                                  | 184 +-----
>  lib/Makefile                                       |   3 -
>  scripts/checkpatch.pl                              |  17 -
>  .../selftests/rcutorture/bin/configcheck.sh        |   2 +-
>  .../testing/selftests/rcutorture/bin/kvm-build.sh  |   2 +-
>  tools/testing/selftests/rcutorture/bin/kvm.sh      |   5 +-
>  .../selftests/rcutorture/configs/rcu/CFLIST        |   2 +
>  .../selftests/rcutorture/configs/rcu/SRCU-C.boot   |   1 +
>  .../selftests/rcutorture/configs/rcu/SRCU-N        |   2 +-
>  .../selftests/rcutorture/configs/rcu/SRCU-P        |   6 +-
>  .../selftests/rcutorture/configs/rcu/SRCU-t        |  10 +
>  .../selftests/rcutorture/configs/rcu/SRCU-t.boot   |   1 +
>  .../selftests/rcutorture/configs/rcu/SRCU-u        |   9 +
>  .../selftests/rcutorture/configs/rcu/SRCU-u.boot   |   1 +
>  .../selftests/rcutorture/configs/rcu/TINY02        |   5 +-
>  .../selftests/rcutorture/configs/rcu/TREE01        |   5 +-
>  .../selftests/rcutorture/configs/rcu/TREE01.boot   |   4 +
>  .../selftests/rcutorture/configs/rcu/TREE02        |   5 +-
>  .../selftests/rcutorture/configs/rcu/TREE03        |   4 -
>  .../selftests/rcutorture/configs/rcu/TREE03.boot   |   4 +
>  .../selftests/rcutorture/configs/rcu/TREE04        |   4 -
>  .../selftests/rcutorture/configs/rcu/TREE05        |   4 -
>  .../selftests/rcutorture/configs/rcu/TREE05.boot   |   3 +
>  .../selftests/rcutorture/configs/rcu/TREE06        |   4 +-
>  .../selftests/rcutorture/configs/rcu/TREE06.boot   |   3 +
>  .../selftests/rcutorture/configs/rcu/TREE07        |   6 -
>  .../selftests/rcutorture/configs/rcu/TREE08        |   1 -
>  .../selftests/rcutorture/configs/rcu/TREE08-T      |  21 -
>  .../selftests/rcutorture/configs/rcu/TREE08.boot   |   1 +
>  .../configs/{rcu/TREE02-T => rcuperf/TINY}         |  19 +-
>  .../selftests/rcutorture/configs/rcuperf/TREE      |   1 -
>  .../selftests/rcutorture/configs/rcuperf/TREE54    |   1 -
>  .../testing/selftests/rcutorture/doc/TINY_RCU.txt  |   1 -
>  .../selftests/rcutorture/doc/TREE_RCU-kconfig.txt  |  34 +-
>  .../rcutorture/formal/srcu-cbmc/modify_srcu.awk    |   2 +-
>  79 files changed, 1496 insertions(+), 4211 deletions(-)
>  delete mode 100644 Documentation/RCU/trace.txt
>  delete mode 100644 include/linux/srcuclassic.h
>  create mode 100644 kernel/rcu/Kconfig
>  create mode 100644 kernel/rcu/Kconfig.debug
>  delete mode 100644 kernel/rcu/srcu.c
>  delete mode 100644 kernel/rcu/tree_trace.c
>  create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/SRCU-C.boot
>  create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/SRCU-t
>  create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/SRCU-t.boot
>  create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/SRCU-u
>  create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/SRCU-u.boot
>  delete mode 100644 tools/testing/selftests/rcutorture/configs/rcu/TREE08-T
>  rename tools/testing/selftests/rcutorture/configs/{rcu/TREE02-T => rcuperf/TINY} (50%)
> 

[toc] | [prev] | [next] | [standalone]


#1665401

From"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Date2017-06-14 06:40 +0200
Message-ID<tS8g1-vc-7@gated-at.bofh.it>
In reply to#1665375
On Wed, Jun 14, 2017 at 04:54:04AM +0200, Andrea Parri wrote:
> On Mon, Jun 12, 2017 at 02:37:55PM -0700, Paul E. McKenney wrote:
> > Hello, Ingo,
> > 
> > This pull request is unusual in being a single linear set of commits,
> > as opposed to my usual topic branches.  This is due to the many
> > large-footprint changes, which means that reasonable topic branches
> > result in large numbers of merge conflicts.  In addition, some commits
> > depend on other commits that should be on different topic branches.
> > I will return to the topic-branch style next time.
> > 
> > The largest feature of this series is shrinking and simplification,
> > with the following diffstat summary:
> > 
> >  79 files changed, 1496 insertions(+), 4211 deletions(-)
> > 
> > In other words, this series represents a net reduction of more than 2700
> > lines of code.
> > 
> > These commits were posted to LKML:
> > 
> > 	http://lkml.kernel.org/r/20170525215934.GA11578@linux.vnet.ibm.com
> 
> I did raise some issues (AFAICT, unresolved) concerning...
> 
> 
> > 
> > Two of these commits (46/88 and 48/88) have been deferred, most likely
> > to v4.14.  All of the remaining commits have been subjected to the 0day
> > Test Robot and -next testing, and are availiable in teh 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 6d48152eafde1f0d0a4a9e0584fa7d9ff4fbfdac:
> > 
> >   rcu: Remove RCU CPU stall warnings from Tiny RCU (2017-06-08 18:52:45 -0700)
> > 
> > ----------------------------------------------------------------
> > Arnd Bergmann (1):
> >       bcm47xx: Fix build regression
> > 
> > Paul E. McKenney (83):
> >       rcutorture: Add lockdep to one of the SRCU scenarios
> >       rcutorture: Add three-level tree test for Tree SRCU
> >       rcutorture: Fix bug in reporting Kconfig mis-settings
> >       rcutorture: Add a scenario for Tiny SRCU
> >       rcutorture: Add a scenario for Classic SRCU
> >       rcu: Prevent rcu_barrier() from starting needless grace periods
> >       rcutorture: Correctly handle CONFIG_RCU_TORTURE_TEST_* options
> >       rcutorture: Update test scenarios based on new Kconfig dependencies
> >       srcu: Eliminate possibility of destructive counter overflow
> >       rcu: Complain if blocking in preemptible RCU read-side critical section
> >       rcuperf: Defer expedited/normal check to end of test
> >       rcuperf: Remove conflicting Kconfig options
> >       rcu: Remove obsolete reference to synchronize_kernel()
> >       rcuperf: Add ability to performance-test call_rcu() and friends
> >       rcuperf: Add a Kconfig-fragment file for Classic SRCU
> >       rcu: Make sync_rcu_preempt_exp_done() return bool
> >       checkpatch: Remove checks for expedited grace periods
> >       rcuperf: Add test for dynamically initialized srcu_struct
> >       doc/atomic_ops: Clarify smp_mb__{before,after}_atomic()
> >       atomics: Add header comment so spin_unlock_wait()
> 
> ... this one: c.f.,
> 
>   http://www.mail-archive.com/linux-kernel@vger.kernel.org/msg1418503.html
> 
> Any hints about those?

I suggest being -extremely- clear.  This is about ARM, correct?
If so, lay out the exact situation (code example, which hardware,
which spin_unlock_wait(), which sequence of events) that could lead to
the failure.

The problem here is that no one knows which of the 30 CPU families you
might be talking about, nor do they know exactly what the problem is.
I didn't worry about it at the time because I figured that you had
sent private email to Will with the full story.

Yes, the four of us (you, Alan, Luc, and me) discussed it, but we weren't
sure whether it was a bug in the memory model, the spin_unlock_wait()
code, or my description of spin_unlock_wait().  Given that Will didn't
object to my April 13th email (the one that you were not CCed on),
I figured that he wasn't going to claim that the spin_unlock_wait()
description was wrong, especially since he went to so much effort some
years back to make ARM64 meet that description.

So again, I recommend replying to your msg1418503.html email with
a code fragment demonstrating the problem, exact identification of
the hardware that might be susceptible (ARM64? ARM32? Which ARM32?),
exact identification of which spin_unlock_wait() function you suspect,
and a clear bullet-form sequence of events that shows how you believe
that the problem can occur.

That makes it easy for people to see what your concern is, easy for
them to check their code and hardware, and hard for them to ignore you.

Make sense?

							Thanx, Paul

>   Andrea
> 
> >       rcuperf: Add the ability to test tiny RCU flavors
> >       srcu: Make Classic and Tree SRCU announce themselves at bootup
> >       rcutorture: Reduce CPUs dedicated to testing Classic SRCU
> >       srcu: Shrink Tiny SRCU a bit more
> >       rcuperf: Set more user-friendly defaults
> >       rcuperf: Add writer_holdoff boot parameter
> >       rcutorture: Add "git diff" output to testid.txt file
> >       srcu: Document auto-expediting requirement
> >       doc: Take tail recursion into account in RCU requirements
> >       rcu: Add preemptibility checks in rcu_sched_qs() and rcu_bh_qs()
> >       rcu: Print out rcupdate.c non-default boot-time settings
> >       rcu: Update rcu_bootup_announce_oddness()
> >       srcu: Make exp_holdoff module parameter be static
> >       srcu: Print non-default exp_holdoff values at boot time
> >       rcu: Add lockdep_assert_held() teeth to tree.c
> >       rcu: Add lockdep_assert_held() teeth to tree_plugin.h
> >       srcu: Make SRCU be once again optional
> >       srcu: Shrink Tiny SRCU a bit
> >       srcu: Add DEBUG_OBJECTS_RCU_HEAD functionality
> >       rcu: Make synchronize_rcu_mult() check for duplicates
> >       sched: Rely on synchronize_rcu_mult() de-duplication
> >       rcu: Use RCU_NOCB_WAKE rather than RCU_NOGP_WAKE
> >       rcu: Add memory barriers for NOCB leader wakeup
> >       rcu: Flag need for rcu_node_tree.h and rcu_segcblist.h visibility
> >       rcu: Move docbook comments out of rcupdate.h
> >       rcu: Move rcu_expedited and rcu_normal externs from rcupdate.h
> >       rcu: Move expediting-related access/control out of rcupdate.h
> >       rcu: Move torture-related definitions from rcupdate.h to rcu.h
> >       rcu: Remove UINT_CMP_GE() and UINT_CMP_LT()
> >       rcu: Move rcupdate.h to new empty-function style
> >       rcu: Eliminate the unused __rcu_is_watching() function
> >       rcu: Move the RCU_SCHEDULER_ definitions from rcupdate.h
> >       rcu: Remove linux/debugobjects.h from rcupdate.h
> >       rcu: Improve __call_rcu() debug-objects error message
> >       rcu: Move rcu_is_nocb_cpu() from rcupdate.h to rcu.h
> >       rcu: Move rcu_ftrace_dump() from rcupdate.h to rcu.h
> >       rcu: move rcupdate.h to the new true/false-function style
> >       rcu: Move torture-related functions out of rcutiny.h and rcutree.h
> >       rcu: Move rcu_request_urgent_qs_task() out of rcutiny.h and rcutree.h
> >       rcu: Move rcutiny.h to new empty/true/false-function style
> >       srcu: Prevent sdp->srcu_gp_seq_needed counter wrap
> >       srcu: Shrink srcu.h by moving docbook and private function
> >       srcu: Apply trivial callback lists to shrink Tiny SRCU
> >       lockdep: Use consistent printing primitives
> >       rcu: Refactor #includes from include/linux/rcupdate.h
> >       rcu: Convert rnp->lock wrappers to macros for SRCU use
> >       rcu: Move rnp->lock wrappers for SRCU use
> >       srcu: Use rnp->lock wrappers to replace explicit memory barriers
> >       rcu: Remove *_SLOW_* Kconfig options
> >       rcu: Remove the RCU_KTHREAD_PRIO Kconfig option
> >       rcu: Remove nohz_full full-system-idle state machine
> >       rcu: Remove #ifdef moving rcu_end_inkernel_boot from rcupdate.h
> >       rcu: Remove typecheck() from RCU locking wrapper functions
> >       rcu: Remove the now-obsolete PROVE_RCU_REPEATEDLY Kconfig option
> >       rcu: Remove SPARSE_RCU_POINTER Kconfig option
> >       srcu: Fix rcutorture-statistics typo
> >       srcu: Remove Classic SRCU
> >       rcu: Remove debugfs tracing
> >       rcu: Eliminate NOCBs CPU-state Kconfig options
> >       rcu: Move RCU non-debug Kconfig options to kernel/rcu
> >       rcu: Move RCU debug Kconfig options to kernel/rcu
> >       rcu: Remove event tracing from Tiny RCU
> >       rcu: Remove RCU CPU stall warnings from Tiny RCU
> > 
> > Priyalee Kushwaha (1):
> >       srcu-cbmc: Use /usr/bin/awk instead of /bin/awk
> > 
> > Stan Drozd (1):
> >       docs: Fix typo in Documentation/memory-barriers.txt
> > 
> >  Documentation/RCU/00-INDEX                         |   2 -
> >  .../RCU/Design/Requirements/Requirements.html      |  34 +-
> >  Documentation/RCU/checklist.txt                    |   8 +-
> >  Documentation/RCU/trace.txt                        | 535 -----------------
> >  Documentation/admin-guide/kernel-parameters.txt    |  41 +-
> >  Documentation/core-api/atomic_ops.rst              |   5 +
> >  Documentation/dev-tools/sparse.rst                 |   6 -
> >  Documentation/kernel-per-CPU-kthreads.txt          |  31 +-
> >  Documentation/memory-barriers.txt                  |   2 +-
> >  Documentation/timers/NO_HZ.txt                     |  29 +-
> >  include/linux/bcm47xx_nvram.h                      |   1 +
> >  include/linux/compiler.h                           |   4 -
> >  include/linux/rcu_node_tree.h                      |   4 +
> >  include/linux/rcu_segcblist.h                      |   4 +
> >  include/linux/rcupdate.h                           | 318 +---------
> >  include/linux/rcutiny.h                            | 167 +-----
> >  include/linux/rcutree.h                            |  21 +-
> >  include/linux/spinlock.h                           |  20 +
> >  include/linux/srcu.h                               |  25 +-
> >  include/linux/srcuclassic.h                        | 115 ----
> >  include/linux/srcutiny.h                           |  47 +-
> >  include/linux/srcutree.h                           |  13 +-
> >  include/trace/events/rcu.h                         |   1 +
> >  init/Kconfig                                       | 349 +----------
> >  kernel/locking/lockdep.c                           | 176 +++---
> >  kernel/rcu/Kconfig                                 | 242 ++++++++
> >  kernel/rcu/Kconfig.debug                           |  82 +++
> >  kernel/rcu/Makefile                                |   2 -
> >  kernel/rcu/rcu.h                                   | 277 +++++++++
> >  kernel/rcu/rcuperf.c                               | 129 +++-
> >  kernel/rcu/rcutorture.c                            |  21 +-
> >  kernel/rcu/srcu.c                                  | 661 ---------------------
> >  kernel/rcu/srcutiny.c                              |  86 +--
> >  kernel/rcu/srcutree.c                              | 187 ++++--
> >  kernel/rcu/tiny.c                                  |  54 +-
> >  kernel/rcu/tiny_plugin.h                           | 123 ----
> >  kernel/rcu/tree.c                                  | 195 +++---
> >  kernel/rcu/tree.h                                  | 109 +---
> >  kernel/rcu/tree_exp.h                              |   2 +-
> >  kernel/rcu/tree_plugin.h                           | 573 +++---------------
> >  kernel/rcu/tree_trace.c                            | 494 ---------------
> >  kernel/rcu/update.c                                |  77 ++-
> >  kernel/sched/core.c                                |   8 +-
> >  kernel/time/Kconfig                                |  50 --
> >  lib/Kconfig.debug                                  | 184 +-----
> >  lib/Makefile                                       |   3 -
> >  scripts/checkpatch.pl                              |  17 -
> >  .../selftests/rcutorture/bin/configcheck.sh        |   2 +-
> >  .../testing/selftests/rcutorture/bin/kvm-build.sh  |   2 +-
> >  tools/testing/selftests/rcutorture/bin/kvm.sh      |   5 +-
> >  .../selftests/rcutorture/configs/rcu/CFLIST        |   2 +
> >  .../selftests/rcutorture/configs/rcu/SRCU-C.boot   |   1 +
> >  .../selftests/rcutorture/configs/rcu/SRCU-N        |   2 +-
> >  .../selftests/rcutorture/configs/rcu/SRCU-P        |   6 +-
> >  .../selftests/rcutorture/configs/rcu/SRCU-t        |  10 +
> >  .../selftests/rcutorture/configs/rcu/SRCU-t.boot   |   1 +
> >  .../selftests/rcutorture/configs/rcu/SRCU-u        |   9 +
> >  .../selftests/rcutorture/configs/rcu/SRCU-u.boot   |   1 +
> >  .../selftests/rcutorture/configs/rcu/TINY02        |   5 +-
> >  .../selftests/rcutorture/configs/rcu/TREE01        |   5 +-
> >  .../selftests/rcutorture/configs/rcu/TREE01.boot   |   4 +
> >  .../selftests/rcutorture/configs/rcu/TREE02        |   5 +-
> >  .../selftests/rcutorture/configs/rcu/TREE03        |   4 -
> >  .../selftests/rcutorture/configs/rcu/TREE03.boot   |   4 +
> >  .../selftests/rcutorture/configs/rcu/TREE04        |   4 -
> >  .../selftests/rcutorture/configs/rcu/TREE05        |   4 -
> >  .../selftests/rcutorture/configs/rcu/TREE05.boot   |   3 +
> >  .../selftests/rcutorture/configs/rcu/TREE06        |   4 +-
> >  .../selftests/rcutorture/configs/rcu/TREE06.boot   |   3 +
> >  .../selftests/rcutorture/configs/rcu/TREE07        |   6 -
> >  .../selftests/rcutorture/configs/rcu/TREE08        |   1 -
> >  .../selftests/rcutorture/configs/rcu/TREE08-T      |  21 -
> >  .../selftests/rcutorture/configs/rcu/TREE08.boot   |   1 +
> >  .../configs/{rcu/TREE02-T => rcuperf/TINY}         |  19 +-
> >  .../selftests/rcutorture/configs/rcuperf/TREE      |   1 -
> >  .../selftests/rcutorture/configs/rcuperf/TREE54    |   1 -
> >  .../testing/selftests/rcutorture/doc/TINY_RCU.txt  |   1 -
> >  .../selftests/rcutorture/doc/TREE_RCU-kconfig.txt  |  34 +-
> >  .../rcutorture/formal/srcu-cbmc/modify_srcu.awk    |   2 +-
> >  79 files changed, 1496 insertions(+), 4211 deletions(-)
> >  delete mode 100644 Documentation/RCU/trace.txt
> >  delete mode 100644 include/linux/srcuclassic.h
> >  create mode 100644 kernel/rcu/Kconfig
> >  create mode 100644 kernel/rcu/Kconfig.debug
> >  delete mode 100644 kernel/rcu/srcu.c
> >  delete mode 100644 kernel/rcu/tree_trace.c
> >  create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/SRCU-C.boot
> >  create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/SRCU-t
> >  create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/SRCU-t.boot
> >  create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/SRCU-u
> >  create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/SRCU-u.boot
> >  delete mode 100644 tools/testing/selftests/rcutorture/configs/rcu/TREE08-T
> >  rename tools/testing/selftests/rcutorture/configs/{rcu/TREE02-T => rcuperf/TINY} (50%)
> > 
> 

[toc] | [prev] | [next] | [standalone]


#1665884

FromAndrea Parri <parri.andrea@gmail.com>
Date2017-06-14 16:40 +0200
Message-ID<tShCG-6mB-3@gated-at.bofh.it>
In reply to#1665401
On Tue, Jun 13, 2017 at 09:33:17PM -0700, Paul E. McKenney wrote:
> On Wed, Jun 14, 2017 at 04:54:04AM +0200, Andrea Parri wrote:
> > On Mon, Jun 12, 2017 at 02:37:55PM -0700, Paul E. McKenney wrote:
> > > Hello, Ingo,
> > > 
> > > This pull request is unusual in being a single linear set of commits,
> > > as opposed to my usual topic branches.  This is due to the many
> > > large-footprint changes, which means that reasonable topic branches
> > > result in large numbers of merge conflicts.  In addition, some commits
> > > depend on other commits that should be on different topic branches.
> > > I will return to the topic-branch style next time.
> > > 
> > > The largest feature of this series is shrinking and simplification,
> > > with the following diffstat summary:
> > > 
> > >  79 files changed, 1496 insertions(+), 4211 deletions(-)
> > > 
> > > In other words, this series represents a net reduction of more than 2700
> > > lines of code.
> > > 
> > > These commits were posted to LKML:
> > > 
> > > 	http://lkml.kernel.org/r/20170525215934.GA11578@linux.vnet.ibm.com
> > 
> > I did raise some issues (AFAICT, unresolved) concerning...
> > 
> > 
> > > 
> > > Two of these commits (46/88 and 48/88) have been deferred, most likely
> > > to v4.14.  All of the remaining commits have been subjected to the 0day
> > > Test Robot and -next testing, and are availiable in teh 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 6d48152eafde1f0d0a4a9e0584fa7d9ff4fbfdac:
> > > 
> > >   rcu: Remove RCU CPU stall warnings from Tiny RCU (2017-06-08 18:52:45 -0700)
> > > 
> > > ----------------------------------------------------------------
> > > Arnd Bergmann (1):
> > >       bcm47xx: Fix build regression
> > > 
> > > Paul E. McKenney (83):
> > >       rcutorture: Add lockdep to one of the SRCU scenarios
> > >       rcutorture: Add three-level tree test for Tree SRCU
> > >       rcutorture: Fix bug in reporting Kconfig mis-settings
> > >       rcutorture: Add a scenario for Tiny SRCU
> > >       rcutorture: Add a scenario for Classic SRCU
> > >       rcu: Prevent rcu_barrier() from starting needless grace periods
> > >       rcutorture: Correctly handle CONFIG_RCU_TORTURE_TEST_* options
> > >       rcutorture: Update test scenarios based on new Kconfig dependencies
> > >       srcu: Eliminate possibility of destructive counter overflow
> > >       rcu: Complain if blocking in preemptible RCU read-side critical section
> > >       rcuperf: Defer expedited/normal check to end of test
> > >       rcuperf: Remove conflicting Kconfig options
> > >       rcu: Remove obsolete reference to synchronize_kernel()
> > >       rcuperf: Add ability to performance-test call_rcu() and friends
> > >       rcuperf: Add a Kconfig-fragment file for Classic SRCU
> > >       rcu: Make sync_rcu_preempt_exp_done() return bool
> > >       checkpatch: Remove checks for expedited grace periods
> > >       rcuperf: Add test for dynamically initialized srcu_struct
> > >       doc/atomic_ops: Clarify smp_mb__{before,after}_atomic()
> > >       atomics: Add header comment so spin_unlock_wait()
> > 
> > ... this one: c.f.,
> > 
> >   http://www.mail-archive.com/linux-kernel@vger.kernel.org/msg1418503.html
> > 
> > Any hints about those?
> 
> I suggest being -extremely- clear.  This is about ARM, correct?
> If so, lay out the exact situation (code example, which hardware,
> which spin_unlock_wait(), which sequence of events) that could lead to
> the failure.
> 
> The problem here is that no one knows which of the 30 CPU families you
> might be talking about, nor do they know exactly what the problem is.
> I didn't worry about it at the time because I figured that you had
> sent private email to Will with the full story.
> 
> Yes, the four of us (you, Alan, Luc, and me) discussed it, but we weren't
> sure whether it was a bug in the memory model, the spin_unlock_wait()
> code, or my description of spin_unlock_wait().  Given that Will didn't
> object to my April 13th email (the one that you were not CCed on),
> I figured that he wasn't going to claim that the spin_unlock_wait()
> description was wrong, especially since he went to so much effort some
> years back to make ARM64 meet that description.
> 
> So again, I recommend replying to your msg1418503.html email with
> a code fragment demonstrating the problem, exact identification of
> the hardware that might be susceptible (ARM64? ARM32? Which ARM32?),
> exact identification of which spin_unlock_wait() function you suspect,
> and a clear bullet-form sequence of events that shows how you believe
> that the problem can occur.
> 
> That makes it easy for people to see what your concern is, easy for
> them to check their code and hardware, and hard for them to ignore you.
> 
> Make sense?

My concerns originates from the fact that none of the implementations
(of spin_unlock_wait()) for the architectures touched by:

  726328d92a42b6d4b76078e2659f43067f82c4e8
  ("locking/spinlock, arch: Update and fix spin_unlock_wait() implementations"

currently contain any traces of that RELEASE/spin_unlock() from your:

  "Semantically this is equivalent to a spin_lock() immediately followed
   by a spin_unlock()."

In fact, the header of that commit states:

  "The update is in semantics; where it previously was only a control
   dependency, we now upgrade to a full load-acquire [...]"

For an example leveraging this RELEASE, consider:

  [initially: X = 0, s UNLOCKED]

  P0                      P1
  X = 1;                  spin_lock(s);
  spin_unlock_wait(s);    r0 = X;

According to the "spin_lock(); spin_unlock() semantics" this has one
non-deadlocking execution, and the RELEASE from the spin_unlock_wait()
(paired with the ACQUIRE from the spin_lock() in P1) guarantees that
r0 = 1 in this execution. AFAICT, this same conclusion does not hold
according to the "smp_cond_load_acquire() semantics" (726328d92a42b).

  Andrea


> 
> 							Thanx, Paul
> 
> >   Andrea
> > 
> > >       rcuperf: Add the ability to test tiny RCU flavors
> > >       srcu: Make Classic and Tree SRCU announce themselves at bootup
> > >       rcutorture: Reduce CPUs dedicated to testing Classic SRCU
> > >       srcu: Shrink Tiny SRCU a bit more
> > >       rcuperf: Set more user-friendly defaults
> > >       rcuperf: Add writer_holdoff boot parameter
> > >       rcutorture: Add "git diff" output to testid.txt file
> > >       srcu: Document auto-expediting requirement
> > >       doc: Take tail recursion into account in RCU requirements
> > >       rcu: Add preemptibility checks in rcu_sched_qs() and rcu_bh_qs()
> > >       rcu: Print out rcupdate.c non-default boot-time settings
> > >       rcu: Update rcu_bootup_announce_oddness()
> > >       srcu: Make exp_holdoff module parameter be static
> > >       srcu: Print non-default exp_holdoff values at boot time
> > >       rcu: Add lockdep_assert_held() teeth to tree.c
> > >       rcu: Add lockdep_assert_held() teeth to tree_plugin.h
> > >       srcu: Make SRCU be once again optional
> > >       srcu: Shrink Tiny SRCU a bit
> > >       srcu: Add DEBUG_OBJECTS_RCU_HEAD functionality
> > >       rcu: Make synchronize_rcu_mult() check for duplicates
> > >       sched: Rely on synchronize_rcu_mult() de-duplication
> > >       rcu: Use RCU_NOCB_WAKE rather than RCU_NOGP_WAKE
> > >       rcu: Add memory barriers for NOCB leader wakeup
> > >       rcu: Flag need for rcu_node_tree.h and rcu_segcblist.h visibility
> > >       rcu: Move docbook comments out of rcupdate.h
> > >       rcu: Move rcu_expedited and rcu_normal externs from rcupdate.h
> > >       rcu: Move expediting-related access/control out of rcupdate.h
> > >       rcu: Move torture-related definitions from rcupdate.h to rcu.h
> > >       rcu: Remove UINT_CMP_GE() and UINT_CMP_LT()
> > >       rcu: Move rcupdate.h to new empty-function style
> > >       rcu: Eliminate the unused __rcu_is_watching() function
> > >       rcu: Move the RCU_SCHEDULER_ definitions from rcupdate.h
> > >       rcu: Remove linux/debugobjects.h from rcupdate.h
> > >       rcu: Improve __call_rcu() debug-objects error message
> > >       rcu: Move rcu_is_nocb_cpu() from rcupdate.h to rcu.h
> > >       rcu: Move rcu_ftrace_dump() from rcupdate.h to rcu.h
> > >       rcu: move rcupdate.h to the new true/false-function style
> > >       rcu: Move torture-related functions out of rcutiny.h and rcutree.h
> > >       rcu: Move rcu_request_urgent_qs_task() out of rcutiny.h and rcutree.h
> > >       rcu: Move rcutiny.h to new empty/true/false-function style
> > >       srcu: Prevent sdp->srcu_gp_seq_needed counter wrap
> > >       srcu: Shrink srcu.h by moving docbook and private function
> > >       srcu: Apply trivial callback lists to shrink Tiny SRCU
> > >       lockdep: Use consistent printing primitives
> > >       rcu: Refactor #includes from include/linux/rcupdate.h
> > >       rcu: Convert rnp->lock wrappers to macros for SRCU use
> > >       rcu: Move rnp->lock wrappers for SRCU use
> > >       srcu: Use rnp->lock wrappers to replace explicit memory barriers
> > >       rcu: Remove *_SLOW_* Kconfig options
> > >       rcu: Remove the RCU_KTHREAD_PRIO Kconfig option
> > >       rcu: Remove nohz_full full-system-idle state machine
> > >       rcu: Remove #ifdef moving rcu_end_inkernel_boot from rcupdate.h
> > >       rcu: Remove typecheck() from RCU locking wrapper functions
> > >       rcu: Remove the now-obsolete PROVE_RCU_REPEATEDLY Kconfig option
> > >       rcu: Remove SPARSE_RCU_POINTER Kconfig option
> > >       srcu: Fix rcutorture-statistics typo
> > >       srcu: Remove Classic SRCU
> > >       rcu: Remove debugfs tracing
> > >       rcu: Eliminate NOCBs CPU-state Kconfig options
> > >       rcu: Move RCU non-debug Kconfig options to kernel/rcu
> > >       rcu: Move RCU debug Kconfig options to kernel/rcu
> > >       rcu: Remove event tracing from Tiny RCU
> > >       rcu: Remove RCU CPU stall warnings from Tiny RCU
> > > 
> > > Priyalee Kushwaha (1):
> > >       srcu-cbmc: Use /usr/bin/awk instead of /bin/awk
> > > 
> > > Stan Drozd (1):
> > >       docs: Fix typo in Documentation/memory-barriers.txt
> > > 
> > >  Documentation/RCU/00-INDEX                         |   2 -
> > >  .../RCU/Design/Requirements/Requirements.html      |  34 +-
> > >  Documentation/RCU/checklist.txt                    |   8 +-
> > >  Documentation/RCU/trace.txt                        | 535 -----------------
> > >  Documentation/admin-guide/kernel-parameters.txt    |  41 +-
> > >  Documentation/core-api/atomic_ops.rst              |   5 +
> > >  Documentation/dev-tools/sparse.rst                 |   6 -
> > >  Documentation/kernel-per-CPU-kthreads.txt          |  31 +-
> > >  Documentation/memory-barriers.txt                  |   2 +-
> > >  Documentation/timers/NO_HZ.txt                     |  29 +-
> > >  include/linux/bcm47xx_nvram.h                      |   1 +
> > >  include/linux/compiler.h                           |   4 -
> > >  include/linux/rcu_node_tree.h                      |   4 +
> > >  include/linux/rcu_segcblist.h                      |   4 +
> > >  include/linux/rcupdate.h                           | 318 +---------
> > >  include/linux/rcutiny.h                            | 167 +-----
> > >  include/linux/rcutree.h                            |  21 +-
> > >  include/linux/spinlock.h                           |  20 +
> > >  include/linux/srcu.h                               |  25 +-
> > >  include/linux/srcuclassic.h                        | 115 ----
> > >  include/linux/srcutiny.h                           |  47 +-
> > >  include/linux/srcutree.h                           |  13 +-
> > >  include/trace/events/rcu.h                         |   1 +
> > >  init/Kconfig                                       | 349 +----------
> > >  kernel/locking/lockdep.c                           | 176 +++---
> > >  kernel/rcu/Kconfig                                 | 242 ++++++++
> > >  kernel/rcu/Kconfig.debug                           |  82 +++
> > >  kernel/rcu/Makefile                                |   2 -
> > >  kernel/rcu/rcu.h                                   | 277 +++++++++
> > >  kernel/rcu/rcuperf.c                               | 129 +++-
> > >  kernel/rcu/rcutorture.c                            |  21 +-
> > >  kernel/rcu/srcu.c                                  | 661 ---------------------
> > >  kernel/rcu/srcutiny.c                              |  86 +--
> > >  kernel/rcu/srcutree.c                              | 187 ++++--
> > >  kernel/rcu/tiny.c                                  |  54 +-
> > >  kernel/rcu/tiny_plugin.h                           | 123 ----
> > >  kernel/rcu/tree.c                                  | 195 +++---
> > >  kernel/rcu/tree.h                                  | 109 +---
> > >  kernel/rcu/tree_exp.h                              |   2 +-
> > >  kernel/rcu/tree_plugin.h                           | 573 +++---------------
> > >  kernel/rcu/tree_trace.c                            | 494 ---------------
> > >  kernel/rcu/update.c                                |  77 ++-
> > >  kernel/sched/core.c                                |   8 +-
> > >  kernel/time/Kconfig                                |  50 --
> > >  lib/Kconfig.debug                                  | 184 +-----
> > >  lib/Makefile                                       |   3 -
> > >  scripts/checkpatch.pl                              |  17 -
> > >  .../selftests/rcutorture/bin/configcheck.sh        |   2 +-
> > >  .../testing/selftests/rcutorture/bin/kvm-build.sh  |   2 +-
> > >  tools/testing/selftests/rcutorture/bin/kvm.sh      |   5 +-
> > >  .../selftests/rcutorture/configs/rcu/CFLIST        |   2 +
> > >  .../selftests/rcutorture/configs/rcu/SRCU-C.boot   |   1 +
> > >  .../selftests/rcutorture/configs/rcu/SRCU-N        |   2 +-
> > >  .../selftests/rcutorture/configs/rcu/SRCU-P        |   6 +-
> > >  .../selftests/rcutorture/configs/rcu/SRCU-t        |  10 +
> > >  .../selftests/rcutorture/configs/rcu/SRCU-t.boot   |   1 +
> > >  .../selftests/rcutorture/configs/rcu/SRCU-u        |   9 +
> > >  .../selftests/rcutorture/configs/rcu/SRCU-u.boot   |   1 +
> > >  .../selftests/rcutorture/configs/rcu/TINY02        |   5 +-
> > >  .../selftests/rcutorture/configs/rcu/TREE01        |   5 +-
> > >  .../selftests/rcutorture/configs/rcu/TREE01.boot   |   4 +
> > >  .../selftests/rcutorture/configs/rcu/TREE02        |   5 +-
> > >  .../selftests/rcutorture/configs/rcu/TREE03        |   4 -
> > >  .../selftests/rcutorture/configs/rcu/TREE03.boot   |   4 +
> > >  .../selftests/rcutorture/configs/rcu/TREE04        |   4 -
> > >  .../selftests/rcutorture/configs/rcu/TREE05        |   4 -
> > >  .../selftests/rcutorture/configs/rcu/TREE05.boot   |   3 +
> > >  .../selftests/rcutorture/configs/rcu/TREE06        |   4 +-
> > >  .../selftests/rcutorture/configs/rcu/TREE06.boot   |   3 +
> > >  .../selftests/rcutorture/configs/rcu/TREE07        |   6 -
> > >  .../selftests/rcutorture/configs/rcu/TREE08        |   1 -
> > >  .../selftests/rcutorture/configs/rcu/TREE08-T      |  21 -
> > >  .../selftests/rcutorture/configs/rcu/TREE08.boot   |   1 +
> > >  .../configs/{rcu/TREE02-T => rcuperf/TINY}         |  19 +-
> > >  .../selftests/rcutorture/configs/rcuperf/TREE      |   1 -
> > >  .../selftests/rcutorture/configs/rcuperf/TREE54    |   1 -
> > >  .../testing/selftests/rcutorture/doc/TINY_RCU.txt  |   1 -
> > >  .../selftests/rcutorture/doc/TREE_RCU-kconfig.txt  |  34 +-
> > >  .../rcutorture/formal/srcu-cbmc/modify_srcu.awk    |   2 +-
> > >  79 files changed, 1496 insertions(+), 4211 deletions(-)
> > >  delete mode 100644 Documentation/RCU/trace.txt
> > >  delete mode 100644 include/linux/srcuclassic.h
> > >  create mode 100644 kernel/rcu/Kconfig
> > >  create mode 100644 kernel/rcu/Kconfig.debug
> > >  delete mode 100644 kernel/rcu/srcu.c
> > >  delete mode 100644 kernel/rcu/tree_trace.c
> > >  create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/SRCU-C.boot
> > >  create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/SRCU-t
> > >  create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/SRCU-t.boot
> > >  create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/SRCU-u
> > >  create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/SRCU-u.boot
> > >  delete mode 100644 tools/testing/selftests/rcutorture/configs/rcu/TREE08-T
> > >  rename tools/testing/selftests/rcutorture/configs/{rcu/TREE02-T => rcuperf/TINY} (50%)
> > > 
> > 
> 

[toc] | [prev] | [next] | [standalone]


#1666203

From"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Date2017-06-14 22:30 +0200
Message-ID<tSn5n-1o1-5@gated-at.bofh.it>
In reply to#1665884
On Wed, Jun 14, 2017 at 04:33:22PM +0200, Andrea Parri wrote:
> On Tue, Jun 13, 2017 at 09:33:17PM -0700, Paul E. McKenney wrote:
> > On Wed, Jun 14, 2017 at 04:54:04AM +0200, Andrea Parri wrote:
> > > On Mon, Jun 12, 2017 at 02:37:55PM -0700, Paul E. McKenney wrote:
> > > > Hello, Ingo,
> > > > 
> > > > This pull request is unusual in being a single linear set of commits,
> > > > as opposed to my usual topic branches.  This is due to the many
> > > > large-footprint changes, which means that reasonable topic branches
> > > > result in large numbers of merge conflicts.  In addition, some commits
> > > > depend on other commits that should be on different topic branches.
> > > > I will return to the topic-branch style next time.
> > > > 
> > > > The largest feature of this series is shrinking and simplification,
> > > > with the following diffstat summary:
> > > > 
> > > >  79 files changed, 1496 insertions(+), 4211 deletions(-)
> > > > 
> > > > In other words, this series represents a net reduction of more than 2700
> > > > lines of code.
> > > > 
> > > > These commits were posted to LKML:
> > > > 
> > > > 	http://lkml.kernel.org/r/20170525215934.GA11578@linux.vnet.ibm.com
> > > 
> > > I did raise some issues (AFAICT, unresolved) concerning...
> > > 
> > > 
> > > > 
> > > > Two of these commits (46/88 and 48/88) have been deferred, most likely
> > > > to v4.14.  All of the remaining commits have been subjected to the 0day
> > > > Test Robot and -next testing, and are availiable in teh 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 6d48152eafde1f0d0a4a9e0584fa7d9ff4fbfdac:
> > > > 
> > > >   rcu: Remove RCU CPU stall warnings from Tiny RCU (2017-06-08 18:52:45 -0700)
> > > > 
> > > > ----------------------------------------------------------------
> > > > Arnd Bergmann (1):
> > > >       bcm47xx: Fix build regression
> > > > 
> > > > Paul E. McKenney (83):
> > > >       rcutorture: Add lockdep to one of the SRCU scenarios
> > > >       rcutorture: Add three-level tree test for Tree SRCU
> > > >       rcutorture: Fix bug in reporting Kconfig mis-settings
> > > >       rcutorture: Add a scenario for Tiny SRCU
> > > >       rcutorture: Add a scenario for Classic SRCU
> > > >       rcu: Prevent rcu_barrier() from starting needless grace periods
> > > >       rcutorture: Correctly handle CONFIG_RCU_TORTURE_TEST_* options
> > > >       rcutorture: Update test scenarios based on new Kconfig dependencies
> > > >       srcu: Eliminate possibility of destructive counter overflow
> > > >       rcu: Complain if blocking in preemptible RCU read-side critical section
> > > >       rcuperf: Defer expedited/normal check to end of test
> > > >       rcuperf: Remove conflicting Kconfig options
> > > >       rcu: Remove obsolete reference to synchronize_kernel()
> > > >       rcuperf: Add ability to performance-test call_rcu() and friends
> > > >       rcuperf: Add a Kconfig-fragment file for Classic SRCU
> > > >       rcu: Make sync_rcu_preempt_exp_done() return bool
> > > >       checkpatch: Remove checks for expedited grace periods
> > > >       rcuperf: Add test for dynamically initialized srcu_struct
> > > >       doc/atomic_ops: Clarify smp_mb__{before,after}_atomic()
> > > >       atomics: Add header comment so spin_unlock_wait()
> > > 
> > > ... this one: c.f.,
> > > 
> > >   http://www.mail-archive.com/linux-kernel@vger.kernel.org/msg1418503.html
> > > 
> > > Any hints about those?
> > 
> > I suggest being -extremely- clear.  This is about ARM, correct?
> > If so, lay out the exact situation (code example, which hardware,
> > which spin_unlock_wait(), which sequence of events) that could lead to
> > the failure.
> > 
> > The problem here is that no one knows which of the 30 CPU families you
> > might be talking about, nor do they know exactly what the problem is.
> > I didn't worry about it at the time because I figured that you had
> > sent private email to Will with the full story.
> > 
> > Yes, the four of us (you, Alan, Luc, and me) discussed it, but we weren't
> > sure whether it was a bug in the memory model, the spin_unlock_wait()
> > code, or my description of spin_unlock_wait().  Given that Will didn't
> > object to my April 13th email (the one that you were not CCed on),
> > I figured that he wasn't going to claim that the spin_unlock_wait()
> > description was wrong, especially since he went to so much effort some
> > years back to make ARM64 meet that description.
> > 
> > So again, I recommend replying to your msg1418503.html email with
> > a code fragment demonstrating the problem, exact identification of
> > the hardware that might be susceptible (ARM64? ARM32? Which ARM32?),
> > exact identification of which spin_unlock_wait() function you suspect,
> > and a clear bullet-form sequence of events that shows how you believe
> > that the problem can occur.
> > 
> > That makes it easy for people to see what your concern is, easy for
> > them to check their code and hardware, and hard for them to ignore you.
> > 
> > Make sense?
> 
> My concerns originates from the fact that none of the implementations
> (of spin_unlock_wait()) for the architectures touched by:
> 
>   726328d92a42b6d4b76078e2659f43067f82c4e8
>   ("locking/spinlock, arch: Update and fix spin_unlock_wait() implementations"
> 
> currently contain any traces of that RELEASE/spin_unlock() from your:
> 
>   "Semantically this is equivalent to a spin_lock() immediately followed
>    by a spin_unlock()."
> 
> In fact, the header of that commit states:
> 
>   "The update is in semantics; where it previously was only a control
>    dependency, we now upgrade to a full load-acquire [...]"
> 
> For an example leveraging this RELEASE, consider:
> 
>   [initially: X = 0, s UNLOCKED]
> 
>   P0                      P1
>   X = 1;                  spin_lock(s);
>   spin_unlock_wait(s);    r0 = X;
> 
> According to the "spin_lock(); spin_unlock() semantics" this has one
> non-deadlocking execution, and the RELEASE from the spin_unlock_wait()
> (paired with the ACQUIRE from the spin_lock() in P1) guarantees that
> r0 = 1 in this execution. AFAICT, this same conclusion does not hold
> according to the "smp_cond_load_acquire() semantics" (726328d92a42b).

OK.  For exactly which CPU families do you believe that this fails to
hold.  That is, given the implementations of spin_unlock_wait() and
spin_lock() for the various CPU families, which will break and why?

							Thanx, Paul

[toc] | [prev] | [next] | [standalone]


#1669459

FromAndrea Parri <parri.andrea@gmail.com>
Date2017-06-19 18:30 +0200
Message-ID<tU7IS-51y-15@gated-at.bofh.it>
In reply to#1666203
On Wed, Jun 14, 2017 at 01:23:29PM -0700, Paul E. McKenney wrote:
> On Wed, Jun 14, 2017 at 04:33:22PM +0200, Andrea Parri wrote:
> > On Tue, Jun 13, 2017 at 09:33:17PM -0700, Paul E. McKenney wrote:
> > > On Wed, Jun 14, 2017 at 04:54:04AM +0200, Andrea Parri wrote:
> > > > On Mon, Jun 12, 2017 at 02:37:55PM -0700, Paul E. McKenney wrote:
> > > > > Hello, Ingo,
> > > > > 
> > > > > This pull request is unusual in being a single linear set of commits,
> > > > > as opposed to my usual topic branches.  This is due to the many
> > > > > large-footprint changes, which means that reasonable topic branches
> > > > > result in large numbers of merge conflicts.  In addition, some commits
> > > > > depend on other commits that should be on different topic branches.
> > > > > I will return to the topic-branch style next time.
> > > > > 
> > > > > The largest feature of this series is shrinking and simplification,
> > > > > with the following diffstat summary:
> > > > > 
> > > > >  79 files changed, 1496 insertions(+), 4211 deletions(-)
> > > > > 
> > > > > In other words, this series represents a net reduction of more than 2700
> > > > > lines of code.
> > > > > 
> > > > > These commits were posted to LKML:
> > > > > 
> > > > > 	http://lkml.kernel.org/r/20170525215934.GA11578@linux.vnet.ibm.com
> > > > 
> > > > I did raise some issues (AFAICT, unresolved) concerning...
> > > > 
> > > > 
> > > > > 
> > > > > Two of these commits (46/88 and 48/88) have been deferred, most likely
> > > > > to v4.14.  All of the remaining commits have been subjected to the 0day
> > > > > Test Robot and -next testing, and are availiable in teh 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 6d48152eafde1f0d0a4a9e0584fa7d9ff4fbfdac:
> > > > > 
> > > > >   rcu: Remove RCU CPU stall warnings from Tiny RCU (2017-06-08 18:52:45 -0700)
> > > > > 
> > > > > ----------------------------------------------------------------
> > > > > Arnd Bergmann (1):
> > > > >       bcm47xx: Fix build regression
> > > > > 
> > > > > Paul E. McKenney (83):
> > > > >       rcutorture: Add lockdep to one of the SRCU scenarios
> > > > >       rcutorture: Add three-level tree test for Tree SRCU
> > > > >       rcutorture: Fix bug in reporting Kconfig mis-settings
> > > > >       rcutorture: Add a scenario for Tiny SRCU
> > > > >       rcutorture: Add a scenario for Classic SRCU
> > > > >       rcu: Prevent rcu_barrier() from starting needless grace periods
> > > > >       rcutorture: Correctly handle CONFIG_RCU_TORTURE_TEST_* options
> > > > >       rcutorture: Update test scenarios based on new Kconfig dependencies
> > > > >       srcu: Eliminate possibility of destructive counter overflow
> > > > >       rcu: Complain if blocking in preemptible RCU read-side critical section
> > > > >       rcuperf: Defer expedited/normal check to end of test
> > > > >       rcuperf: Remove conflicting Kconfig options
> > > > >       rcu: Remove obsolete reference to synchronize_kernel()
> > > > >       rcuperf: Add ability to performance-test call_rcu() and friends
> > > > >       rcuperf: Add a Kconfig-fragment file for Classic SRCU
> > > > >       rcu: Make sync_rcu_preempt_exp_done() return bool
> > > > >       checkpatch: Remove checks for expedited grace periods
> > > > >       rcuperf: Add test for dynamically initialized srcu_struct
> > > > >       doc/atomic_ops: Clarify smp_mb__{before,after}_atomic()
> > > > >       atomics: Add header comment so spin_unlock_wait()
> > > > 
> > > > ... this one: c.f.,
> > > > 
> > > >   http://www.mail-archive.com/linux-kernel@vger.kernel.org/msg1418503.html
> > > > 
> > > > Any hints about those?
> > > 
> > > I suggest being -extremely- clear.  This is about ARM, correct?
> > > If so, lay out the exact situation (code example, which hardware,
> > > which spin_unlock_wait(), which sequence of events) that could lead to
> > > the failure.
> > > 
> > > The problem here is that no one knows which of the 30 CPU families you
> > > might be talking about, nor do they know exactly what the problem is.
> > > I didn't worry about it at the time because I figured that you had
> > > sent private email to Will with the full story.
> > > 
> > > Yes, the four of us (you, Alan, Luc, and me) discussed it, but we weren't
> > > sure whether it was a bug in the memory model, the spin_unlock_wait()
> > > code, or my description of spin_unlock_wait().  Given that Will didn't
> > > object to my April 13th email (the one that you were not CCed on),
> > > I figured that he wasn't going to claim that the spin_unlock_wait()
> > > description was wrong, especially since he went to so much effort some
> > > years back to make ARM64 meet that description.
> > > 
> > > So again, I recommend replying to your msg1418503.html email with
> > > a code fragment demonstrating the problem, exact identification of
> > > the hardware that might be susceptible (ARM64? ARM32? Which ARM32?),
> > > exact identification of which spin_unlock_wait() function you suspect,
> > > and a clear bullet-form sequence of events that shows how you believe
> > > that the problem can occur.
> > > 
> > > That makes it easy for people to see what your concern is, easy for
> > > them to check their code and hardware, and hard for them to ignore you.
> > > 
> > > Make sense?
> > 
> > My concerns originates from the fact that none of the implementations
> > (of spin_unlock_wait()) for the architectures touched by:
> > 
> >   726328d92a42b6d4b76078e2659f43067f82c4e8
> >   ("locking/spinlock, arch: Update and fix spin_unlock_wait() implementations"
> > 
> > currently contain any traces of that RELEASE/spin_unlock() from your:
> > 
> >   "Semantically this is equivalent to a spin_lock() immediately followed
> >    by a spin_unlock()."
> > 
> > In fact, the header of that commit states:
> > 
> >   "The update is in semantics; where it previously was only a control
> >    dependency, we now upgrade to a full load-acquire [...]"
> > 
> > For an example leveraging this RELEASE, consider:
> > 
> >   [initially: X = 0, s UNLOCKED]
> > 
> >   P0                      P1
> >   X = 1;                  spin_lock(s);
> >   spin_unlock_wait(s);    r0 = X;
> > 
> > According to the "spin_lock(); spin_unlock() semantics" this has one
> > non-deadlocking execution, and the RELEASE from the spin_unlock_wait()
> > (paired with the ACQUIRE from the spin_lock() in P1) guarantees that
> > r0 = 1 in this execution. AFAICT, this same conclusion does not hold
> > according to the "smp_cond_load_acquire() semantics" (726328d92a42b).
> 
> OK.  For exactly which CPU families do you believe that this fails to
> hold.  That is, given the implementations of spin_unlock_wait() and
> spin_lock() for the various CPU families, which will break and why?

Considering the case of x86, the question amounts to ask whether
the "exists" clause of the following test can be satisfied:

X86 TEST
{
 1:EAX=1;
}
 P0          | P1                ;
 MOV [X],$1  | LOCK XCHG [s],EAX ;
 MOV EAX,[s] | MOV EBX,[X]       ;
exists
(0:EAX=0 /\ 1:EBX=0)

The answer is "Yes", as illustrated by the following sequence of
events:

  1) P0's store to X is placed into the store buffer (of P0);
  2) P0 loads 0 from s;
  3) P1 executes LOCK XCHG;
  4) P1 loads X=0 from memory;
  5) P0's store to X is flushed from store buffer to memory.

---

This analysis shows that the x86 implementation needs additional
synchronization to meet a "spin_lock();spin_unlock()" semantics.

I believe that the same conclusion holds for other architectures
(e.g., sparc, ia64, arm(32), alpha).

In fact, the only two implementations I know that _seem_ able to
meet that semantics are arm64's and powerpc's.

  Andrea


> 
> 							Thanx, Paul
> 

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web