PM: domains: Move the next_wakeup variable into the struct gpd_timing_data
If the corresponding genpd for the device doesn't use a governor, the variable next_wakeup within the struct generic_pm_domain_data becomes superfluous. To avoid wasting memory, let's move it into the struct gpd_timing_data, which is already being allocated based upon if there is governor assigned. Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
66d29d802e
commit
9c74f2ac48
@ -478,15 +478,16 @@ EXPORT_SYMBOL_GPL(dev_pm_genpd_set_performance_state);
|
||||
*/
|
||||
void dev_pm_genpd_set_next_wakeup(struct device *dev, ktime_t next)
|
||||
{
|
||||
struct generic_pm_domain_data *gpd_data;
|
||||
struct generic_pm_domain *genpd;
|
||||
struct gpd_timing_data *td;
|
||||
|
||||
genpd = dev_to_genpd_safe(dev);
|
||||
if (!genpd)
|
||||
return;
|
||||
|
||||
gpd_data = to_gpd_data(dev->power.subsys_data->domain_data);
|
||||
gpd_data->next_wakeup = next;
|
||||
td = to_gpd_data(dev->power.subsys_data->domain_data)->td;
|
||||
if (td)
|
||||
td->next_wakeup = next;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dev_pm_genpd_set_next_wakeup);
|
||||
|
||||
@ -1518,7 +1519,6 @@ static struct generic_pm_domain_data *genpd_alloc_dev_data(struct device *dev,
|
||||
|
||||
gpd_data->base.dev = dev;
|
||||
gpd_data->nb.notifier_call = genpd_dev_pm_qos_notifier;
|
||||
gpd_data->next_wakeup = KTIME_MAX;
|
||||
|
||||
/* Allocate data used by a governor. */
|
||||
if (has_governor) {
|
||||
@ -1530,6 +1530,7 @@ static struct generic_pm_domain_data *genpd_alloc_dev_data(struct device *dev,
|
||||
|
||||
td->constraint_changed = true;
|
||||
td->effective_constraint_ns = PM_QOS_RESUME_LATENCY_NO_CONSTRAINT_NS;
|
||||
td->next_wakeup = KTIME_MAX;
|
||||
gpd_data->td = td;
|
||||
}
|
||||
|
||||
|
@ -139,7 +139,7 @@ static void update_domain_next_wakeup(struct generic_pm_domain *genpd, ktime_t n
|
||||
* is able to enter its optimal idle state.
|
||||
*/
|
||||
list_for_each_entry(pdd, &genpd->dev_list, list_node) {
|
||||
next_wakeup = to_gpd_data(pdd)->next_wakeup;
|
||||
next_wakeup = to_gpd_data(pdd)->td->next_wakeup;
|
||||
if (next_wakeup != KTIME_MAX && !ktime_before(next_wakeup, now))
|
||||
if (ktime_before(next_wakeup, domain_wakeup))
|
||||
domain_wakeup = next_wakeup;
|
||||
|
@ -182,6 +182,7 @@ struct gpd_timing_data {
|
||||
s64 suspend_latency_ns;
|
||||
s64 resume_latency_ns;
|
||||
s64 effective_constraint_ns;
|
||||
ktime_t next_wakeup;
|
||||
bool constraint_changed;
|
||||
bool cached_suspend_ok;
|
||||
};
|
||||
@ -200,7 +201,6 @@ struct generic_pm_domain_data {
|
||||
unsigned int performance_state;
|
||||
unsigned int default_pstate;
|
||||
unsigned int rpm_pstate;
|
||||
ktime_t next_wakeup;
|
||||
void *data;
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user