Commit 26f9c7cc authored by Saravana Kannan's avatar Saravana Kannan Committed by Viresh Kumar
Browse files

PM / devfreq: Cache OPP table reference in devfreq



The OPP table can be used often in devfreq. Trying to get it each time can
be expensive, so cache it in the devfreq struct.

Signed-off-by: default avatarSaravana Kannan <saravanak@google.com>
Acked-by: default avatarMyungJoo Ham <myungjoo.ham@samsung.com>
Acked-by: default avatarChanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: default avatarHsin-Yi Wang <hsinyi@chromium.org>
[ Viresh: Added a blank line ]
Signed-off-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
parent 7d8658ef
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -757,6 +757,9 @@ static void devfreq_dev_release(struct device *dev)
	if (devfreq->profile->exit)
		devfreq->profile->exit(devfreq->dev.parent);

	if (devfreq->opp_table)
		dev_pm_opp_put_opp_table(devfreq->opp_table);

	mutex_destroy(&devfreq->lock);
	kfree(devfreq);
}
@@ -844,6 +847,10 @@ struct devfreq *devfreq_add_device(struct device *dev,
	}

	devfreq->suspend_freq = dev_pm_opp_get_suspend_opp_freq(dev);
	devfreq->opp_table = dev_pm_opp_get_opp_table(dev);
	if (IS_ERR(devfreq->opp_table))
		devfreq->opp_table = NULL;

	atomic_set(&devfreq->suspend_count, 0);

	dev_set_name(&devfreq->dev, "%s", dev_name(dev));
+2 −0
Original line number Diff line number Diff line
@@ -137,6 +137,7 @@ struct devfreq_stats {
 *		using devfreq.
 * @profile:	device-specific devfreq profile
 * @governor:	method how to choose frequency based on the usage.
 * @opp_table:	Reference to OPP table of dev.parent, if one exists.
 * @nb:		notifier block used to notify devfreq object that it should
 *		reevaluate operable frequencies. Devfreq users may use
 *		devfreq.nb to the corresponding register notifier call chain.
@@ -173,6 +174,7 @@ struct devfreq {
	struct device dev;
	struct devfreq_dev_profile *profile;
	const struct devfreq_governor *governor;
	struct opp_table *opp_table;
	struct notifier_block nb;
	struct delayed_work work;