Skip to content

Commit

Permalink
powercap/drivers/dtpm: Simplify the dtpm table
Browse files Browse the repository at this point in the history
The dtpm table is an array of pointers, that forces the user of the
table to define initdata along with the declaration of the table
entry. It is more efficient to create an array of dtpm structure, so
the declaration of the table entry can be done by initializing the
different fields.

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>
Link: https://lore.kernel.org/r/20210312130411.29833-3-daniel.lezcano@linaro.org
  • Loading branch information
Daniel Lezcano committed Oct 21, 2021
1 parent 4570ddd commit 7a89d7e
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 14 deletions.
4 changes: 2 additions & 2 deletions drivers/powercap/dtpm.c
Original file line number Diff line number Diff line change
Expand Up @@ -467,7 +467,7 @@ int dtpm_register(const char *name, struct dtpm *dtpm, struct dtpm *parent)

static int __init dtpm_init(void)
{
struct dtpm_descr **dtpm_descr;
struct dtpm_descr *dtpm_descr;

pct = powercap_register_control_type(NULL, "dtpm", NULL);
if (IS_ERR(pct)) {
Expand All @@ -476,7 +476,7 @@ static int __init dtpm_init(void)
}

for_each_dtpm_table(dtpm_descr)
(*dtpm_descr)->init(*dtpm_descr);
dtpm_descr->init();

return 0;
}
Expand Down
4 changes: 3 additions & 1 deletion drivers/powercap/dtpm_cpu.c
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ static int cpuhp_dtpm_cpu_online(unsigned int cpu)
return ret;
}

int dtpm_register_cpu(struct dtpm *parent)
static int __init dtpm_cpu_init(void)
{
int ret;

Expand Down Expand Up @@ -241,3 +241,5 @@ int dtpm_register_cpu(struct dtpm *parent)

return 0;
}

DTPM_DECLARE(dtpm_cpu, dtpm_cpu_init);
20 changes: 9 additions & 11 deletions include/linux/dtpm.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,25 +33,23 @@ struct dtpm_ops {
void (*release)(struct dtpm *);
};

struct dtpm_descr;

typedef int (*dtpm_init_t)(struct dtpm_descr *);
typedef int (*dtpm_init_t)(void);

struct dtpm_descr {
struct dtpm *parent;
const char *name;
dtpm_init_t init;
};

/* Init section thermal table */
extern struct dtpm_descr *__dtpm_table[];
extern struct dtpm_descr *__dtpm_table_end[];
extern struct dtpm_descr __dtpm_table[];
extern struct dtpm_descr __dtpm_table_end[];

#define DTPM_TABLE_ENTRY(name) \
static typeof(name) *__dtpm_table_entry_##name \
__used __section("__dtpm_table") = &name
#define DTPM_TABLE_ENTRY(name, __init) \
static struct dtpm_descr __dtpm_table_entry_##name \
__used __section("__dtpm_table") = { \
.init = __init, \
}

#define DTPM_DECLARE(name) DTPM_TABLE_ENTRY(name)
#define DTPM_DECLARE(name, init) DTPM_TABLE_ENTRY(name, init)

#define for_each_dtpm_table(__dtpm) \
for (__dtpm = __dtpm_table; \
Expand Down

0 comments on commit 7a89d7e

Please sign in to comment.