Skip to content

Commit

Permalink
PM: EM: Remove old table
Browse files Browse the repository at this point in the history
Remove the old EM table which wasn't able to modify the data. Clean the
unneeded function and refactor the code a bit.

Reviewed-by: Dietmar Eggemann <dietmar.eggemann@arm.com>
Tested-by: Dietmar Eggemann <dietmar.eggemann@arm.com>
Signed-off-by: Lukasz Luba <lukasz.luba@arm.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
  • Loading branch information
Lukasz Luba authored and Rafael J. Wysocki committed Feb 8, 2024
1 parent 09417e6 commit 24e9fb6
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 41 deletions.
2 changes: 0 additions & 2 deletions include/linux/energy_model.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ struct em_perf_table {

/**
* struct em_perf_domain - Performance domain
* @table: List of performance states, in ascending order
* @em_table: Pointer to the runtime modifiable em_perf_table
* @nr_perf_states: Number of performance states
* @flags: See "em_perf_domain flags"
Expand All @@ -69,7 +68,6 @@ struct em_perf_table {
* field is unused.
*/
struct em_perf_domain {
struct em_perf_state *table;
struct em_perf_table __rcu *em_table;
int nr_perf_states;
unsigned long flags;
Expand Down
46 changes: 7 additions & 39 deletions kernel/power/energy_model.c
Original file line number Diff line number Diff line change
Expand Up @@ -276,17 +276,6 @@ static int em_compute_costs(struct device *dev, struct em_perf_state *table,
return 0;
}

static int em_allocate_perf_table(struct em_perf_domain *pd,
int nr_states)
{
pd->table = kcalloc(nr_states, sizeof(struct em_perf_state),
GFP_KERNEL);
if (!pd->table)
return -ENOMEM;

return 0;
}

/**
* em_dev_update_perf_domain() - Update runtime EM table for a device
* @dev : Device for which the EM is to be updated
Expand Down Expand Up @@ -331,24 +320,6 @@ int em_dev_update_perf_domain(struct device *dev,
}
EXPORT_SYMBOL_GPL(em_dev_update_perf_domain);

static int em_create_runtime_table(struct em_perf_domain *pd)
{
struct em_perf_table __rcu *table;
int table_size;

table = em_table_alloc(pd);
if (!table)
return -ENOMEM;

/* Initialize runtime table with existing data */
table_size = sizeof(struct em_perf_state) * pd->nr_perf_states;
memcpy(table->state, pd->table, table_size);

rcu_assign_pointer(pd->em_table, table);

return 0;
}

static int em_create_perf_table(struct device *dev, struct em_perf_domain *pd,
struct em_perf_state *table,
struct em_data_callback *cb,
Expand Down Expand Up @@ -409,6 +380,7 @@ static int em_create_pd(struct device *dev, int nr_states,
struct em_data_callback *cb, cpumask_t *cpus,
unsigned long flags)
{
struct em_perf_table __rcu *em_table;
struct em_perf_domain *pd;
struct device *cpu_dev;
int cpu, ret, num_cpus;
Expand All @@ -435,17 +407,15 @@ static int em_create_pd(struct device *dev, int nr_states,

pd->nr_perf_states = nr_states;

ret = em_allocate_perf_table(pd, nr_states);
if (ret)
em_table = em_table_alloc(pd);
if (!em_table)
goto free_pd;

ret = em_create_perf_table(dev, pd, pd->table, cb, flags);
ret = em_create_perf_table(dev, pd, em_table->state, cb, flags);
if (ret)
goto free_pd_table;

ret = em_create_runtime_table(pd);
if (ret)
goto free_pd_table;
rcu_assign_pointer(pd->em_table, em_table);

if (_is_cpu_device(dev))
for_each_cpu(cpu, cpus) {
Expand All @@ -458,7 +428,7 @@ static int em_create_pd(struct device *dev, int nr_states,
return 0;

free_pd_table:
kfree(pd->table);
kfree(em_table);
free_pd:
kfree(pd);
return -EINVAL;
Expand Down Expand Up @@ -629,7 +599,7 @@ int em_dev_register_perf_domain(struct device *dev, unsigned int nr_states,

dev->em_pd->flags |= flags;

em_cpufreq_update_efficiencies(dev, dev->em_pd->table);
em_cpufreq_update_efficiencies(dev, dev->em_pd->em_table->state);

em_debug_create_pd(dev);
dev_info(dev, "EM: created perf domain\n");
Expand Down Expand Up @@ -666,8 +636,6 @@ void em_dev_unregister_perf_domain(struct device *dev)
mutex_lock(&em_pd_mutex);
em_debug_remove_pd(dev);

kfree(dev->em_pd->table);

em_table_free(dev->em_pd->em_table);

kfree(dev->em_pd);
Expand Down

0 comments on commit 24e9fb6

Please sign in to comment.