Re: [PATCH] sched/deadline: Add missing update_rq_clock() in dl_task_timer()

From: Daniel Bristot de Oliveira
Date: Wed Mar 15 2017 - 06:44:37 EST


On 03/15/2017 08:53 AM, Wanpeng Li wrote:
> Ping, :)
> 2017-03-07 13:51 GMT+08:00 Wanpeng Li <kernellwp@xxxxxxxxx>:
>> From: Wanpeng Li <wanpeng.li@xxxxxxxxxxx>
>>
>> The following warning can be triggered by hot-unplugging the CPU
>> on which an active SCHED_DEADLINE task is running on:
>>
>> ------------[ cut here ]------------
>> WARNING: CPU: 7 PID: 0 at kernel/sched/sched.h:833 replenish_dl_entity+0x71e/0xc40
>> rq->clock_update_flags < RQCF_ACT_SKIP
>> CPU: 7 PID: 0 Comm: swapper/7 Tainted: G B 4.11.0-rc1+ #24
>> Hardware name: LENOVO ThinkCentre M8500t-N000/SHARKBAY, BIOS FBKTC1AUS 02/16/2016
>> Call Trace:
>> <IRQ>
>> dump_stack+0x85/0xc4
>> __warn+0x172/0x1b0
>> warn_slowpath_fmt+0xb4/0xf0
>> ? __warn+0x1b0/0x1b0
>> ? debug_check_no_locks_freed+0x2c0/0x2c0
>> ? cpudl_set+0x3d/0x2b0
>> replenish_dl_entity+0x71e/0xc40
>> enqueue_task_dl+0x2ea/0x12e0
>> ? dl_task_timer+0x777/0x990
>> ? __hrtimer_run_queues+0x270/0xa50
>> dl_task_timer+0x316/0x990
>> ? enqueue_task_dl+0x12e0/0x12e0
>> ? enqueue_task_dl+0x12e0/0x12e0
>> __hrtimer_run_queues+0x270/0xa50
>> ? hrtimer_cancel+0x20/0x20
>> ? hrtimer_interrupt+0x119/0x600
>> hrtimer_interrupt+0x19c/0x600
>> ? trace_hardirqs_off+0xd/0x10
>> local_apic_timer_interrupt+0x74/0xe0
>> smp_apic_timer_interrupt+0x76/0xa0
>> apic_timer_interrupt+0x93/0xa0
>>
>> The DL task will be migrated to a suitable later deadline rq once the DL
>> timer fires and currnet rq is offline. The rq clock of the new rq should
>> be updated. This patch fixes it by updating the rq clock after holding
>> the new rq's rq lock.
>>
>> Cc: Juri Lelli <juri.lelli@xxxxxxx>
>> Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
>> Cc: Ingo Molnar <mingo@xxxxxxxxxx>
>> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
>> Cc: Matt Fleming <matt@xxxxxxxxxxxxxxxxxxx>
>> Signed-off-by: Wanpeng Li <wanpeng.li@xxxxxxxxxxx>

Reviewed-by: Daniel Bristot de Oliveira <bristot@xxxxxxxxxx>

-- Daniel