Re: mmotm 2010-08-11 - RCU whinge during very early boot
From: Zdenek Kabelac
Date: Mon Oct 18 2010 - 08:26:10 EST
2010/10/7 Paul E. McKenney <paulmck@xxxxxxxxxxxxxxxxxx>:
> On Tue, Oct 05, 2010 at 12:05:13PM +0200, Zdenek Kabelac wrote:
>> 2010/8/12 <Valdis.Kletnieks@xxxxxx>:
>> > On Wed, 11 Aug 2010 16:10:49 PDT, akpm@xxxxxxxxxxxxxxxxxxxx said:
>> >> The mm-of-the-moment snapshot 2010-08-11-16-10 has been uploaded to
>> >>
>> >> http://userweb.kernel.org/~akpm/mmotm/
>> >
>> > Throws a RCU complaint. Hopefully somebody on the cc: list knows what it is about...
>> >
>> > [ 0.026136] CPU0: Intel(R) Core(TM)2 Duo CPU P8700 @ 2.53GHz stepping 0a
>> > [ 0.028399] NMI watchdog enabled, takes one hw-pmu counter.
>> > [ 0.030019] lockdep: fixing up alternatives.
>> > [ 0.031178]
>> > [ 0.031179] ===================================================
>> > [ 0.031182] [ INFO: suspicious rcu_dereference_check() usage. ]
>> > [ 0.031184] ---------------------------------------------------
>> > [ 0.031187] kernel/sched.c:618 invoked rcu_dereference_check() without protection!
>> > [ 0.031189]
>> > [ 0.031189] other info that might help us debug this:
>> > [ 0.031190]
>> > [ 0.031192]
>> > [ 0.031193] rcu_scheduler_active = 1, debug_locks = 1
>> > [ 0.031195] 3 locks held by kworker/0:0/4:
>> > [ 0.031197] #0: (events){+.+.+.}, at: [<ffffffff810504ca>] process_one_work+0x1b6/0x37d
>> > [ 0.031210] #1: ((&c_idle.work)){+.+.+.}, at: [<ffffffff810504ca>] process_one_work+0x1b6/0x37d
>> > [ 0.031217] #2: (&rq->lock){-.-...}, at: [<ffffffff81b5f9b8>] init_idle+0x2b/0x114
>> > [ 0.031225]
>> > [ 0.031226] stack backtrace:
>> > [ 0.031229] Pid: 4, comm: kworker/0:0 Not tainted 2.6.35-mmotm0811 #1
>> > [ 0.031232] Call Trace:
>> > [ 0.031237] [<ffffffff810661eb>] lockdep_rcu_dereference+0x9d/0xa5
>> > [ 0.031242] [<ffffffff8102b751>] task_group+0x7b/0x8a
>> > [ 0.031246] [<ffffffff81b5f9b8>] ? init_idle+0x2b/0x114
>> > [ 0.031250] [<ffffffff8102b775>] set_task_rq+0x15/0x6e
>> > [ 0.031253] [<ffffffff81b5fa5e>] init_idle+0xd1/0x114
>> > [ 0.031257] [<ffffffff81b5fb44>] fork_idle+0x8e/0x9d
>> > [ 0.031261] [<ffffffff81b5de6f>] do_fork_idle+0x17/0x28
>> > [ 0.031265] [<ffffffff8105052b>] process_one_work+0x217/0x37d
>> > [ 0.031269] [<ffffffff810504ca>] ? process_one_work+0x1b6/0x37d
>> > [ 0.031273] [<ffffffff81b5de58>] ? do_fork_idle+0x0/0x28
>> > [ 0.031277] [<ffffffff81051775>] worker_thread+0x17e/0x251
>> > [ 0.031281] [<ffffffff810515f7>] ? worker_thread+0x0/0x251
>> > [ 0.031285] [<ffffffff8105544a>] kthread+0x7d/0x85
>> > [ 0.031290] [<ffffffff81003554>] kernel_thread_helper+0x4/0x10
>> > [ 0.031295] [<ffffffff81558d80>] ? restore_args+0x0/0x30
>> > [ 0.031299] [<ffffffff810553cd>] ? kthread+0x0/0x85
>> > [ 0.031303] [<ffffffff81003550>] ? kernel_thread_helper+0x0/0x10
>> > [ 0.031333] Booting Node 0, Processors #1 Ok.
>> > [ 0.103111] NMI watchdog enabled, takes one hw-pmu counter.
>> > [ 0.104013] Brought up 2 CPUs
>> >
>>
>> I'm still seeing this INFO message on my vanilla 2.6.36-rc kernel.
>>
>> ----------------------
>>
>> ftrace: converting mcount calls to 0f 1f 44 00 00
>> ftrace: allocating 16045 entries in 63 pages
>> Setting APIC routing to flat
>> ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1
>> CPU0: Intel(R) Core(TM)2 Duo CPU T7500 @ 2.20GHz stepping 0a
>> NMI watchdog enabled, takes one hw-pmu counter.
>> lockdep: fixing up alternatives.
>>
> Hello, Zdenek,
>
> I believe that the following patch from Peter Z. should address this.
>
> Thanx, Paul
>
> ------------------------------------------------------------------------
>
> commit e3dd67d97b3c2aad366b845c797745a78efaf90d
> Author: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
> Date: Thu Sep 16 17:50:31 2010 +0200
>
> sched: fix RCU lockdep splat from task_group()
>
> This addresses the following RCU lockdep splat:
...
> So insert an RCU read-side critical section to avoid the complaint.
>
> Signed-off-by: Peter Zijlstra <a.p.zijlstra@xxxxxxxxx>
> Signed-off-by: Paul E. McKenney <paulmck@xxxxxxxxxxxxxxxxxx>
>
> diff --git a/kernel/sched.c b/kernel/sched.c
> index 09b574e..40e065e 100644
> --- a/kernel/sched.c
> +++ b/kernel/sched.c
> @@ -5331,7 +5331,19 @@ void __cpuinit init_idle(struct task_struct *idle, int cpu)
> idle->se.exec_start = sched_clock();
>
> cpumask_copy(&idle->cpus_allowed, cpumask_of(cpu));
> + /*
> + * We're having a chicken and egg problem, even though we are
> + * holding rq->lock, the cpu isn't yet set to this cpu so the
> + * lockdep check in task_group() will fail.
> + *
> + * Similar case to sched_fork(). / Alternatively we could
> + * use task_rq_lock() here and obtain the other rq->lock.
> + *
> + * Silence PROVE_RCU
> + */
> + rcu_read_lock();
> __set_task_cpu(idle, cpu);
> + rcu_read_unlock();
>
> rq->curr = rq->idle = idle;
> #if defined(CONFIG_SMP) && defined(__ARCH_WANT_UNLOCKED_CTXSW)
>
I'm using kernel patched with this patch - but I still get this error
- though at different place:
(not really sure how it is related - but of course the RCU complain
disappeared during boot).
===================================================
[ INFO: suspicious rcu_dereference_check() usage. ]
---------------------------------------------------
kernel/sched.c:618 invoked rcu_dereference_check() without protection!
other info that might help us debug this:
rcu_scheduler_active = 1, debug_locks = 0
1 lock held by make/6137:
#0: (&rq->lock){......}, at: [<ffffffff810487d7>] task_fork_fair+0x67/0x180
stack backtrace:
Pid: 6137, comm: make Not tainted 2.6.36-rc8-00024-ga7ac73b #6
Call Trace:
[<ffffffff81089b7b>] lockdep_rcu_dereference+0xbb/0xc0
[<ffffffff8103e605>] set_task_rq+0x2f5/0x300
[<ffffffff810488db>] task_fork_fair+0x16b/0x180
[<ffffffff8104b634>] sched_fork+0xe4/0x280
[<ffffffff8104fa55>] copy_process+0x6e5/0x13d0
[<ffffffff81119809>] ? __do_fault+0x3b9/0x4b0
[<ffffffff810507fb>] do_fork+0x8b/0x490
[<ffffffff8111d6b6>] ? handle_mm_fault+0x196/0xa90
[<ffffffff8147dc2d>] ? retint_swapgs+0xe/0x13
[<ffffffff8147dc2d>] ? retint_swapgs+0xe/0x13
[<ffffffff8100c395>] sys_vfork+0x25/0x30
[<ffffffff81003583>] stub_vfork+0x13/0x20
[<ffffffff810031db>] ? system_call_fastpath+0x16/0x1b
loop: module loaded
Zdenek
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/