Re: [tip:sched/core] sched/core: Validate rq_clock*() serialization

Sasha Levin
2015-05-30T01:03:58Z

On 01/14/2015 09:03 AM, tip-bot for Peter Zijlstra wrote:
> Commit-ID: cebde6d681aa45f96111cfcffc1544cf2a0454ff
> Gitweb: http://git.kernel.org/tip/cebde6d681aa45f96111cfcffc1544cf2a0454ff
> Author: Peter Zijlstra <peterz@infradead.org>
> AuthorDate: Mon, 5 Jan 2015 11:18:10 +0100
> Committer: Ingo Molnar <mingo@kernel.org>
> CommitDate: Wed, 14 Jan 2015 13:34:19 +0100
>
> sched/core: Validate rq_clock*() serialization
>
> rq->clock{,_task} are serialized by rq->lock, verify this.
>
> One immediate fail is the usage in scale_rt_capability, so 'annotate'
> that for now, there's more 'funny' there. Maybe change rq->lock into a
> raw_seqlock_t?
>
> (Only 32-bit is affected)
>
> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
> Link: http://lkml.kernel.org/r/20150105103554.361872747@infradead.org
> Cc: Linus Torvalds <torvalds@linux-foundation.org>
> Cc: umgwanakikbuti@gmail.com
> Signed-off-by: Ingo Molnar <mingo@kernel.org>
> ---

Hey Peter,

I'm seeing the following in the latest -next:

[ 2706.857941] ------------[ cut here ]------------
[ 2706.857963] WARNING: CPU: 6 PID: 14780 at kernel/sched/sched.h:728 update_curr+0x3db/0x550()
[ 2706.857971] Modules linked in:
[ 2706.857982] CPU: 6 PID: 14780 Comm: trinity-c2 Not tainted 4.1.0-rc5-next-20150529-sasha-00039-g7fd455d-dirty #2262
[ 2706.858000] ffffffffa6a1426a 00000000c9f98986 ffff8802b6807b98 ffffffffa6a1426a
[ 2706.858015] 0000000000000000 0000000000000000 ffff8802b6807be8 ffffffff9d1e50c6
[ 2706.858029] ffffffff9d1e52f5 ffffffff9d28a2fb ffff8800c3d0b068 ffff88050c1c3068
[ 2706.858033] Call Trace:
[ 2706.858054] <IRQ> ? dump_stack (lib/dump_stack.c:52)
[ 2706.858064] dump_stack (lib/dump_stack.c:52)
[ 2706.858077] warn_slowpath_common (kernel/panic.c:448)
[ 2706.858085] ? warn_slowpath_null (kernel/panic.c:479)
[ 2706.858092] ? update_curr (kernel/sched/sched.h:728 kernel/sched/fair.c:698)
[ 2706.858102] warn_slowpath_null (kernel/panic.c:482)
[ 2706.858110] update_curr (kernel/sched/sched.h:728 kernel/sched/fair.c:698)
[ 2706.858116] ? update_curr (kernel/sched/fair.c:697)
[ 2706.858128] task_tick_fair (include/linux/sched.h:3049 kernel/sched/fair.c:397 kernel/sched/fair.c:2795 kernel/sched/fair.c:3372 kernel/sched/fair.c:8000)
[ 2706.858141] ? sched_clock_cpu (kernel/sched/clock.c:315)
[ 2706.858151] ? task_tick_fair (kernel/sched/fair.c:7994)
[ 2706.858162] scheduler_tick (kernel/sched/core.c:2523)
[ 2706.858177] update_process_times (kernel/time/timer.c:1399)
[ 2706.858188] tick_sched_handle.isra.12 (kernel/time/tick-sched.c:152)
[ 2706.858196] ? tick_sched_handle.isra.12 (kernel/time/tick-sched.c:134)
[ 2706.858206] tick_sched_timer (kernel/time/tick-sched.c:1075)
[ 2706.858217] __hrtimer_run_queues (kernel/time/hrtimer.c:1138 kernel/time/hrtimer.c:1194)
[ 2706.858228] ? ftrace_call (arch/x86/kernel/mcount_64.S:158)
[ 2706.858237] ? tick_sched_do_timer (kernel/time/tick-sched.c:1059)
[ 2706.858246] ? hrtimer_fixup_init (kernel/time/hrtimer.c:1161)
[ 2706.858256] ? __hrtimer_run_queues (kernel/time/hrtimer.c:1161)
[ 2706.858267] hrtimer_interrupt (kernel/time/hrtimer.c:1231)
[ 2706.858281] ? preempt_schedule_context (kernel/sched/core.c:2941 (discriminator 1) include/linux/jump_label.h:125 (discriminator 1) include/linux/context_tracking_state.h:29 (discriminator 1) include/linux/context_tracking.h:34 (discriminator 1) kernel/sched/core.c:2947 (discriminator 1))
[ 2706.858293] local_apic_timer_interrupt (arch/x86/kernel/apic/apic.c:891)
[ 2706.858301] ? local_apic_timer_interrupt (arch/x86/kernel/apic/apic.c:863)
[ 2706.858311] smp_apic_timer_interrupt (./arch/x86/include/asm/apic.h:655 arch/x86/kernel/apic/apic.c:915)
[ 2706.858323] apic_timer_interrupt (arch/x86/kernel/entry_64.S:911)
[ 2706.858332] <EOI>
[ 2706.858333] ---[ end trace b7e04749c55c3d4e ]---

Thanks,
Sasha