From: Lukasz Luba Date: Thu, 8 Feb 2024 11:55:40 +0000 (+0000) Subject: PM: EM: Check if the get_cost() callback is present in em_compute_costs() X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=818867224d41725dcf4abe890d8f24e5d6bd9c67;p=linux.git PM: EM: Check if the get_cost() callback is present in em_compute_costs() Subsequent changes will introduce a case in which 'cb->get_cost' may not be set in em_compute_costs(), so add a check to ensure that it is not NULL before attempting to dereference it. Reviewed-by: Dietmar Eggemann Tested-by: Dietmar Eggemann Signed-off-by: Lukasz Luba Signed-off-by: Rafael J. Wysocki --- diff --git a/kernel/power/energy_model.c b/kernel/power/energy_model.c index 5c47caaf270e6..21d7612232551 100644 --- a/kernel/power/energy_model.c +++ b/kernel/power/energy_model.c @@ -116,7 +116,7 @@ static int em_compute_costs(struct device *dev, struct em_perf_state *table, for (i = nr_states - 1; i >= 0; i--) { unsigned long power_res, cost; - if (flags & EM_PERF_DOMAIN_ARTIFICIAL) { + if ((flags & EM_PERF_DOMAIN_ARTIFICIAL) && cb->get_cost) { ret = cb->get_cost(dev, table[i].frequency, &cost); if (ret || !cost || cost > EM_MAX_POWER) { dev_err(dev, "EM: invalid cost %lu %d\n",