On Tue, Oct 26, 2010 at 2:10 AM, Ingo Molnar <mingo@xxxxxxx> wrote: > How will future PCI (or other device) power saving tracepoints be called? > > Might be more consistent to use: > > power:cpu_idle > power:machine_idle > power:device_idle Agree with this. FYI, I have a runtime_pm tracepoint currently cooking. Here is preliminary patch. Can this be a candidate for a "power:device_idle" tracepoint? Regards, Pierre ---- >From 3d5e03405f590d470ecfa59c8b9759915bf29307 Mon Sep 17 00:00:00 2001 From: Pierre Tardy <pierre.tardy@xxxxxxxxx> Date: Fri, 22 Oct 2010 03:07:07 -0500 Subject: [PATCH] trace/runtime_pm: add runtime_pm trace event based on the recent hook from Arjan for powertop statistics we add a tracepoint in order for pytimechart to display the runtime_pm activity over time, and versus other events. Signed-off-by: Pierre Tardy <pierre.tardy@xxxxxxxxx> --- drivers/base/power/runtime.c | 3 ++- include/trace/events/power.h | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletions(-) diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c index b78c401..0f38447 100644 --- a/drivers/base/power/runtime.c +++ b/drivers/base/power/runtime.c @@ -9,6 +9,7 @@ #include <linux/sched.h> #include <linux/pm_runtime.h> #include <linux/jiffies.h> +#include <trace/events/power.h> static int __pm_runtime_resume(struct device *dev, bool from_wq); static int __pm_request_idle(struct device *dev); @@ -159,9 +160,9 @@ void update_pm_runtime_accounting(struct device *dev) static void __update_runtime_status(struct device *dev, enum rpm_status status) { update_pm_runtime_accounting(dev); + trace_runtime_pm_status(dev, status); dev->power.runtime_status = status; } - /** * __pm_runtime_suspend - Carry out run-time suspend of given device. * @dev: Device to suspend. diff --git a/include/trace/events/power.h b/include/trace/events/power.h index 286784d..dd57c29 100644 --- a/include/trace/events/power.h +++ b/include/trace/events/power.h @@ -6,6 +6,7 @@ #include <linux/ktime.h> #include <linux/tracepoint.h> +#include <linux/device.h> #ifndef _TRACE_POWER_ENUM_ #define _TRACE_POWER_ENUM_ @@ -75,6 +76,40 @@ TRACE_EVENT(power_end, ); +#ifdef CONFIG_PM_RUNTIME +#define rpm_status_name(status) { RPM_##status, #status } +#define show_rpm_status_name(val) \ + __print_symbolic(val, \ + rpm_status_name(SUSPENDED), \ + rpm_status_name(SUSPENDING), \ + rpm_status_name(RESUMING), \ + rpm_status_name(ACTIVE) \ + ) +TRACE_EVENT(runtime_pm_status, + + TP_PROTO(struct device *dev, int new_status), + + TP_ARGS(dev, new_status), + + TP_STRUCT__entry( + __string(devname,dev_name(dev)) + __string(drivername,dev_driver_string(dev)) + __field(u32, prev_status) + __field(u32, status) + ), + + TP_fast_assign( + __assign_str(devname, dev_name(dev)); + __assign_str(drivername, dev_driver_string(dev)); + __entry->prev_status = (u32)dev->power.runtime_status; + __entry->status = (u32)new_status; + ), + + TP_printk("driver=%s dev=%s prev_status=%s status=%s", __get_str(drivername),__get_str(devname), + show_rpm_status_name(__entry->prev_status), show_rpm_status_name(__entry->status)) +); +#endif /* CONFIG_PM_RUNTIME */ + /* * The clock events are used for clock enable/disable and for * clock rate change -- 1.7.2.3 _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm