Commit 6791e36c authored by Arve Hjønnevåg's avatar Arve Hjønnevåg Committed by Rafael J. Wysocki

PM / Sleep: Add wakeup_source_activate and wakeup_source_deactivate tracepoints

Add tracepoints to wakeup_source_activate and wakeup_source_deactivate.
Useful for checking that specific wakeup sources overlap as expected.
Signed-off-by: default avatarArve Hjønnevåg <arve@android.com>
Acked-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
parent 30e3ce6d
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include <linux/suspend.h> #include <linux/suspend.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/debugfs.h> #include <linux/debugfs.h>
#include <trace/events/power.h>
#include "power.h" #include "power.h"
...@@ -374,12 +375,16 @@ EXPORT_SYMBOL_GPL(device_set_wakeup_enable); ...@@ -374,12 +375,16 @@ EXPORT_SYMBOL_GPL(device_set_wakeup_enable);
*/ */
static void wakeup_source_activate(struct wakeup_source *ws) static void wakeup_source_activate(struct wakeup_source *ws)
{ {
unsigned int cec;
ws->active = true; ws->active = true;
ws->active_count++; ws->active_count++;
ws->last_time = ktime_get(); ws->last_time = ktime_get();
/* Increment the counter of events in progress. */ /* Increment the counter of events in progress. */
atomic_inc(&combined_event_count); cec = atomic_inc_return(&combined_event_count);
trace_wakeup_source_activate(ws->name, cec);
} }
/** /**
...@@ -454,7 +459,7 @@ EXPORT_SYMBOL_GPL(pm_stay_awake); ...@@ -454,7 +459,7 @@ EXPORT_SYMBOL_GPL(pm_stay_awake);
*/ */
static void wakeup_source_deactivate(struct wakeup_source *ws) static void wakeup_source_deactivate(struct wakeup_source *ws)
{ {
unsigned int cnt, inpr; unsigned int cnt, inpr, cec;
ktime_t duration; ktime_t duration;
ktime_t now; ktime_t now;
...@@ -489,7 +494,8 @@ static void wakeup_source_deactivate(struct wakeup_source *ws) ...@@ -489,7 +494,8 @@ static void wakeup_source_deactivate(struct wakeup_source *ws)
* Increment the counter of registered wakeup events and decrement the * Increment the counter of registered wakeup events and decrement the
* couter of wakeup events in progress simultaneously. * couter of wakeup events in progress simultaneously.
*/ */
atomic_add(MAX_IN_PROGRESS, &combined_event_count); cec = atomic_add_return(MAX_IN_PROGRESS, &combined_event_count);
trace_wakeup_source_deactivate(ws->name, cec);
split_counters(&cnt, &inpr); split_counters(&cnt, &inpr);
if (!inpr && waitqueue_active(&wakeup_count_wait_queue)) if (!inpr && waitqueue_active(&wakeup_count_wait_queue))
......
...@@ -65,6 +65,40 @@ TRACE_EVENT(machine_suspend, ...@@ -65,6 +65,40 @@ TRACE_EVENT(machine_suspend,
TP_printk("state=%lu", (unsigned long)__entry->state) TP_printk("state=%lu", (unsigned long)__entry->state)
); );
DECLARE_EVENT_CLASS(wakeup_source,
TP_PROTO(const char *name, unsigned int state),
TP_ARGS(name, state),
TP_STRUCT__entry(
__string( name, name )
__field( u64, state )
),
TP_fast_assign(
__assign_str(name, name);
__entry->state = state;
),
TP_printk("%s state=0x%lx", __get_str(name),
(unsigned long)__entry->state)
);
DEFINE_EVENT(wakeup_source, wakeup_source_activate,
TP_PROTO(const char *name, unsigned int state),
TP_ARGS(name, state)
);
DEFINE_EVENT(wakeup_source, wakeup_source_deactivate,
TP_PROTO(const char *name, unsigned int state),
TP_ARGS(name, state)
);
#ifdef CONFIG_EVENT_POWER_TRACING_DEPRECATED #ifdef CONFIG_EVENT_POWER_TRACING_DEPRECATED
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment