lkml.org 
[lkml]   [2009]   [Oct]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 11/26] NOHZ: update idle state also when NOHZ is inactive
    2.6.31-stable review patch.  If anyone has any objections, please let us know.

    ------------------
    From: Eero Nurkkala <ext-eero.nurkkala@nokia.com>

    commit fdc6f192e7e1ae80565af23cc33dc88e3dcdf184 upstream.

    Commit f2e21c9610991e95621a81407cdbab881226419b had unfortunate side
    effects with cpufreq governors on some systems.

    If the system did not switch into NOHZ mode ts->inidle is not set when
    tick_nohz_stop_sched_tick() is called from the idle routine. Therefor
    all subsequent calls from irq_exit() to tick_nohz_stop_sched_tick()
    fail to call tick_nohz_start_idle(). This results in bogus idle
    accounting information which is passed to cpufreq governors.

    Set the inidle flag unconditionally of the NOHZ active state to keep
    the idle time accounting correct in any case.

    [ tglx: Added comment and tweaked the changelog ]

    Reported-by: Steven Noonan <steven@uplinklabs.net>
    Signed-off-by: Eero Nurkkala <ext-eero.nurkkala@nokia.com>
    Cc: Rik van Riel <riel@redhat.com>
    Cc: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
    Cc: Steven Noonan <steven@uplinklabs.net>
    LKML-Reference: <1254907901.30157.93.camel@eenurkka-desktop>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    kernel/time/tick-sched.c | 9 +++++++--
    1 file changed, 7 insertions(+), 2 deletions(-)

    --- a/kernel/time/tick-sched.c
    +++ b/kernel/time/tick-sched.c
    @@ -231,6 +231,13 @@ void tick_nohz_stop_sched_tick(int inidl
    if (!inidle && !ts->inidle)
    goto end;

    + /*
    + * Set ts->inidle unconditionally. Even if the system did not
    + * switch to NOHZ mode the cpu frequency governers rely on the
    + * update of the idle time accounting in tick_nohz_start_idle().
    + */
    + ts->inidle = 1;
    +
    now = tick_nohz_start_idle(ts);

    /*
    @@ -248,8 +255,6 @@ void tick_nohz_stop_sched_tick(int inidl
    if (unlikely(ts->nohz_mode == NOHZ_MODE_INACTIVE))
    goto end;

    - ts->inidle = 1;
    -
    if (need_resched())
    goto end;




    \
     
     \ /
      Last update: 2009-10-10 01:45    [W:4.039 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site