Re: [PATCH 2/2] tick: Make sure tick timer is active when bypassing reprogramming
From: Levin, Alexander (Sasha Levin)
Date: Sat Jun 03 2017 - 04:07:48 EST
On Fri, Apr 21, 2017 at 04:00:55PM +0200, Frederic Weisbecker wrote:
> diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
> index 502b320..be7ca4d 100644
> --- a/kernel/time/tick-sched.c
> +++ b/kernel/time/tick-sched.c
> @@ -783,8 +783,13 @@ static ktime_t tick_nohz_stop_sched_tick(struct tick_sched *ts,
> tick = expires;
>
> /* Skip reprogram of event if its not changed */
> - if (ts->tick_stopped && (expires == ts->next_tick))
> - goto out;
> + if (ts->tick_stopped && (expires == ts->next_tick)) {
> + /* Sanity check: make sure clockevent is actually programmed */
> + if (likely(dev->next_event <= ts->next_tick))
> + goto out;
> +
> + WARN_ON_ONCE(1);
> + }
I seem to be hitting that in a KVM vm, even without load (sometimes
right after boot):
------------[ cut here ]------------
WARNING: CPU: 5 PID: 0 at kernel/time/tick-sched.c:794 tick_nohz_stop_sched_tick kernel/time/tick-sched.c:791 [inline]
WARNING: CPU: 5 PID: 0 at kernel/time/tick-sched.c:794 __tick_nohz_idle_enter+0x11f4/0x1ab0 kernel/time/tick-sched.c:950
Kernel panic - not syncing: panic_on_warn set ...
CPU: 5 PID: 0 Comm: swapper/5 Not tainted 4.12.0-rc3-next-20170601+ #53
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.1-1ubuntu1 04/01/2014
Call Trace:
<IRQ>
__dump_stack lib/dump_stack.c:16 [inline]
dump_stack+0x115/0x1d1 lib/dump_stack.c:52
panic+0x1d8/0x3c4 kernel/panic.c:180
__warn+0x1d6/0x220 kernel/panic.c:541
report_bug+0x223/0x310 lib/bug.c:183
fixup_bug arch/x86/kernel/traps.c:190 [inline]
do_trap_no_signal arch/x86/kernel/traps.c:224 [inline]
do_trap+0x34c/0x490 arch/x86/kernel/traps.c:273
do_error_trap+0x12f/0x390 arch/x86/kernel/traps.c:310
do_invalid_op+0x1b/0x20 arch/x86/kernel/traps.c:323
invalid_op+0x1e/0x30 arch/x86/entry/entry_64.S:844
RIP: 0010:tick_nohz_stop_sched_tick kernel/time/tick-sched.c:791 [inline]
RIP: 0010:__tick_nohz_idle_enter+0x11f4/0x1ab0 kernel/time/tick-sched.c:950
RSP: 0018:ffff88005f407dd8 EFLAGS: 00010082
RAX: 000000000000007e RBX: ffff88005f5dcfe0 RCX: 0000000000000000
RDX: 000000000000007e RSI: 1ffff1000be80f78 RDI: ffffed000be80faf
RBP: ffff88005f407f88 R08: ffff88005f416300 R09: 1ffff1000be82c76
R10: ffff88007ffd915d R11: 0000000000000001 R12: ffff88005f5dcff8
R13: 00000061d944ea40 R14: ffff88005f407ea0 R15: 1ffff1000be80fc8
tick_nohz_irq_exit+0xac/0x120 kernel/time/tick-sched.c:1009
tick_irq_exit kernel/softirq.c:386 [inline]
irq_exit+0x141/0x1b0 kernel/softirq.c:407
exiting_irq arch/x86/include/asm/apic.h:652 [inline]
smp_call_function_interrupt+0x70/0xa0 arch/x86/kernel/smp.c:302
smp_call_function_single_interrupt+0x9/0x10 include/linux/compiler.h:250
call_function_single_interrupt+0x9d/0xb0 arch/x86/entry/entry_64.S:722
RIP: 0010:native_safe_halt+0x6/0x10 arch/x86/include/asm/irqflags.h:53
RSP: 0018:ffff88005ee7fdb8 EFLAGS: 00000246 ORIG_RAX: ffffffffffffff04
RAX: 0000000000000007 RBX: 1ffff1000bdcffba RCX: 0000000000000000
RDX: 0000000000000000 RSI: ffffffff91672020 RDI: ffff88005ee708f4
RBP: ffff88005ee7fdb8 R08: ffff88005f416060 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000000 R12: ffff88005ee70040
R13: ffff88005ee7fe70 R14: 0000000000000000 R15: ffff88005ee70040
</IRQ>
arch_safe_halt arch/x86/include/asm/paravirt.h:98 [inline]
default_idle+0x8d/0x600 arch/x86/kernel/process.c:341
arch_cpu_idle+0xa/0x10 arch/x86/kernel/process.c:332
default_idle_call+0x4c/0xa0 kernel/sched/idle.c:98
cpuidle_idle_call kernel/sched/idle.c:156 [inline]
do_idle+0x287/0x410 kernel/sched/idle.c:245
cpu_startup_entry+0x18/0x20 kernel/sched/idle.c:350
start_secondary+0x2d3/0x400 arch/x86/kernel/smpboot.c:275
secondary_startup_64+0x9f/0x9f arch/x86/kernel/head_64.S:304
Dumping ftrace buffer:
(ftrace buffer empty)
Kernel Offset: 0xb200000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
Rebooting in 86400 seconds..
--
Thanks,
Sasha