* [v4.14-rt][report] arm: just another rcu_note_context_switch
@ 2018-02-14 22:12 Grygorii Strashko
2018-02-16 11:30 ` Sebastian Andrzej Siewior
0 siblings, 1 reply; 3+ messages in thread
From: Grygorii Strashko @ 2018-02-14 22:12 UTC (permalink / raw)
To: Steven Rostedt, linux-rt-users, Sebastian Andrzej Siewior; +Cc: LKML
Hi All,
I can see below warning during boot on few TI boards am437x-idk, am335x-evm, am335x-ice
All of them are non-SMP
[ 1.229376] NET: Registered protocol family 10
[ 1.235443] ------------[ cut here ]------------
[ 1.235489] WARNING: CPU: 0 PID: 18 at kernel/rcu/tree_plugin.h:310 rcu_note_context_switch+0x1b4/0x528
[ 1.235494] Modules linked in:
[ 1.235514] CPU: 0 PID: 18 Comm: kworker/0:1 Not tainted 4.14.19-rt15-177004-gd5e1859 #3
[ 1.235518] Hardware name: Generic AM33XX (Flattened Device Tree)
[ 1.235539] Workqueue: ipv6_addrconf addrconf_verify_work
[ 1.235544] Backtrace:
[ 1.235577] [<c010b848>] (dump_backtrace) from [<c010bb18>] (show_stack+0x18/0x1c)
[ 1.235588] r7:00000009 r6:00000000 r5:c098d728 r4:00000000
[ 1.235602] [<c010bb00>] (show_stack) from [<c07d4b70>] (dump_stack+0x24/0x28)
[ 1.235620] [<c07d4b4c>] (dump_stack) from [<c01295e4>] (__warn+0xe8/0x100)
[ 1.235631] [<c01294fc>] (__warn) from [<c01296b4>] (warn_slowpath_null+0x28/0x30)
[ 1.235642] r9:00000000 r8:a0000013 r7:ffffe000 r6:00000000 r5:cf063800 r4:c0c18380
[ 1.235654] [<c012968c>] (warn_slowpath_null) from [<c017a148>] (rcu_note_context_switch+0x1b4/0x528)
[ 1.235672] [<c0179f94>] (rcu_note_context_switch) from [<c07e99a4>] (__schedule+0x7c/0x64c)
[ 1.235682] r10:cf108000 r9:00000000 r8:a0000013 r7:ffffe000 r6:c0c12b10 r5:00000000
[ 1.235687] r4:cf063800 r3:001eab3b
[ 1.235698] [<c07e9928>] (__schedule) from [<c07e9fd4>] (schedule+0x60/0xf8)
[ 1.235708] r10:cf108000 r9:00000000 r8:a0000013 r7:cf109df0 r6:cf063800 r5:cf063800
[ 1.235712] r4:cf108000
[ 1.235726] [<c07e9f74>] (schedule) from [<c07eb9e4>] (rt_spin_lock_slowlock_locked+0x130/0x250)
[ 1.235731] r5:c0c12000 r4:cf108000
[ 1.235742] [<c07eb8b4>] (rt_spin_lock_slowlock_locked) from [<c07ebb60>] (rt_spin_lock_slowlock+0x5c/0xa8)
[ 1.235752] r9:00000000 r8:00000001 r7:cf109e74 r6:c0c4ec18 r5:a0000013 r4:ffffe000
[ 1.235767] [<c07ebb04>] (rt_spin_lock_slowlock) from [<c07ed850>] (rt_spin_lock+0x48/0x4c)
[ 1.235772] r5:ffffe000 r4:c0c11c94
[ 1.235788] [<c07ed808>] (rt_spin_lock) from [<c0140340>] (try_to_grab_pending+0x50/0x20c)
[ 1.235798] [<c01402f0>] (try_to_grab_pending) from [<c0140524>] (__cancel_work+0x28/0xa0)
[ 1.235808] r9:00000000 r8:cfd82300 r7:00000000 r6:00000001 r5:c0c4ec18 r4:c0c18640
[ 1.235819] [<c01404fc>] (__cancel_work) from [<c01405b0>] (cancel_delayed_work+0x14/0x18)
[ 1.235826] r6:51eb851f r5:ffffba7c r4:c0c18640
[ 1.235837] [<c014059c>] (cancel_delayed_work) from [<c076e374>] (addrconf_verify_rtnl+0x84/0x448)
[ 1.235847] [<c076e2f0>] (addrconf_verify_rtnl) from [<c076e74c>] (addrconf_verify_work+0x14/0x1c)
[ 1.235857] r10:cf108000 r9:00000000 r8:cfd82300 r7:00000000 r6:c0c11c94 r5:cf0eff80
[ 1.235861] r4:c0c4ec18
[ 1.235871] [<c076e738>] (addrconf_verify_work) from [<c013fadc>] (process_one_work+0x1b4/0x3e8)
[ 1.235881] [<c013f928>] (process_one_work) from [<c013fd68>] (worker_thread+0x58/0x5e0)
[ 1.235891] r10:cf108000 r9:c0c11cbc r8:c0c18640 r7:00000008 r6:cf0eff98 r5:c0c11c94
[ 1.235895] r4:cf0eff80
[ 1.235912] [<c013fd10>] (worker_thread) from [<c0145d6c>] (kthread+0x130/0x160)
[ 1.235922] r10:cf04de94 r9:cf104198 r8:cf0eff80 r7:cf108000 r6:cf0ff100 r5:00000000
[ 1.235926] r4:cf104180
[ 1.235937] [<c0145c3c>] (kthread) from [<c0107bd0>] (ret_from_fork+0x14/0x24)
[ 1.235947] r10:00000000 r9:00000000 r8:00000000 r7:00000000 r6:00000000 r5:c0145c3c
[ 1.235951] r4:cf0ff100
[ 1.235955] ---[ end trace 0000000000000001 ]---
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [v4.14-rt][report] arm: just another rcu_note_context_switch
2018-02-14 22:12 [v4.14-rt][report] arm: just another rcu_note_context_switch Grygorii Strashko
@ 2018-02-16 11:30 ` Sebastian Andrzej Siewior
2018-02-16 18:26 ` Grygorii Strashko
0 siblings, 1 reply; 3+ messages in thread
From: Sebastian Andrzej Siewior @ 2018-02-16 11:30 UTC (permalink / raw)
To: Grygorii Strashko; +Cc: Steven Rostedt, linux-rt-users, LKML
On 2018-02-14 16:12:42 [-0600], Grygorii Strashko wrote:
> Hi All,
Hi,
> I can see below warning during boot on few TI boards am437x-idk, am335x-evm, am335x-ice
> All of them are non-SMP
I somehow missed the !SMP kernel… What about this:
Subject: [PATCH] RCU: skip the "schedule() in RCU section" warning on UP, too
In "RCU: we need to skip that warning but only on sleeping locks" we
skipped a warning on SMP systems in case we schedule out in a RCU
section while attempt to obtain a sleeping lock. This is also required
on UP systems.
In order to do so, I introduce a tiny version of migrate_disable() +
_enable() which only update the counters which we then can check against
on RT && !SMP.
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
---
include/linux/preempt.h | 9 +++++++++
include/linux/sched.h | 6 ++++++
kernel/rcu/tree_plugin.h | 2 +-
kernel/sched/core.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 61 insertions(+), 1 deletion(-)
diff --git a/include/linux/preempt.h b/include/linux/preempt.h
index b0e6248c8a3c..0591df500e9d 100644
--- a/include/linux/preempt.h
+++ b/include/linux/preempt.h
@@ -231,6 +231,15 @@ extern void migrate_enable(void);
int __migrate_disabled(struct task_struct *p);
+#elif !defined(CONFIG_SMP) && defined(CONFIG_PREEMPT_RT_BASE)
+
+extern void migrate_disable(void);
+extern void migrate_enable(void);
+static inline int __migrate_disabled(struct task_struct *p)
+{
+ return 0;
+}
+
#else
#define migrate_disable() barrier()
#define migrate_enable() barrier()
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 33bedd733d00..9a8974fcb95c 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -593,6 +593,12 @@ struct task_struct {
# ifdef CONFIG_SCHED_DEBUG
int migrate_disable_atomic;
# endif
+
+#elif !defined(CONFIG_SMP) && defined(CONFIG_PREEMPT_RT_BASE)
+ int migrate_disable;
+# ifdef CONFIG_SCHED_DEBUG
+ int migrate_disable_atomic;
+# endif
#endif
#ifdef CONFIG_PREEMPT_RCU
diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
index 36e44ecd576e..3315ebad932f 100644
--- a/kernel/rcu/tree_plugin.h
+++ b/kernel/rcu/tree_plugin.h
@@ -304,7 +304,7 @@ static void rcu_preempt_note_context_switch(bool preempt)
int mg_counter = 0;
RCU_LOCKDEP_WARN(!irqs_disabled(), "rcu_preempt_note_context_switch() invoked with interrupts enabled!!!\n");
-#if defined(CONFIG_PREEMPT_COUNT) && defined(CONFIG_SMP)
+#if defined(CONFIG_PREEMPT_RT_BASE)
mg_counter = t->migrate_disable;
#endif
WARN_ON_ONCE(!preempt && t->rcu_read_lock_nesting > 0 && !mg_counter);
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 1ab422da7706..ea8bfeddcea0 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -7047,4 +7047,49 @@ void migrate_enable(void)
preempt_enable();
}
EXPORT_SYMBOL(migrate_enable);
+
+#elif !defined(CONFIG_SMP) && defined(CONFIG_PREEMPT_RT_BASE)
+void migrate_disable(void)
+{
+ struct task_struct *p = current;
+
+ if (in_atomic() || irqs_disabled()) {
+#ifdef CONFIG_SCHED_DEBUG
+ p->migrate_disable_atomic++;
+#endif
+ return;
+ }
+#ifdef CONFIG_SCHED_DEBUG
+ if (unlikely(p->migrate_disable_atomic)) {
+ tracing_off();
+ WARN_ON_ONCE(1);
+ }
+#endif
+
+ p->migrate_disable++;
+}
+EXPORT_SYMBOL(migrate_disable);
+
+void migrate_enable(void)
+{
+ struct task_struct *p = current;
+
+ if (in_atomic() || irqs_disabled()) {
+#ifdef CONFIG_SCHED_DEBUG
+ p->migrate_disable_atomic--;
+#endif
+ return;
+ }
+
+#ifdef CONFIG_SCHED_DEBUG
+ if (unlikely(p->migrate_disable_atomic)) {
+ tracing_off();
+ WARN_ON_ONCE(1);
+ }
+#endif
+
+ WARN_ON_ONCE(p->migrate_disable <= 0);
+ p->migrate_disable--;
+}
+EXPORT_SYMBOL(migrate_enable);
#endif
--
2.16.1
Sebastian
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [v4.14-rt][report] arm: just another rcu_note_context_switch
2018-02-16 11:30 ` Sebastian Andrzej Siewior
@ 2018-02-16 18:26 ` Grygorii Strashko
0 siblings, 0 replies; 3+ messages in thread
From: Grygorii Strashko @ 2018-02-16 18:26 UTC (permalink / raw)
To: Sebastian Andrzej Siewior; +Cc: Steven Rostedt, linux-rt-users, LKML
On 02/16/2018 05:30 AM, Sebastian Andrzej Siewior wrote:
> On 2018-02-14 16:12:42 [-0600], Grygorii Strashko wrote:
>> Hi All,
> Hi,
>
>> I can see below warning during boot on few TI boards am437x-idk, am335x-evm, am335x-ice
>> All of them are non-SMP
>
> I somehow missed the !SMP kernel… What about this:
>
> Subject: [PATCH] RCU: skip the "schedule() in RCU section" warning on UP, too
>
> In "RCU: we need to skip that warning but only on sleeping locks" we
> skipped a warning on SMP systems in case we schedule out in a RCU
> section while attempt to obtain a sleeping lock. This is also required
> on UP systems.
> In order to do so, I introduce a tiny version of migrate_disable() +
> _enable() which only update the counters which we then can check against
> on RT && !SMP.
>
> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
> ---
Thanks. I do not see errors any more.
Tested-by: Grygorii Strashko <grygorii.strashko@ti.com>
--
regards,
-grygorii
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-02-16 18:26 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-02-14 22:12 [v4.14-rt][report] arm: just another rcu_note_context_switch Grygorii Strashko
2018-02-16 11:30 ` Sebastian Andrzej Siewior
2018-02-16 18:26 ` Grygorii Strashko
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).