X-Git-Url: https://git.wpitchoune.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fnvidia.c;h=4f2c67afaff51c52ef9c4abfe743994991b3e15f;hb=8a3d16ade26321374c684080d627cf12ba71e598;hp=47ec7aedb68177f654255d40ff7056313466339d;hpb=b44cf2b8b40c27578d0083678e8ff8f64e644ce8;p=psensor.git diff --git a/src/lib/nvidia.c b/src/lib/nvidia.c index 47ec7ae..4f2c67a 100644 --- a/src/lib/nvidia.c +++ b/src/lib/nvidia.c @@ -50,13 +50,11 @@ static char *get_product_name(int id, int type) NV_CTRL_STRING_PRODUCT_NAME, &name); if (res == True) { - if (strcmp(name, "Unknown")) { + if (strcmp(name, "Unknown")) return name; - } else { - log_err(_("Unknown NVIDIA product name for GPU %d"), - id); - free(name); - } + + log_err(_("Unknown NVIDIA product name for GPU %d"), id); + free(name); } else { log_err(_("Failed to retrieve NVIDIA product name for GPU %d"), id); @@ -74,8 +72,8 @@ static double get_att(int target, int id, int att) if (res == True) return temp; - else - return UNKNOWN_DBL_VALUE; + + return UNKNOWN_DBL_VALUE; } static double get_usage_att(char *atts, const char *att) @@ -132,20 +130,30 @@ static const char *get_nvidia_type_str(int type) { if (type & SENSOR_TYPE_GRAPHICS) return "graphics"; - else if (type & SENSOR_TYPE_VIDEO) + + if (type & SENSOR_TYPE_VIDEO) return "video"; - else if (type & SENSOR_TYPE_MEMORY) + + if (type & SENSOR_TYPE_MEMORY) return "memory"; - else if (type & SENSOR_TYPE_PCIE) + + if (type & SENSOR_TYPE_PCIE) return "PCIe"; - else if (type & SENSOR_TYPE_AMBIENT) + + if (type & SENSOR_TYPE_AMBIENT) return "ambient"; - else if (type & SENSOR_TYPE_TEMP) + + if (type & SENSOR_TYPE_TEMP) return "temp"; - else if (type & SENSOR_TYPE_FAN) - return "fan"; - else - return "unknown"; + + if (type & SENSOR_TYPE_FAN) { + if (type & SENSOR_TYPE_RPM) + return "fan rpm"; + + return "fan level"; + } + + return "unknown"; } static double get_usage(int id, int type) @@ -189,10 +197,15 @@ static double get_value(int id, int type) return get_att(NV_CTRL_TARGET_TYPE_GPU, id, att); } else if (type & SENSOR_TYPE_FAN) { - return get_att(NV_CTRL_TARGET_TYPE_COOLER, - id, - NV_CTRL_THERMAL_COOLER_SPEED); - } else { /* SENSOR_TYPE_USAGE */ + if (type & SENSOR_TYPE_RPM) + return get_att(NV_CTRL_TARGET_TYPE_COOLER, + id, + NV_CTRL_THERMAL_COOLER_SPEED); + else /* SENSOR_TYPE_PERCENT */ + return get_att(NV_CTRL_TARGET_TYPE_COOLER, + id, + NV_CTRL_THERMAL_COOLER_LEVEL); + } else { /* SENSOR_TYPE_PERCENT */ return get_usage(id, type); } } @@ -249,7 +262,6 @@ static struct psensor *create_nvidia_sensor(int id, int subtype, int value_len) stype = get_nvidia_type_str(type); n = strlen(pname) + 1 + strlen(strnid) + 1 + strlen(stype) + 1; - name = malloc(n); sprintf(name, "%s %s %s", pname, strnid, stype); @@ -300,21 +312,18 @@ void nvidia_psensor_list_update(struct psensor **sensors) static void add(struct psensor ***sensors, int id, int type, int values_len) { - struct psensor **tmp, *s; + struct psensor *s; s = create_nvidia_sensor(id, type, values_len); - if (s) { - tmp = psensor_list_add(*sensors, s); - free(*sensors); - *sensors = tmp; - } + if (s) + psensor_list_append(sensors, s); } struct psensor ** nvidia_psensor_list_add(struct psensor **ss, int values_len) { - int i, n, utype, rpm; + int i, n, utype; Bool ret; if (!init()) @@ -328,16 +337,11 @@ nvidia_psensor_list_add(struct psensor **ss, int values_len) SENSOR_TYPE_GPU | SENSOR_TYPE_TEMP, values_len); - utype = SENSOR_TYPE_GPU | SENSOR_TYPE_USAGE; - + 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); } } @@ -346,34 +350,13 @@ nvidia_psensor_list_add(struct psensor **ss, int values_len) if (ret == True) { log_debug("NVIDIA: number of fans: %d", n); for (i = 0; i < n; i++) { - ret = XNVCTRLQueryTargetAttribute - (display, - NV_CTRL_TARGET_TYPE_COOLER, - i, - 0, - NV_CTRL_THERMAL_COOLER_SPEED, &rpm); - if (ret == True) - log_debug("NVIDIA: fan speed %d %d", i, rpm); - else - log_err(_("NVIDIA: " - "failed to retrieve fan speed %d"), - i); - - ret = XNVCTRLQueryTargetAttribute - (display, - NV_CTRL_TARGET_TYPE_COOLER, - i, - 0, - NV_CTRL_THERMAL_COOLER_LEVEL, &rpm); - if (ret == True) - log_debug("NVIDIA: fan level %d %d", i, rpm); - else - log_err(_("NVIDIA: " - "failed to retrieve fan level %d"), - i); - - - add(&ss, i, SENSOR_TYPE_FAN, values_len); + utype = SENSOR_TYPE_FAN | SENSOR_TYPE_RPM; + if (check_sensor(i, utype)) + add(&ss, i, utype, values_len); + + utype = SENSOR_TYPE_FAN | SENSOR_TYPE_PERCENT; + if (check_sensor(i, utype)) + add(&ss, i, utype, values_len); } } else { log_err(_("NVIDIA: failed to retrieve number of fans."));