All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH tip/core/rcu 0/3] SRCU updates for v5.9
@ 2020-06-23  0:33 Paul E. McKenney
  2020-06-23  0:33 ` [PATCH tip/core/rcu 1/3] srcu: Fix a typo in comment "amoritized"->"amortized" paulmck
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Paul E. McKenney @ 2020-06-23  0:33 UTC (permalink / raw)
  To: rcu
  Cc: linux-kernel, kernel-team, mingo, jiangshanlai, dipankar, akpm,
	mathieu.desnoyers, josh, tglx, peterz, rostedt, dhowells,
	edumazet, fweisbec, oleg, joel

Hello!

This series provides SRCU updates.

1.	Fix a typo in comment "amoritized"->"amortized", courtesy of
	Ethon Paul.

2.	Avoid local_irq_save() before acquiring spinlock_t, courtesy
	of Sebastian Andrzej Siewior.

3.	Remove KCSAN stubs.

							Thanx, Paul

------------------------------------------------------------------------

 srcutree.c |   29 ++++++++---------------------
 1 file changed, 8 insertions(+), 21 deletions(-)

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH tip/core/rcu 1/3] srcu: Fix a typo in comment "amoritized"->"amortized"
  2020-06-23  0:33 [PATCH tip/core/rcu 0/3] SRCU updates for v5.9 Paul E. McKenney
@ 2020-06-23  0:33 ` paulmck
  2020-06-23  0:33 ` [PATCH tip/core/rcu 2/3] srcu: Avoid local_irq_save() before acquiring spinlock_t paulmck
  2020-06-23  0:33 ` [PATCH tip/core/rcu 3/3] srcu: Remove KCSAN stubs paulmck
  2 siblings, 0 replies; 6+ messages in thread
From: paulmck @ 2020-06-23  0:33 UTC (permalink / raw)
  To: rcu
  Cc: linux-kernel, kernel-team, mingo, jiangshanlai, dipankar, akpm,
	mathieu.desnoyers, josh, tglx, peterz, rostedt, dhowells,
	edumazet, fweisbec, oleg, joel, Ethon Paul, Paul E . McKenney

From: Ethon Paul <ethp@qq.com>

This commit fixes a typo in a comment.

Signed-off-by: Ethon Paul <ethp@qq.com>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
---
 kernel/rcu/srcutree.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/rcu/srcutree.c b/kernel/rcu/srcutree.c
index 6d3ef70..8ff71e5 100644
--- a/kernel/rcu/srcutree.c
+++ b/kernel/rcu/srcutree.c
@@ -766,7 +766,7 @@ static void srcu_flip(struct srcu_struct *ssp)
  * it, if this function was preempted for enough time for the counters
  * to wrap, it really doesn't matter whether or not we expedite the grace
  * period.  The extra overhead of a needlessly expedited grace period is
- * negligible when amoritized over that time period, and the extra latency
+ * negligible when amortized over that time period, and the extra latency
  * of a needlessly non-expedited grace period is similarly negligible.
  */
 static bool srcu_might_be_idle(struct srcu_struct *ssp)
-- 
2.9.5


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH tip/core/rcu 2/3] srcu: Avoid local_irq_save() before acquiring spinlock_t
  2020-06-23  0:33 [PATCH tip/core/rcu 0/3] SRCU updates for v5.9 Paul E. McKenney
  2020-06-23  0:33 ` [PATCH tip/core/rcu 1/3] srcu: Fix a typo in comment "amoritized"->"amortized" paulmck
@ 2020-06-23  0:33 ` paulmck
  2020-06-23  0:33 ` [PATCH tip/core/rcu 3/3] srcu: Remove KCSAN stubs paulmck
  2 siblings, 0 replies; 6+ messages in thread
From: paulmck @ 2020-06-23  0:33 UTC (permalink / raw)
  To: rcu
  Cc: linux-kernel, kernel-team, mingo, jiangshanlai, dipankar, akpm,
	mathieu.desnoyers, josh, tglx, peterz, rostedt, dhowells,
	edumazet, fweisbec, oleg, joel, Sebastian Andrzej Siewior,
	Paul E. McKenney

From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>

SRCU disables interrupts to get a stable per-CPU pointer and then
acquires the spinlock which is in the per-CPU data structure. The
release uses spin_unlock_irqrestore(). While this is correct on a non-RT
kernel, this conflicts with the RT semantics because the spinlock is
converted to a 'sleeping' spinlock. Sleeping locks can obviously not be
acquired with interrupts disabled.

Acquire the per-CPU pointer `ssp->sda' without disabling preemption and
then acquire the spinlock_t of the per-CPU data structure. The lock will
ensure that the data is consistent.

The added call to check_init_srcu_struct() is now needed because a
statically defined srcu_struct may remain uninitialized until this
point and the newly introduced locking operation requires an initialized
spinlock_t.

This change was tested for four hours with 8*SRCU-N and 8*SRCU-P without
causing any warnings.

Cc: Lai Jiangshan <jiangshanlai@gmail.com>
Cc: "Paul E. McKenney" <paulmck@kernel.org>
Cc: Josh Triplett <josh@joshtriplett.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: rcu@vger.kernel.org
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
---
 kernel/rcu/srcutree.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/kernel/rcu/srcutree.c b/kernel/rcu/srcutree.c
index 8ff71e5..c100acf 100644
--- a/kernel/rcu/srcutree.c
+++ b/kernel/rcu/srcutree.c
@@ -777,14 +777,15 @@ static bool srcu_might_be_idle(struct srcu_struct *ssp)
 	unsigned long t;
 	unsigned long tlast;
 
+	check_init_srcu_struct(ssp);
 	/* If the local srcu_data structure has callbacks, not idle.  */
-	local_irq_save(flags);
-	sdp = this_cpu_ptr(ssp->sda);
+	sdp = raw_cpu_ptr(ssp->sda);
+	spin_lock_irqsave_rcu_node(sdp, flags);
 	if (rcu_segcblist_pend_cbs(&sdp->srcu_cblist)) {
-		local_irq_restore(flags);
+		spin_unlock_irqrestore_rcu_node(sdp, flags);
 		return false; /* Callbacks already present, so not idle. */
 	}
-	local_irq_restore(flags);
+	spin_unlock_irqrestore_rcu_node(sdp, flags);
 
 	/*
 	 * No local callbacks, so probabalistically probe global state.
@@ -864,9 +865,8 @@ static void __call_srcu(struct srcu_struct *ssp, struct rcu_head *rhp,
 	}
 	rhp->func = func;
 	idx = srcu_read_lock(ssp);
-	local_irq_save(flags);
-	sdp = this_cpu_ptr(ssp->sda);
-	spin_lock_rcu_node(sdp);
+	sdp = raw_cpu_ptr(ssp->sda);
+	spin_lock_irqsave_rcu_node(sdp, flags);
 	rcu_segcblist_enqueue(&sdp->srcu_cblist, rhp);
 	rcu_segcblist_advance(&sdp->srcu_cblist,
 			      rcu_seq_current(&ssp->srcu_gp_seq));
-- 
2.9.5


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH tip/core/rcu 3/3] srcu: Remove KCSAN stubs
  2020-06-23  0:33 [PATCH tip/core/rcu 0/3] SRCU updates for v5.9 Paul E. McKenney
  2020-06-23  0:33 ` [PATCH tip/core/rcu 1/3] srcu: Fix a typo in comment "amoritized"->"amortized" paulmck
  2020-06-23  0:33 ` [PATCH tip/core/rcu 2/3] srcu: Avoid local_irq_save() before acquiring spinlock_t paulmck
@ 2020-06-23  0:33 ` paulmck
  2020-06-24  1:43   ` kernel test robot
  2 siblings, 1 reply; 6+ messages in thread
From: paulmck @ 2020-06-23  0:33 UTC (permalink / raw)
  To: rcu
  Cc: linux-kernel, kernel-team, mingo, jiangshanlai, dipankar, akpm,
	mathieu.desnoyers, josh, tglx, peterz, rostedt, dhowells,
	edumazet, fweisbec, oleg, joel, Paul E. McKenney

From: "Paul E. McKenney" <paulmck@kernel.org>

KCSAN is now in mainline, so this commit removes the stubs for the
data_race(), ASSERT_EXCLUSIVE_WRITER(), and ASSERT_EXCLUSIVE_ACCESS()
macros.

Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
---
 kernel/rcu/srcutree.c | 13 -------------
 1 file changed, 13 deletions(-)

diff --git a/kernel/rcu/srcutree.c b/kernel/rcu/srcutree.c
index c100acf..c13348e 100644
--- a/kernel/rcu/srcutree.c
+++ b/kernel/rcu/srcutree.c
@@ -29,19 +29,6 @@
 #include "rcu.h"
 #include "rcu_segcblist.h"
 
-#ifndef data_race
-#define data_race(expr)							\
-	({								\
-		expr;							\
-	})
-#endif
-#ifndef ASSERT_EXCLUSIVE_WRITER
-#define ASSERT_EXCLUSIVE_WRITER(var) do { } while (0)
-#endif
-#ifndef ASSERT_EXCLUSIVE_ACCESS
-#define ASSERT_EXCLUSIVE_ACCESS(var) do { } while (0)
-#endif
-
 /* Holdoff in nanoseconds for auto-expediting. */
 #define DEFAULT_SRCU_EXP_HOLDOFF (25 * 1000)
 static ulong exp_holdoff = DEFAULT_SRCU_EXP_HOLDOFF;
