linux-stable/drivers/thermal/thermal_netlink.h
Daniel Lezcano d2a89b5283 thermal: netlink: Improve the initcall ordering
The initcalls like to play joke. In our case, the thermal-netlink
initcall is called after the thermal-core initcall but this one sends
a notification before the former is initialized. No issue was spotted,
but it could lead to a memory corruption, so instead of relying on the
core_initcall for the thermal-netlink, let's initialize directly from
the thermal-core init routine, so we have full control of the init
ordering.

Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
Reviewed-by: Amit Kucheria <amit.kucheria@linaro.org>
Link: https://lore.kernel.org/r/20200717164217.18819-1-daniel.lezcano@linaro.org
2020-07-21 10:40:08 +02:00

104 lines
2.3 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (C) Linaro Ltd 2020
* Author: Daniel Lezcano <daniel.lezcano@linaro.org>
*/
/* Netlink notification function */
#ifdef CONFIG_THERMAL_NETLINK
int __init thermal_netlink_init(void);
int thermal_notify_tz_create(int tz_id, const char *name);
int thermal_notify_tz_delete(int tz_id);
int thermal_notify_tz_enable(int tz_id);
int thermal_notify_tz_disable(int tz_id);
int thermal_notify_tz_trip_down(int tz_id, int id);
int thermal_notify_tz_trip_up(int tz_id, int id);
int thermal_notify_tz_trip_delete(int tz_id, int id);
int thermal_notify_tz_trip_add(int tz_id, int id, int type,
int temp, int hyst);
int thermal_notify_tz_trip_change(int tz_id, int id, int type,
int temp, int hyst);
int thermal_notify_cdev_state_update(int cdev_id, int state);
int thermal_notify_cdev_add(int cdev_id, const char *name, int max_state);
int thermal_notify_cdev_delete(int cdev_id);
int thermal_notify_tz_gov_change(int tz_id, const char *name);
int thermal_genl_sampling_temp(int id, int temp);
#else
static inline int thermal_netlink_init(void)
{
return 0;
}
static inline int thermal_notify_tz_create(int tz_id, const char *name)
{
return 0;
}
static inline int thermal_notify_tz_delete(int tz_id)
{
return 0;
}
static inline int thermal_notify_tz_enable(int tz_id)
{
return 0;
}
static inline int thermal_notify_tz_disable(int tz_id)
{
return 0;
}
static inline int thermal_notify_tz_trip_down(int tz_id, int id)
{
return 0;
}
static inline int thermal_notify_tz_trip_up(int tz_id, int id)
{
return 0;
}
static inline int thermal_notify_tz_trip_delete(int tz_id, int id)
{
return 0;
}
static inline int thermal_notify_tz_trip_add(int tz_id, int id, int type,
int temp, int hyst)
{
return 0;
}
static inline int thermal_notify_tz_trip_change(int tz_id, int id, int type,
int temp, int hyst)
{
return 0;
}
static inline int thermal_notify_cdev_state_update(int cdev_id, int state)
{
return 0;
}
static inline int thermal_notify_cdev_add(int cdev_id, const char *name,
int max_state)
{
return 0;
}
static inline int thermal_notify_cdev_delete(int cdev_id)
{
return 0;
}
static inline int thermal_notify_tz_gov_change(int tz_id, const char *name)
{
return 0;
}
static inline int thermal_genl_sampling_temp(int id, int temp)
{
return 0;
}
#endif /* CONFIG_THERMAL_NETLINK */