Thread (3 messages) 3 messages, 3 authors, 2015-03-19

Re: [PATCH] PM / Domains: Skip latency measurements if timekeeping is suspended

From: Rafael J. Wysocki <hidden>
Date: 2015-03-18 22:06:16
Also in: linux-sh, lkml

On Wednesday, March 18, 2015 05:25:46 PM Geert Uytterhoeven wrote:
The PM Domain code uses ktime_get() to perform various latency
measurements.  However, if ktime_get() is called while timekeeping is
suspended, the following warning is printed:

    WARNING: CPU: 0 PID: 1340 at kernel/time/timekeeping.c:576 ktime_get+0x30/0xf4()

This happens when resuming the PM Domain that contains the clock events
source. Chain of operations is:

    timekeeping_resume()
    {
        clockevents_resume()
            sh_cmt_clock_event_resume()
                pm_genpd_syscore_poweron()
                    pm_genpd_sync_poweron()
                        genpd_power_on()
                            ktime_get(), but timekeeping_suspended == 1
        ...
        timekeeping_suspended = 0;
    }

Skip all latency measurements if timekeeping is suspended to fix this.
I don't think that this is where we should fix it.  At least using
timekeeping_suspended outside of the timekeeping core would not be
welcome by its maintainers.
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
I'm not sure if this is needed for all latency measurements.
So far I only encountered it while powering-on a clock domain during
resume from s2ram.
The problem seems to be that the clock domain is powered on in a
syscore resume routine which happens to be called before timekeeping_resume().
It looks like we either need to force the right ordering somehow or have a
special variant of GENPD_DEV_TIMED_CALLBACK() for syscore suspend/resume that
won't do the latency measurement at all (which doesn't make much sense at
this point, because time is effectively "frozen" then).

Rafael
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help