From 2291a5e288aab0c29e2886ae2e60aa254d698e0e Mon Sep 17 00:00:00 2001 From: Jean-Philippe Orsini Date: Thu, 18 Sep 2014 14:14:17 +0200 Subject: [PATCH] enable/disable of lmsensor provider --- src/lib/lmsensor.c | 48 ++++++++++++++++++++---------------------------- src/lib/lmsensor.h | 10 +--------- src/lib/nvidia.c | 29 ++++++++++++++--------------- src/lib/nvidia.h | 14 ++------------ src/lib/psensor.c | 7 +------ src/main.c | 7 ++++++- 6 files changed, 44 insertions(+), 71 deletions(-) diff --git a/src/lib/lmsensor.c b/src/lib/lmsensor.c index b0acfb4..cf9f0be 100644 --- a/src/lib/lmsensor.c +++ b/src/lib/lmsensor.c @@ -174,20 +174,33 @@ lmsensor_psensor_create(const sensors_chip_name *chip, return psensor; } -struct psensor **lmsensor_psensor_list_add(struct psensor **sensors, - int vn) +void lmsensor_init() +{ + int err = sensors_init(NULL); + + if (err) { + log_err(_("lmsensor: initialization failure: %s."), + sensors_strerror(err)); + init_done = 0; + } else { + init_done = 1; + } +} + +void lmsensor_psensor_list_append(struct psensor ***sensors, int vn) { const sensors_chip_name *chip; int chip_nr = 0; - struct psensor **tmp, **result; const sensors_feature *feature; struct psensor *s; int i; if (!init_done) - return NULL; + lmsensor_init(); + + if (!init_done) + return; - result = sensors; while ((chip = sensors_get_detected_chips(NULL, &chip_nr))) { i = 0; @@ -197,32 +210,11 @@ struct psensor **lmsensor_psensor_list_add(struct psensor **sensors, s = lmsensor_psensor_create(chip, feature, vn); - if (s) { - tmp = psensor_list_add(result, s); - - if (tmp != sensors) - free(result); - - result = tmp; - } + if (s) + psensor_list_append(sensors, s); } } } - - return result; -} - -void lmsensor_init() -{ - int err = sensors_init(NULL); - - if (err) { - log_err(_("lmsensor: initialization failure: %s."), - sensors_strerror(err)); - init_done = 0; - } else { - init_done = 1; - } } void lmsensor_cleanup() diff --git a/src/lib/lmsensor.h b/src/lib/lmsensor.h index 86e6eac..341863d 100644 --- a/src/lib/lmsensor.h +++ b/src/lib/lmsensor.h @@ -21,16 +21,8 @@ void lmsensor_psensor_list_update(struct psensor **sensors); -/* - Adds sensors to a given list of sensors. - - Returns the new allocated list of sensors if sensors have been added - otherwise returns 'sensors'. The list is 'NULL' terminated. - */ -struct psensor ** -lmsensor_psensor_list_add(struct psensor **sensors, int values_max_length); +void lmsensor_psensor_list_append(struct psensor ***sensors, int values_length); -void lmsensor_init(); void lmsensor_cleanup(); #endif diff --git a/src/lib/nvidia.c b/src/lib/nvidia.c index 8f84ea8..797bbf4 100644 --- a/src/lib/nvidia.c +++ b/src/lib/nvidia.c @@ -35,6 +35,8 @@ Display *display; +static const char *PROVIDER_NAME = "nvctrl"; + static char *get_product_name(int id, int type) { char *name; @@ -265,8 +267,8 @@ static struct psensor *create_nvidia_sensor(int id, int subtype, int value_len) name = malloc(n); sprintf(name, "%s %s %s", pname, strnid, stype); - sid = malloc(strlen("nvidia") + 1 + strlen(name) + 1); - sprintf(sid, "nvidia %s", name); + sid = malloc(strlen(PROVIDER_NAME) + 1 + strlen(name) + 1); + sprintf(sid, "%s %s", PROVIDER_NAME, name); s = psensor_create(sid, name, pname, type, value_len); s->nvidia_id = id; @@ -321,29 +323,28 @@ static void add(struct psensor ***sensors, int id, int type, int values_len) psensor_list_append(sensors, s); } -struct psensor ** -nvidia_psensor_list_add(struct psensor **ss, int values_len) +void nvidia_psensor_list_append(struct psensor ***ss, int values_len) { int i, n, utype; Bool ret; if (!init()) - return ss; + return; ret = XNVCTRLQueryTargetCount(display, NV_CTRL_TARGET_TYPE_GPU, &n); if (ret == True) { for (i = 0; i < n; i++) { - add(&ss, + add(ss, i, SENSOR_TYPE_GPU | SENSOR_TYPE_TEMP, values_len); utype = SENSOR_TYPE_GPU | SENSOR_TYPE_PERCENT; - add(&ss, i, utype | SENSOR_TYPE_AMBIENT, values_len); - add(&ss, i, utype | SENSOR_TYPE_GRAPHICS, values_len); - add(&ss, i, utype | SENSOR_TYPE_VIDEO, values_len); - add(&ss, i, utype | SENSOR_TYPE_MEMORY, values_len); - add(&ss, i, utype | SENSOR_TYPE_PCIE, values_len); + add(ss, i, utype | SENSOR_TYPE_AMBIENT, values_len); + add(ss, i, utype | SENSOR_TYPE_GRAPHICS, values_len); + add(ss, i, utype | SENSOR_TYPE_VIDEO, values_len); + add(ss, i, utype | SENSOR_TYPE_MEMORY, values_len); + add(ss, i, utype | SENSOR_TYPE_PCIE, values_len); } } @@ -353,17 +354,15 @@ nvidia_psensor_list_add(struct psensor **ss, int values_len) for (i = 0; i < n; i++) { utype = SENSOR_TYPE_FAN | SENSOR_TYPE_RPM; if (check_sensor(i, utype)) - add(&ss, i, utype, values_len); + add(ss, i, utype, values_len); utype = SENSOR_TYPE_FAN | SENSOR_TYPE_PERCENT; if (check_sensor(i, utype)) - add(&ss, i, utype, values_len); + add(ss, i, utype, values_len); } } else { log_err(_("NVIDIA: failed to retrieve number of fans.")); } - - return ss; } void nvidia_cleanup() diff --git a/src/lib/nvidia.h b/src/lib/nvidia.h index 9c1089c..a94d72e 100644 --- a/src/lib/nvidia.h +++ b/src/lib/nvidia.h @@ -19,21 +19,11 @@ #ifndef _PSENSOR_NVIDIA_H_ #define _PSENSOR_NVIDIA_H_ -#include "psensor.h" +#include -/* - Updates temperatures of NVidia sensors. -*/ void nvidia_psensor_list_update(struct psensor **sensors); -/* - Adds NVIDIA sensors to a given list of sensors. - - Returns the new allocated list of sensors if sensors have been added - otherwise returns 'sensors'. The list is 'NULL' terminated. - */ -struct psensor **nvidia_psensor_list_add(struct psensor **sensors, - int values_max_length); +void nvidia_psensor_list_append(struct psensor ***sensors, int values_length); void nvidia_cleanup(); diff --git a/src/lib/psensor.c b/src/lib/psensor.c index 1efff09..cd7fcf6 100644 --- a/src/lib/psensor.c +++ b/src/lib/psensor.c @@ -25,7 +25,6 @@ #include #include -#include #include struct psensor *psensor_create(char *id, @@ -415,7 +414,7 @@ struct psensor **get_all_sensors(int use_libatasmart, int values_max_length) struct psensor **psensors; struct psensor **tmp_psensors; - psensors = lmsensor_psensor_list_add(NULL, values_max_length); + psensors = NULL; if (!use_libatasmart) { tmp_psensors = hddtemp_psensor_list_add(psensors, @@ -511,8 +510,6 @@ const char *psensor_type_to_unit_str(unsigned int type, int use_celsius) void psensor_list_update_measures(struct psensor **sensors) { - lmsensor_psensor_list_update(sensors); - if (psensor_list_contains_type(sensors, SENSOR_TYPE_HDDTEMP)) hddtemp_psensor_list_update(sensors); @@ -536,12 +533,10 @@ void psensor_log_measures(struct psensor **sensors) void psensor_init() { - lmsensor_init(); } void psensor_cleanup() { - lmsensor_cleanup(); } struct psensor **psensor_list_copy(struct psensor **sensors) diff --git a/src/main.c b/src/main.c index 267aa43..22072f6 100644 --- a/src/main.c +++ b/src/main.c @@ -157,6 +157,8 @@ static void *update_measures(void *data) update_psensor_values_size(sensors, cfg); psensor_list_update_measures(sensors); + + lmsensor_psensor_list_update(sensors); #ifdef HAVE_REMOTE_SUPPORT remote_psensor_list_update(sensors); #endif @@ -461,9 +463,12 @@ static struct psensor **create_sensors_list(const char *url, } else { sensors = get_all_sensors(use_libatasmart, 600); + if (config_is_lmsensor_enabled()) + lmsensor_psensor_list_append(&sensors, 600); + #ifdef HAVE_NVIDIA if (config_is_nvctrl_enabled()) - sensors = nvidia_psensor_list_add(sensors, 600); + nvidia_psensor_list_append(&sensors, 600); #endif #ifdef HAVE_LIBATIADL if (config_is_atiadlsdk_enabled()) -- 2.7.4