mmc: core: Add trace events to profile mmc suspend-resume
Add trace events to capture mmc suspend-resume latencies. This would be useful to capture latencies for variety of MMC/SD cards and decide on best possible runtime PM timeout. Usage - cd /sys/kernel/debug echo 1 > tracing/events/mmc/mmc_resume_host/enable echo 1 > tracing/events/mmc/mmc_suspend_host/enable cat tracing/trace_pipe Change-Id: Ic3a73753d55985c1c663cf2972cbed320e0fcfc3 Signed-off-by: Sujit Reddy Thumma <sthumma@codeaurora.org>
This commit is contained in:
parent
9e79afb8ee
commit
23a6e13dd1
|
@ -3593,6 +3593,7 @@ EXPORT_SYMBOL(mmc_cache_ctrl);
|
|||
int mmc_suspend_host(struct mmc_host *host)
|
||||
{
|
||||
int err = 0;
|
||||
ktime_t start = ktime_get();
|
||||
|
||||
if (mmc_bus_needs_resume(host))
|
||||
return 0;
|
||||
|
@ -3653,6 +3654,8 @@ int mmc_suspend_host(struct mmc_host *host)
|
|||
if (!err && !mmc_card_keep_power(host))
|
||||
mmc_power_off(host);
|
||||
|
||||
trace_mmc_suspend_host(mmc_hostname(host), err,
|
||||
ktime_to_us(ktime_sub(ktime_get(), start)));
|
||||
return err;
|
||||
out:
|
||||
if (!(host->card && mmc_card_sdio(host->card)))
|
||||
|
@ -3670,6 +3673,7 @@ EXPORT_SYMBOL(mmc_suspend_host);
|
|||
int mmc_resume_host(struct mmc_host *host)
|
||||
{
|
||||
int err = 0;
|
||||
ktime_t start = ktime_get();
|
||||
|
||||
mmc_bus_get(host);
|
||||
if (mmc_bus_manual_resume(host)) {
|
||||
|
@ -3707,6 +3711,8 @@ int mmc_resume_host(struct mmc_host *host)
|
|||
host->pm_flags &= ~MMC_PM_KEEP_POWER;
|
||||
mmc_bus_put(host);
|
||||
|
||||
trace_mmc_resume_host(mmc_hostname(host), err,
|
||||
ktime_to_us(ktime_sub(ktime_get(), start)));
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL(mmc_resume_host);
|
||||
|
|
|
@ -105,6 +105,39 @@ TRACE_EVENT(mmc_clk,
|
|||
)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(mmc_pm_template,
|
||||
TP_PROTO(const char *dev_name, int err, s64 usecs),
|
||||
|
||||
TP_ARGS(dev_name, err, usecs),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(s64, usecs)
|
||||
__field(int, err)
|
||||
__string(dev_name, dev_name)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->usecs = usecs;
|
||||
__entry->err = err;
|
||||
__assign_str(dev_name, dev_name);
|
||||
),
|
||||
|
||||
TP_printk(
|
||||
"took %lld usecs, %s err %d",
|
||||
__entry->usecs,
|
||||
__get_str(dev_name),
|
||||
__entry->err
|
||||
)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(mmc_pm_template, mmc_suspend_host,
|
||||
TP_PROTO(const char *dev_name, int err, s64 usecs),
|
||||
TP_ARGS(dev_name, err, usecs));
|
||||
|
||||
DEFINE_EVENT(mmc_pm_template, mmc_resume_host,
|
||||
TP_PROTO(const char *dev_name, int err, s64 usecs),
|
||||
TP_ARGS(dev_name, err, usecs));
|
||||
|
||||
#endif /* if !defined(_TRACE_MMC_H) || defined(TRACE_HEADER_MULTI_READ) */
|
||||
|
||||
/* This part must be outside protection */
|
||||
|
|
Loading…
Reference in New Issue