-- 
2.9.5


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH tip/core/rcu 3/3] srcu: Remove KCSAN stubs
  2020-06-23  0:33 ` [PATCH tip/core/rcu 3/3] srcu: Remove KCSAN stubs paulmck
@ 2020-06-24  1:43   ` kernel test robot
  2020-06-24  3:57     ` Paul E. McKenney
  0 siblings, 1 reply; 6+ messages in thread
From: kernel test robot @ 2020-06-24  1:43 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 4252 bytes --]

Hi,

I love your patch! Yet something to improve:

[auto build test ERROR on tip/core/rcu]

url:    https://github.com/0day-ci/linux/commits/paulmck-kernel-org/srcu-Fix-a-typo-in-comment-amoritized-amortized/20200623-085757
base:   https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git cb3cb6733fbd8fd8d2c716095fdca42dadba2063
config: x86_64-rhel-7.6 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-13) 9.3.0
reproduce (this is a W=1 build):
        # save the attached .config to linux build tree
        make W=1 ARCH=x86_64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   kernel/rcu/srcutree.c: In function 'srcu_torture_stats_print':
>> kernel/rcu/srcutree.c:1271:8: error: implicit declaration of function 'data_race' [-Werror=implicit-function-declaration]
    1271 |   u0 = data_race(sdp->srcu_unlock_count[!idx]);
         |        ^~~~~~~~~
   cc1: some warnings being treated as errors

vim +/data_race +1271 kernel/rcu/srcutree.c

1f4f6da1c80905 Paul E. McKenney 2017-04-21  1254  
aacb5d91ab1bfb Paul E. McKenney 2018-10-28  1255  void srcu_torture_stats_print(struct srcu_struct *ssp, char *tt, char *tf)
115a1a5285664f Paul E. McKenney 2017-05-22  1256  {
115a1a5285664f Paul E. McKenney 2017-05-22  1257  	int cpu;
115a1a5285664f Paul E. McKenney 2017-05-22  1258  	int idx;
ac3748c6042660 Paul E. McKenney 2017-05-22  1259  	unsigned long s0 = 0, s1 = 0;
115a1a5285664f Paul E. McKenney 2017-05-22  1260  
aacb5d91ab1bfb Paul E. McKenney 2018-10-28  1261  	idx = ssp->srcu_idx & 0x1;
52e17ba1d063ab Paul E. McKenney 2018-06-19  1262  	pr_alert("%s%s Tree SRCU g%ld per-CPU(idx=%d):",
aacb5d91ab1bfb Paul E. McKenney 2018-10-28  1263  		 tt, tf, rcu_seq_current(&ssp->srcu_gp_seq), idx);
115a1a5285664f Paul E. McKenney 2017-05-22  1264  	for_each_possible_cpu(cpu) {
115a1a5285664f Paul E. McKenney 2017-05-22  1265  		unsigned long l0, l1;
115a1a5285664f Paul E. McKenney 2017-05-22  1266  		unsigned long u0, u1;
115a1a5285664f Paul E. McKenney 2017-05-22  1267  		long c0, c1;
5ab07a8df4d6c9 Paul E. McKenney 2018-05-22  1268  		struct srcu_data *sdp;
115a1a5285664f Paul E. McKenney 2017-05-22  1269  
aacb5d91ab1bfb Paul E. McKenney 2018-10-28  1270  		sdp = per_cpu_ptr(ssp->sda, cpu);
b68c6146512d92 Paul E. McKenney 2020-01-03 @1271  		u0 = data_race(sdp->srcu_unlock_count[!idx]);
b68c6146512d92 Paul E. McKenney 2020-01-03  1272  		u1 = data_race(sdp->srcu_unlock_count[idx]);
115a1a5285664f Paul E. McKenney 2017-05-22  1273  
115a1a5285664f Paul E. McKenney 2017-05-22  1274  		/*
115a1a5285664f Paul E. McKenney 2017-05-22  1275  		 * Make sure that a lock is always counted if the corresponding
115a1a5285664f Paul E. McKenney 2017-05-22  1276  		 * unlock is counted.
115a1a5285664f Paul E. McKenney 2017-05-22  1277  		 */
115a1a5285664f Paul E. McKenney 2017-05-22  1278  		smp_rmb();
115a1a5285664f Paul E. McKenney 2017-05-22  1279  
b68c6146512d92 Paul E. McKenney 2020-01-03  1280  		l0 = data_race(sdp->srcu_lock_count[!idx]);
b68c6146512d92 Paul E. McKenney 2020-01-03  1281  		l1 = data_race(sdp->srcu_lock_count[idx]);
115a1a5285664f Paul E. McKenney 2017-05-22  1282  
115a1a5285664f Paul E. McKenney 2017-05-22  1283  		c0 = l0 - u0;
115a1a5285664f Paul E. McKenney 2017-05-22  1284  		c1 = l1 - u1;
7e210a653ec944 Paul E. McKenney 2019-06-28  1285  		pr_cont(" %d(%ld,%ld %c)",
7e210a653ec944 Paul E. McKenney 2019-06-28  1286  			cpu, c0, c1,
7e210a653ec944 Paul E. McKenney 2019-06-28  1287  			"C."[rcu_segcblist_empty(&sdp->srcu_cblist)]);
ac3748c6042660 Paul E. McKenney 2017-05-22  1288  		s0 += c0;
ac3748c6042660 Paul E. McKenney 2017-05-22  1289  		s1 += c1;
115a1a5285664f Paul E. McKenney 2017-05-22  1290  	}
ac3748c6042660 Paul E. McKenney 2017-05-22  1291  	pr_cont(" T(%ld,%ld)\n", s0, s1);
115a1a5285664f Paul E. McKenney 2017-05-22  1292  }
115a1a5285664f Paul E. McKenney 2017-05-22  1293  EXPORT_SYMBOL_GPL(srcu_torture_stats_print);
115a1a5285664f Paul E. McKenney 2017-05-22  1294  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 48637 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH tip/core/rcu 3/3] srcu: Remove KCSAN stubs
  2020-06-24  1:43   ` kernel test robot
