lkml.org 
[lkml]   [2013]   [Sep]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 20/21] cpuidle: don't calculate time-diff if entered_state == 0
    On 09/22/2013 03:21 AM, Viresh Kumar wrote:
    > If entered_state == 0, we don't need to set dev->last_residency to 'diff' as we
    > will be setting it to zero without using its new value.

    I don't get it, can you elaborate. We can be a long time in this state
    (eg. if the prediction is false).

    > And so move calculation of diff also inside the "if" statement.
    > Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
    > ---
    > drivers/cpuidle/cpuidle.c | 17 +++++++++--------
    > 1 file changed, 9 insertions(+), 8 deletions(-)
    >
    > diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c
    > index bf80236..cb81689 100644
    > --- a/drivers/cpuidle/cpuidle.c
    > +++ b/drivers/cpuidle/cpuidle.c
    > @@ -77,23 +77,22 @@ int cpuidle_enter_state(struct cpuidle_device *dev, struct cpuidle_driver *drv,
    >
    > struct cpuidle_state *target_state = &drv->states[index];
    > ktime_t time_start, time_end;
    > - s64 diff;
    >
    > time_start = ktime_get();
    >
    > entered_state = target_state->enter(dev, drv, index);
    >
    > - time_end = ktime_get();
    > + if (entered_state >= 0) {
    > + s64 diff;
    >
    > - local_irq_enable();
    > + time_end = ktime_get();
    > + diff = ktime_to_us(ktime_sub(time_end, time_start));
    >
    > - diff = ktime_to_us(ktime_sub(time_end, time_start));
    > - if (diff > INT_MAX)
    > - diff = INT_MAX;
    > + if (diff > INT_MAX)
    > + diff = INT_MAX;
    >
    > - dev->last_residency = (int) diff;
    > + dev->last_residency = (int) diff;
    >
    > - if (entered_state >= 0) {
    > /* Update cpuidle counters */
    > /* This can be moved to within driver enter routine
    > * but that results in multiple copies of same code.
    > @@ -104,6 +103,8 @@ int cpuidle_enter_state(struct cpuidle_device *dev, struct cpuidle_driver *drv,
    > dev->last_residency = 0;
    > }
    >
    > + local_irq_enable();
    > +
    > return entered_state;
    > }
    >
    >


    --
    <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

    Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
    <http://twitter.com/#!/linaroorg> Twitter |
    <http://www.linaro.org/linaro-blog/> Blog

    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2013-09-26 00:41    [W:4.165 / U:0.408 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site