Skip to content

Commit

Permalink
thermal: netlink: Fix compilation error when CONFIG_NET=n
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Daniel Lezcano <[email protected]>
Reviewed-by: Amit Kucheria <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
  • Loading branch information
dlezcano committed Jul 21, 2020
1 parent 55cdf0a commit 5b8583d
Show file tree
Hide file tree
Showing 4 changed files with 114 additions and 19 deletions.
10 changes: 10 additions & 0 deletions drivers/thermal/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 4 additions & 1 deletion drivers/thermal/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
20 changes: 2 additions & 18 deletions drivers/thermal/thermal_core.h
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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];
Expand Down
98 changes: 98 additions & 0 deletions drivers/thermal/thermal_netlink.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (C) Linaro Ltd 2020
* Author: Daniel Lezcano <[email protected]>
*/

/* 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 */

0 comments on commit 5b8583d

Please sign in to comment.