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: Arve Hjønnevåg <arve@android.com> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
This commit is contained in:
parent
30e3ce6dcb
commit
6791e36c4a
2 changed files with 43 additions and 3 deletions
|
@ -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);
|
||||||
*/
|
*/
|
||||||
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);
|
||||||
*/
|
*/
|
||||||
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)
|
||||||
* 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,
|
||||||
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
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Add table
Reference in a new issue