lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Tue, 8 Mar 2016 09:53:42 +0100
From:	Ingo Molnar <mingo@...nel.org>
To:	"Paul E. McKenney" <paulmck@...ux.vnet.ibm.com>
Cc:	linux-kernel@...r.kernel.org, yang.shi@...aro.org, tj@...nel.org,
	paul.gortmaker@...driver.com, boqun.feng@...il.com,
	tglx@...utronix.de, gang.chen.5i5j@...il.com, sj38.park@...il.com
Subject: Re: [GIT PULL rcu/next] RCU commits for 4.6


* Paul E. McKenney <paulmck@...ux.vnet.ibm.com> wrote:

> Hello, Ingo,
> 
> Note that this series conflicts with some commits in Thomas Gleixner's
> hotplug series and in Daniel Wagner's swait series, both of which are in
> -tip.  I have suggested conflict-resolution commits for Daniel's commits
> (25f0d48a4299 "Merge commit 'abedf8e2419fb873d919dd74de2e84b510259339'
> into wagi.2016.03.01a") and for Thomas's commits (dc96aeda643f "Merge
> commit '27d50c7eeb0f' into wagi.2016.03.01a"), which you might find
> useful.  These merge commits pass rcutorture testing, 0day robot testing,
> and -next testing.
> 
> The changes in this series include:
> 
> 1.	Documentation updates, including RCU data structure design-level
> 	documentation.
> 
> 	https://lkml.org/lkml/2016/2/24/26
> 
> 2.	Miscellaneous fixes.
> 
> 	https://lkml.org/lkml/2016/2/24/34
> 
> 3.	Torture-test updates.
> 
> 	https://lkml.org/lkml/2016/2/24/50
> 
> As noted earlier, 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 2863b4e3dd92a9d697dd66b219710e478e0a4531:
> 
>   Merge branches 'doc.2015.02.23a', 'fixes.2015.02.23a' and 'torture.2015.02.23a' into HEAD (2016-02-23 20:05:19 -0800)
> 
> ----------------------------------------------------------------
> Boqun Feng (3):
>       sparse: Add __private to privatize members of structs
>       RCU: Privatize rcu_node::lock
>       irq: Privatize irq_common_data::state_use_accessors
> 
> Chen Gang (1):
>       rcu: Remove useless rcu_data_p when !PREEMPT_RCU
> 
> Paul E. McKenney (25):
>       rcutorture: Add checks for rcutorture writer starvation
>       rcutorture: Don't keep empty console.log.diags files
>       rcutorture: Check for self-detected stalls
>       documentation:  Add real-time requirements from CPU-bound workloads
>       documentation: Fix control dependency and identical stores
>       documentation: Fix memory-barriers.txt section references
>       documentation: Add synchronize_rcu_mult() to the requirements
>       documentation: Remove obsolete reference to RCU-protected indexes
>       documentation: Subsequent writes ordered by rcu_dereference()
>       documentation: Distinguish between local and global transitivity
>       documentation:  Add alternative release-acquire outcome
>       documentation: Add documentation for RCU's major data structures
>       documentation: Explain why rcu_read_lock() needs no barrier()
>       documentation: Transitivity is not cumulativity
>       documentation: Document illegality of call_rcu() from offline CPUs
>       documentation: Explain how RCU's combining tree fights contention
>       rcu: Assign false instead of 0 for ->core_needs_qs
>       rcu: Update rcu_report_qs_rsp() comment
>       rcu: Stop treating in-kernel CPU-bound workloads as errors
>       rcu: Set rdp->gpwrap when CPU is idle
>       rcutorture: Correct no-expedite console messages
>       rcu: Document unique-name limitation for DEFINE_STATIC_SRCU()
>       rcu: Catch up rcu_report_qs_rdp() comment with reality
>       rcu: Export rcu_gp_is_normal()
>       Merge branches 'doc.2015.02.23a', 'fixes.2015.02.23a' and 'torture.2015.02.23a' into HEAD
> 
> Paul Gortmaker (1):
>       rcu: Make rcu/tiny_plugin.h explicitly non-modular
> 
> SeongJae Park (1):
>       documentation: Clarify compiler store-fusion example
> 
> Yang Shi (1):
>       rcu: Remove rcu_user_hooks_switch
> 
>  .../Design/Data-Structures/BigTreeClassicRCU.svg   |  474 +++++++
>  .../Design/Data-Structures/BigTreeClassicRCUBH.svg |  499 +++++++
>  .../Data-Structures/BigTreeClassicRCUBHdyntick.svg |  695 ++++++++++
>  .../Data-Structures/BigTreePreemptRCUBHdyntick.svg |  741 +++++++++++
>  .../BigTreePreemptRCUBHdyntickCB.svg               |  858 ++++++++++++
>  .../Design/Data-Structures/Data-Structures.html    | 1395 ++++++++++++++++++++
>  .../Design/Data-Structures/Data-Structures.htmlx   | 1295 ++++++++++++++++++
>  .../Design/Data-Structures/HugeTreeClassicRCU.svg  |  939 +++++++++++++
>  .../RCU/Design/Data-Structures/TreeLevel.svg       |  828 ++++++++++++
>  .../RCU/Design/Data-Structures/TreeMapping.svg     |  305 +++++
>  .../Design/Data-Structures/TreeMappingLevel.svg    |  380 ++++++
>  .../RCU/Design/Data-Structures/blkd_task.svg       |  843 ++++++++++++
>  .../RCU/Design/Data-Structures/nxtlist.svg         |  396 ++++++
>  .../RCU/Design/Requirements/Requirements.html      |  225 +++-
>  .../RCU/Design/Requirements/Requirements.htmlx     |  121 +-
>  Documentation/memory-barriers.txt                  |  141 +-
>  include/linux/compiler.h                           |   12 +-
>  include/linux/irq.h                                |    6 +-
>  include/linux/rcupdate.h                           |    2 -
>  include/linux/srcu.h                               |   19 +-
>  kernel/irq/internals.h                             |    4 +
>  kernel/rcu/rcutorture.c                            |   14 +-
>  kernel/rcu/tiny_plugin.h                           |   15 +-
>  kernel/rcu/tree.c                                  |  143 +-
>  kernel/rcu/tree.h                                  |   42 +-
>  kernel/rcu/tree_plugin.h                           |   27 +-
>  kernel/rcu/update.c                                |    1 +
>  scripts/checkpatch.pl                              |    3 +-
>  .../selftests/rcutorture/bin/parse-console.sh      |    6 +-
>  29 files changed, 10233 insertions(+), 196 deletions(-)
>  create mode 100644 Documentation/RCU/Design/Data-Structures/BigTreeClassicRCU.svg
>  create mode 100644 Documentation/RCU/Design/Data-Structures/BigTreeClassicRCUBH.svg
>  create mode 100644 Documentation/RCU/Design/Data-Structures/BigTreeClassicRCUBHdyntick.svg
>  create mode 100644 Documentation/RCU/Design/Data-Structures/BigTreePreemptRCUBHdyntick.svg
>  create mode 100644 Documentation/RCU/Design/Data-Structures/BigTreePreemptRCUBHdyntickCB.svg
>  create mode 100644 Documentation/RCU/Design/Data-Structures/Data-Structures.html
>  create mode 100644 Documentation/RCU/Design/Data-Structures/Data-Structures.htmlx
>  create mode 100644 Documentation/RCU/Design/Data-Structures/HugeTreeClassicRCU.svg
>  create mode 100644 Documentation/RCU/Design/Data-Structures/TreeLevel.svg
>  create mode 100644 Documentation/RCU/Design/Data-Structures/TreeMapping.svg
>  create mode 100644 Documentation/RCU/Design/Data-Structures/TreeMappingLevel.svg
>  create mode 100644 Documentation/RCU/Design/Data-Structures/blkd_task.svg
>  create mode 100644 Documentation/RCU/Design/Data-Structures/nxtlist.svg

Pulled, thanks a lot Paul!

So I've done the conflict resolutions with tmp:smp/hotplug and tip:sched/core 
myself, and came up with a mostly identical resolution, except this difference 
with your resolution in wagi.2016.03.01a:

--- linux-next/kernel/rcu/tree.c
+++ tip/kernel/rcu/tree.c
@@ -2046,8 +2046,8 @@ static void rcu_gp_cleanup(struct rcu_st
 		/* smp_mb() provided by prior unlock-lock pair. */
 		nocb += rcu_future_gp_cleanup(rsp, rnp);
 		sq = rcu_nocb_gp_get(rnp);
-		raw_spin_unlock_irq_rcu_node(rnp);
 		rcu_nocb_gp_cleanup(sq);
+		raw_spin_unlock_irq_rcu_node(rnp);
 		cond_resched_rcu_qs();
 		WRITE_ONCE(rsp->gp_activity, jiffies);
 		rcu_gp_slow(rsp, gp_cleanup_delay);

but your resolution is better, rcu_nocb_gp_cleanup() can (and should) be done 
outside of the rcu_node lock.

So we have the same resolution now, which is good! ;-)

Thanks,

	Ingo

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