lkml.org 
[lkml]   [2012]   [Oct]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH 8/9] irq_work: Handle queuing without IPI support in dyntick idle mode
    Date
    If we enqueue a work while in dyntick idle mode and the arch doesn't
    have self-IPI support, we may not find an opportunity to run the work
    before a while.

    In this case, exit the idle loop to re-evaluate irq_work_needs_cpu()
    and restart the tick.

    Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Paul Gortmaker <paul.gortmaker@windriver.com>
    ---
    kernel/irq_work.c | 11 +++++++++++
    1 files changed, 11 insertions(+), 0 deletions(-)

    diff --git a/kernel/irq_work.c b/kernel/irq_work.c
    index ce72b20..b500271 100644
    --- a/kernel/irq_work.c
    +++ b/kernel/irq_work.c
    @@ -76,6 +76,17 @@ static void __irq_work_queue(struct irq_work *work)
    */
    if (!arch_irq_work_has_ipi() || tick_nohz_tick_stopped())
    arch_irq_work_raise();
    +
    + /*
    + * If we rely on the timer tick or some obscure way to run the work
    + * while the CPU is in dyntick idle mode, we may not have an opportunity
    + * to do so before a while. Let's just exit the idle loop and hope we
    + * haven't yet reached the last need_resched() check before the CPU goes
    + * to low power mode.
    + */
    + if (!arch_irq_work_has_ipi() && tick_nohz_tick_stopped()
    + && is_idle_task(current))
    + set_need_resched();
    }
    out:
    preempt_enable();
    --
    1.7.5.4


    \
     
     \ /
      Last update: 2012-10-29 15:21    [W:3.274 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site