* [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.