diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 418bbb6e3ab9..7b8cd82fed19 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -23,6 +23,7 @@ #include #include #include +#include /* * Export tracepoints that act as a bare tracehook (ie: have no trace event @@ -70,3 +71,5 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_printk_hotplug); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_jiffies_update); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gic_v3_set_affinity); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gic_v3_affinity_init); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_suspend_epoch_val); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_resume_epoch_val); diff --git a/include/trace/hooks/epoch.h b/include/trace/hooks/epoch.h new file mode 100644 index 000000000000..7da3139dfeb0 --- /dev/null +++ b/include/trace/hooks/epoch.h @@ -0,0 +1,31 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM epoch + +#define TRACE_INCLUDE_PATH trace/hooks + +#if !defined(_TRACE_HOOK_EPOCH_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_HOOK_EPOCH_H + +#include +#include + +#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS) + +DECLARE_HOOK(android_vh_show_suspend_epoch_val, + TP_PROTO(u64 suspend_ns, u64 suspend_cycles), + TP_ARGS(suspend_ns, suspend_cycles)); + +DECLARE_HOOK(android_vh_show_resume_epoch_val, + TP_PROTO(u64 resume_cycles), + TP_ARGS(resume_cycles)); +#else + +#define trace_android_vh_show_suspend_epoch_val(suspend_ns, suspend_cycles) +#define trace_android_vh_show_resume_epoch_val(resume_cycles) + +#endif + +#endif /* _TRACE_HOOK_EPOCH_H */ +/* This part must be outside protection */ +#include diff --git a/kernel/time/sched_clock.c b/kernel/time/sched_clock.c index b1b9b12899f5..d5ab3fbc191c 100644 --- a/kernel/time/sched_clock.c +++ b/kernel/time/sched_clock.c @@ -16,6 +16,7 @@ #include #include #include +#include #include "timekeeping.h" @@ -270,6 +271,7 @@ int sched_clock_suspend(void) update_sched_clock(); hrtimer_cancel(&sched_clock_timer); rd->read_sched_clock = suspended_sched_clock_read; + trace_android_vh_show_suspend_epoch_val(rd->epoch_ns, rd->epoch_cyc); return 0; } @@ -281,6 +283,7 @@ void sched_clock_resume(void) rd->epoch_cyc = cd.actual_read_sched_clock(); hrtimer_start(&sched_clock_timer, cd.wrap_kt, HRTIMER_MODE_REL_HARD); rd->read_sched_clock = cd.actual_read_sched_clock; + trace_android_vh_show_resume_epoch_val(rd->epoch_cyc); } static struct syscore_ops sched_clock_ops = {