Skip to content
  • Geert Uytterhoeven's avatar
    PM / Domains: Skip timings during syscore suspend/resume · a4630c61
    Geert Uytterhoeven authored
    
    
    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+0x3
    
    This happens when resuming the PM Domain that contains the clock events
    source, which calls pm_genpd_syscore_poweron(). Chain of operations is:
    
        timekeeping_resume()
        {
    	clockevents_resume()
    	    sh_cmt_clock_event_resume()
    		pm_genpd_syscore_poweron()
    		    pm_genpd_sync_poweron()
    			genpd_syscore_switch()
    			    genpd_power_on()
    				ktime_get(), but timekeeping_suspended == 1
    	...
    	timekeeping_suspended = 0;
        }
    
    Fix this by adding a "timed" parameter to genpd_power_{on,off}() and
    pm_genpd_sync_power{off,on}(), to indicate whether latency measurements
    are allowed.  This parameter is passed as false in
    genpd_syscore_switch() (i.e. during syscore suspend/resume), and true in
    all other cases.
    
    Signed-off-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    a4630c61