@ 2020-06-24  3:57     ` Paul E. McKenney
  0 siblings, 0 replies; 6+ messages in thread
From: Paul E. McKenney @ 2020-06-24  3:57 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 4679 bytes --]

On Wed, Jun 24, 2020 at 09:43:38AM +0800, kernel test robot wrote:
> Hi,
> 
> I love your patch! Yet something to improve:
> 
> [auto build test ERROR on tip/core/rcu]
> 
> url:    https://github.com/0day-ci/linux/commits/paulmck-kernel-org/srcu-Fix-a-typo-in-comment-amoritized-amortized/20200623-085757
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git cb3cb6733fbd8fd8d2c716095fdca42dadba2063
> config: x86_64-rhel-7.6 (attached as .config)
> compiler: gcc-9 (Debian 9.3.0-13) 9.3.0
> reproduce (this is a W=1 build):
>         # save the attached .config to linux build tree
>         make W=1 ARCH=x86_64 
> 
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
> 
> All errors (new ones prefixed by >>):
> 
>    kernel/rcu/srcutree.c: In function 'srcu_torture_stats_print':
> >> kernel/rcu/srcutree.c:1271:8: error: implicit declaration of function 'data_race' [-Werror=implicit-function-declaration]
>     1271 |   u0 = data_race(sdp->srcu_unlock_count[!idx]);
>          |        ^~~~~~~~~
>    cc1: some warnings being treated as errors

This definition is in mainline, just not in v5.7.  So if you apply
this patch to v5.8-rc1, it should work fine.  I have nevertheless
moved this patch to my v5.10 stack to avoid confusion.

							Thanx, Paul

> vim +/data_race +1271 kernel/rcu/srcutree.c
> 
> 1f4f6da1c80905 Paul E. McKenney 2017-04-21  1254  
> aacb5d91ab1bfb Paul E. McKenney 2018-10-28  1255  void srcu_torture_stats_print(struct srcu_struct *ssp, char *tt, char *tf)
> 115a1a5285664f Paul E. McKenney 2017-05-22  1256  {
> 115a1a5285664f Paul E. McKenney 2017-05-22  1257  	int cpu;
> 115a1a5285664f Paul E. McKenney 2017-05-22  1258  	int idx;
> ac3748c6042660 Paul E. McKenney 2017-05-22  1259  	unsigned long s0 = 0, s1 = 0;
> 115a1a5285664f Paul E. McKenney 2017-05-22  1260  
> aacb5d91ab1bfb Paul E. McKenney 2018-10-28  1261  	idx = ssp->srcu_idx & 0x1;
> 52e17ba1d063ab Paul E. McKenney 2018-06-19  1262  	pr_alert("%s%s Tree SRCU g%ld per-CPU(idx=%d):",
> aacb5d91ab1bfb Paul E. McKenney 2018-10-28  1263  		 tt, tf, rcu_seq_current(&ssp->srcu_gp_seq), idx);
> 115a1a5285664f Paul E. McKenney 2017-05-22  1264  	for_each_possible_cpu(cpu) {
> 115a1a5285664f Paul E. McKenney 2017-05-22  1265  		unsigned long l0, l1;
> 115a1a5285664f Paul E. McKenney 2017-05-22  1266  		unsigned long u0, u1;
> 115a1a5285664f Paul E. McKenney 2017-05-22  1267  		long c0, c1;
> 5ab07a8df4d6c9 Paul E. McKenney 2018-05-22  1268  		struct srcu_data *sdp;
> 115a1a5285664f Paul E. McKenney 2017-05-22  1269  
> aacb5d91ab1bfb Paul E. McKenney 2018-10-28  1270  		sdp = per_cpu_ptr(ssp->sda, cpu);
> b68c6146512d92 Paul E. McKenney 2020-01-03 @1271  		u0 = data_race(sdp->srcu_unlock_count[!idx]);
> b68c6146512d92 Paul E. McKenney 2020-01-03  1272  		u1 = data_race(sdp->srcu_unlock_count[idx]);
> 115a1a5285664f Paul E. McKenney 2017-05-22  1273  
> 115a1a5285664f Paul E. McKenney 2017-05-22  1274  		/*
> 115a1a5285664f Paul E. McKenney 2017-05-22  1275  		 * Make sure that a lock is always counted if the corresponding
> 115a1a5285664f Paul E. McKenney 2017-05-22  1276  		 * unlock is counted.
> 115a1a5285664f Paul E. McKenney 2017-05-22  1277  		 */
> 115a1a5285664f Paul E. McKenney 2017-05-22  1278  		smp_rmb();
> 115a1a5285664f Paul E. McKenney 2017-05-22  1279  
> b68c6146512d92 Paul E. McKenney 2020-01-03  1280  		l0 = data_race(sdp->srcu_lock_count[!idx]);
> b68c6146512d92 Paul E. McKenney 2020-01-03  1281  		l1 = data_race(sdp->srcu_lock_count[idx]);
> 115a1a5285664f Paul E. McKenney 2017-05-22  1282  
> 115a1a5285664f Paul E. McKenney 2017-05-22  1283  		c0 = l0 - u0;
> 115a1a5285664f Paul E. McKenney 2017-05-22  1284  		c1 = l1 - u1;
> 7e210a653ec944 Paul E. McKenney 2019-06-28  1285  		pr_cont(" %d(%ld,%ld %c)",
> 7e210a653ec944 Paul E. McKenney 2019-06-28  1286  			cpu, c0, c1,
> 7e210a653ec944 Paul E. McKenney 2019-06-28  1287  			"C."[rcu_segcblist_empty(&sdp->srcu_cblist)]);
> ac3748c6042660 Paul E. McKenney 2017-05-22  1288  		s0 += c0;
> ac3748c6042660 Paul E. McKenney 2017-05-22  1289  		s1 += c1;
> 115a1a5285664f Paul E. McKenney 2017-05-22  1290  	}
> ac3748c6042660 Paul E. McKenney 2017-05-22  1291  	pr_cont(" T(%ld,%ld)\n", s0, s1);
> 115a1a5285664f Paul E. McKenney 2017-05-22  1292  }
> 115a1a5285664f Paul E. McKenney 2017-05-22  1293  EXPORT_SYMBOL_GPL(srcu_torture_stats_print);
> 115a1a5285664f Paul E. McKenney 2017-05-22  1294  
> 
> ---
> 0-DAY CI Kernel Test Service, Intel Corporation
> https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-06-24  3:57 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-23  0:33 [PATCH tip/core/rcu 0/3] SRCU updates for v5.9 Paul E. McKenney
2020-06-23  0:33 ` [PATCH tip/core/rcu 1/3] srcu: Fix a typo in comment "amoritized"->"amortized" paulmck
2020-06-23  0:33 ` [PATCH tip/core/rcu 2/3] srcu: Avoid local_irq_save() before acquiring spinlock_t paulmck
2020-06-23  0:33 ` [PATCH tip/core/rcu 3/3] srcu: Remove KCSAN stubs paulmck
2020-06-24  1:43   ` kernel test robot
2020-06-24  3:57     ` Paul E. McKenney

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.