thermal: netlink: Fix compilation error when CONFIG_NET=n

When the network is not configured, the netlink is disabled on all
the system. The thermal framework assumed the netlink is always
opt-in.

Fix this by adding a Kconfig option for the netlink notification,
defaulting to yes and depending on CONFIG_NET.

As the change implies multiple stubs and in order to not pollute the
internal thermal header, the thermal_nelink.h has been added and
included in the thermal_core.h, so this one regain some kind of
clarity.

Reported-by: Randy Dunlap <rdunlap@infradead.org>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Reviewed-by: Amit Kucheria <amit.kucheria@linaro.org>
Link: https://lore.kernel.org/r/20200707090159.1018-1-daniel.lezcano@linaro.org
This commit is contained in:
Daniel Lezcano 2020-07-07 11:01:57 +02:00
parent 55cdf0a283
commit 5b8583d3bd
4 changed files with 114 additions and 19 deletions

View file

@ -17,6 +17,16 @@ menuconfig THERMAL
if THERMAL
config THERMAL_NETLINK
bool "Thermal netlink management"
depends on NET
default y
help
The thermal framework has a netlink interface to do thermal
zones discovery, temperature readings and events such as
trip point crossed, cooling device update or governor
change. It is recommended to enable the feature.
config THERMAL_STATISTICS
bool "Thermal state transition statistics"
help

View file

@ -5,7 +5,10 @@
obj-$(CONFIG_THERMAL) += thermal_sys.o
thermal_sys-y += thermal_core.o thermal_sysfs.o \
thermal_helpers.o thermal_netlink.o
thermal_helpers.o
# netlink interface to manage the thermal framework
thermal_sys-$(CONFIG_THERMAL_NETLINK) += thermal_netlink.o
# interface to/from other layers providing sensors
thermal_sys-$(CONFIG_THERMAL_HWMON) += thermal_hwmon.o

View file

@ -12,6 +12,8 @@
#include <linux/device.h>
#include <linux/thermal.h>
#include "thermal_netlink.h"
/* Default Thermal Governor */
#if defined(CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE)
#define DEFAULT_THERMAL_GOVERNOR "step_wise"
@ -52,24 +54,6 @@ int for_each_thermal_governor(int (*cb)(struct thermal_governor *, void *),
struct thermal_zone_device *thermal_zone_get_by_id(int id);
/* Netlink notification function */
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);
struct thermal_attr {
struct device_attribute attr;
char name[THERMAL_NAME_LENGTH];

View file

@ -0,0 +1,98 @@
/* 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 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_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 */