|
@@ -19,6 +19,7 @@
|
|
#include <linux/profile.h>
|
|
#include <linux/profile.h>
|
|
#include <linux/sched.h>
|
|
#include <linux/sched.h>
|
|
#include <linux/module.h>
|
|
#include <linux/module.h>
|
|
|
|
+#include <trace/events/power.h>
|
|
|
|
|
|
#include <asm/irq_regs.h>
|
|
#include <asm/irq_regs.h>
|
|
|
|
|
|
@@ -457,10 +458,13 @@ void tick_freeze(void)
|
|
raw_spin_lock(&tick_freeze_lock);
|
|
raw_spin_lock(&tick_freeze_lock);
|
|
|
|
|
|
tick_freeze_depth++;
|
|
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();
|
|
timekeeping_suspend();
|
|
- else
|
|
|
|
|
|
+ } else {
|
|
tick_suspend_local();
|
|
tick_suspend_local();
|
|
|
|
+ }
|
|
|
|
|
|
raw_spin_unlock(&tick_freeze_lock);
|
|
raw_spin_unlock(&tick_freeze_lock);
|
|
}
|
|
}
|
|
@@ -478,10 +482,13 @@ void tick_unfreeze(void)
|
|
{
|
|
{
|
|
raw_spin_lock(&tick_freeze_lock);
|
|
raw_spin_lock(&tick_freeze_lock);
|
|
|
|
|
|
- if (tick_freeze_depth == num_online_cpus())
|
|
|
|
|
|
+ if (tick_freeze_depth == num_online_cpus()) {
|
|
timekeeping_resume();
|
|
timekeeping_resume();
|
|
- else
|
|
|
|
|
|
+ trace_suspend_resume(TPS("timekeeping_freeze"),
|
|
|
|
+ smp_processor_id(), false);
|
|
|
|
+ } else {
|
|
tick_resume_local();
|
|
tick_resume_local();
|
|
|
|
+ }
|
|
|
|
|
|
tick_freeze_depth--;
|
|
tick_freeze_depth--;
|
|
|
|
|