NetBSD-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: 11 beta testing



On Mon, 6 Oct 2025, Van Ly wrote:

sysutils/btop cpu temperature reading doesn't refresh down, the reading went up to 89degC while building chromium and hasn't changed.


Hmm. This looks like a btop bug. It only looks at the first sensor (and, that
too not very well), and doesn't match the core temps to the CPUs.

And, on my HW, `acpitz0' is always at 27.800 C even on Linux. Can you try this
patch:

```
diff -urN btop-1.4.5.orig/src/netbsd/btop_collect.cpp btop-1.4.5/src/netbsd/btop_collect.cpp
--- btop-1.4.5.orig/src/netbsd/btop_collect.cpp	2025-09-19 20:29:22.000000000 +0000
+++ btop-1.4.5/src/netbsd/btop_collect.cpp	2025-10-09 00:03:45.503572033 +0000
@@ -52,6 +52,7 @@
 #include <kvm.h>
 #include <paths.h>
 #include <fcntl.h>
+#include <regex.h>
 #include <unistd.h>
 #include <uvm/uvm_extern.h>

@@ -220,10 +221,10 @@
 		prop_object_t fields_array;
 		// List of common thermal sensors in NetBSD.
 		const string sensors[6] = {
-			"acpitz0",
-			"acpitz1",
 			"coretemp0",
 			"coretemp1",
+			"acpitz0",
+			"acpitz1",
 			"thinkpad0",
 			"amdzentemp0"
 		};
@@ -319,6 +320,12 @@
 			return;
 		}

+		regex_t r;
+		if (regcomp(&r, "(cpu[0-9]* )*temperature", REG_EXTENDED)) {
+			Logger::warning("regcomp() failed");
+			return;
+		}
+
 		string prop_description = "no description";
 		while ((fields = (prop_dictionary_t) prop_object_iterator_next(prop_object_iterator_t(fields_iter))) != NULL) {
 			props = (prop_dictionary_t) prop_dictionary_get(fields, "device-properties");
@@ -335,13 +342,15 @@

 			prop_description = prop_string_cstring(prop_string_t(description));

-			if (prop_description == "temperature") {
+			// if (prop_description == "temperature") {
+			if (regexec(&r, prop_description.c_str(), 0, NULL, 0) == 0) {
 				current_temp = prop_number_integer_value(prop_number_t(cur_value));
 				if (max_value != NULL) {
 					current_cpu.temp_max = MUKTOC(prop_number_integer_value(prop_number_t(max_value)));
 				}
 			}
 		}
+		regfree(&r);

 		prop_object_iterator_release(fields_iter);
 		prop_object_release(dict);
```

It sort-of works for me, even though it's not fully correct (uses `coretemp0'
values for _all_ CPUs).

-RVP


Home | Main Index | Thread Index | Old Index