Skip to content

Commit

Permalink
PM / tick: Add tracepoints for suspend-to-idle diagnostics
Browse files Browse the repository at this point in the history
Add suspend/resume tracepoints to tick_freeze() and tick_unfreeze()
to catch when timekeeping is suspended and resumed during suspend-to-idle
so as to be able to check whether or not we enter the "frozen" state
and to measure the time spent in it.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
  • Loading branch information
Rafael J. Wysocki committed May 14, 2015
1 parent 819b1bb commit 75e0678
Showing 1 changed file with 11 additions and 4 deletions.
15 changes: 11 additions & 4 deletions kernel/time/tick-common.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include <linux/profile.h>
#include <linux/sched.h>
#include <linux/module.h>
#include <trace/events/power.h>

#include <asm/irq_regs.h>

Expand Down Expand Up @@ -457,10 +458,13 @@ void tick_freeze(void)
raw_spin_lock(&tick_freeze_lock);

tick_freeze_depth++;
if (tick_freeze_depth == num_online_cpus())
if (tick_freeze_depth == num_online_cpus()) {
trace_suspend_resume(TPS("timekeeping_freeze"),
smp_processor_id(), true);
timekeeping_suspend();
else
} else {
tick_suspend_local();
}

raw_spin_unlock(&tick_freeze_lock);
}
Expand All @@ -478,10 +482,13 @@ void tick_unfreeze(void)
{
raw_spin_lock(&tick_freeze_lock);

if (tick_freeze_depth == num_online_cpus())
if (tick_freeze_depth == num_online_cpus()) {
timekeeping_resume();
else
trace_suspend_resume(TPS("timekeeping_freeze"),
smp_processor_id(), false);
} else {
tick_resume_local();
}

tick_freeze_depth--;

Expand Down

0 comments on commit 75e0678

Please sign in to comment.