Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 23a6e13d authored by Sujit Reddy Thumma's avatar Sujit Reddy Thumma
Browse files

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: default avatarSujit Reddy Thumma <sthumma@codeaurora.org>
parent 9e79afb8
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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);
+33 −0
Original line number Diff line number Diff line
@@ -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 */