• Wanpeng Li's avatar
    sched/deadline: Fix the intention to re-evalute tick dependency for offline CPU · 61c7aca6
    Wanpeng Li authored
    The dl task will be replenished after dl task timer fire and start a
    new period. It will be enqueued and to re-evaluate its dependency on
    the tick in order to restart it. However, if the CPU is hot-unplugged,
    irq_work_queue will splash since the target CPU is offline.
    
    As a result we get:
    
        WARNING: CPU: 2 PID: 0 at kernel/irq_work.c:69 irq_work_queue_on+0xad/0xe0
        Call Trace:
         dump_stack+0x99/0xd0
         __warn+0xd1/0xf0
         warn_slowpath_null+0x1d/0x20
         irq_work_queue_on+0xad/0xe0
         tick_nohz_full_kick_cpu+0x44/0x50
         tick_nohz_dep_set_cpu+0x74/0xb0
         enqueue_task_dl+0x226/0x480
         activate_task+0x5c/0xa0
         dl_task_timer+0x19b/0x2c0
         ? push_dl_task.part.31+0x190/0x190
    
    This can be triggered by hot-unplugging the full dynticks CPU which dl
    task is running on.
    
    We enqueue the dl task on the offline CPU, because we need to do
    replenish for start_dl_timer(). So, as Juri pointed out, we would
    need to do is calling replenish_dl_entity() directly, instead of
    enqueue_task_dl(). pi_se shouldn't be a problem as the task shouldn't
    be boosted if it was throttled.
    
    This patch fixes it by avoiding the whole enqueue+dequeue+enqueue story, by
    first migrating (set_task_cpu()) and then doing 1 enqueue.
    Suggested-by: default avatarPeter Zijlstra <peterz@infradead.org>
    Signed-off-by: default avatarWanpeng Li <wanpeng.li@hotmail.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Juri Lelli <juri.lelli@arm.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Luca Abeni <luca.abeni@unitn.it>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: http://lkml.kernel.org/r/1472639264-3932-1-git-send-email-wanpeng.li@hotmail.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    61c7aca6
deadline.c 46.1 KB