Any chance this patch gets merged for v5.4?
Thanks -- Daniel On 12/06/2019 22:13, Daniel Lezcano wrote: > Currently the governors are declared in their respective files but they > export their [un]register functions which in turn call the [un]register > governors core's functions. That implies a cyclic dependency which is > not desirable. There is a way to self-encapsulate the governors by letting > them to declare themselves in a __init section table. > > Define the table in the asm generic linker description like the other > tables and provide the specific macros to deal with. > > Reviewed-by: Amit Kucheria <[email protected]> > Signed-off-by: Daniel Lezcano <[email protected]> > --- > drivers/thermal/thermal_core.h | 15 +++++++++++++++ > include/asm-generic/vmlinux.lds.h | 11 +++++++++++ > 2 files changed, 26 insertions(+) > > diff --git a/drivers/thermal/thermal_core.h b/drivers/thermal/thermal_core.h > index 0df190ed82a7..be901e84aa65 100644 > --- a/drivers/thermal/thermal_core.h > +++ b/drivers/thermal/thermal_core.h > @@ -15,6 +15,21 @@ > /* Initial state of a cooling device during binding */ > #define THERMAL_NO_TARGET -1UL > > +/* Init section thermal table */ > +extern struct thermal_governor *__governor_thermal_table[]; > +extern struct thermal_governor *__governor_thermal_table_end[]; > + > +#define THERMAL_TABLE_ENTRY(table, name) \ > + (static typeof(name) *__thermal_table_entry_##name \ > + __used __section(__##table##_thermal_table) = &name) > + > +#define THERMAL_GOVERNOR_DECLARE(name) THERMAL_TABLE_ENTRY(governor, > name) > + > +#define for_each_governor_table(__governor) \ > + for (__governor = __governor_thermal_table; \ > + __governor < __governor_thermal_table_end; \ > + __governor++) > + > /* > * This structure is used to describe the behavior of > * a certain cooling device on a certain trip point > diff --git a/include/asm-generic/vmlinux.lds.h > b/include/asm-generic/vmlinux.lds.h > index f8f6f04c4453..8312fdc2b2fa 100644 > --- a/include/asm-generic/vmlinux.lds.h > +++ b/include/asm-generic/vmlinux.lds.h > @@ -239,6 +239,16 @@ > #define ACPI_PROBE_TABLE(name) > #endif > > +#ifdef CONFIG_THERMAL > +#define THERMAL_TABLE(name) \ > + . = ALIGN(8); \ > + __##name##_thermal_table = .; \ > + KEEP(*(__##name##_thermal_table)) \ > + __##name##_thermal_table_end = .; > +#else > +#define THERMAL_TABLE(name) > +#endif > + > #define KERNEL_DTB() \ > STRUCT_ALIGN(); \ > __dtb_start = .; \ > @@ -609,6 +619,7 @@ > IRQCHIP_OF_MATCH_TABLE() \ > ACPI_PROBE_TABLE(irqchip) \ > ACPI_PROBE_TABLE(timer) \ > + THERMAL_TABLE(governor) \ > EARLYCON_TABLE() \ > LSM_TABLE() > > -- <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook | <http://twitter.com/#!/linaroorg> Twitter | <http://www.linaro.org/linaro-blog/> Blog

