build/packages/extras-buildpkgs/htop/debian/patches/fix-cpufreq-meter-for-non-root.patch

57 lines
1.8 KiB
Diff
Raw Normal View History

diff --git a/linux/Platform.c b/linux/Platform.c
index cd95463..f9e644e 100644
--- a/linux/Platform.c
+++ b/linux/Platform.c
@@ -287,7 +287,7 @@ int Platform_getCpuTemp(Meter* this) {
}
} else {
// sleep_ms(30);
- // xSnprintf(szbuf, sizeof(szbuf), "/sys/devices/system/cpu/cpufreq/policy%d/cpuinfo_cur_freq", cpu);
+ // xSnprintf(szbuf, sizeof(szbuf), "/sys/devices/system/cpu/cpufreq/policy%d/scaling_cur_freq", cpu);
xSnprintf(szbuf, sizeof(szbuf), "%s", "/sys/class/thermal/thermal_zone0/temp");
}
FILE *fd = fopen(szbuf, "r");
@@ -304,7 +304,6 @@ int Platform_getCpuTemp(Meter* this) {
int Platform_getCpuFreq(Meter* this, int cpu) {
int Freq = 0;
- FILE* fd;
char szbuf[256];
Settings* settings = this->pl->settings;
char *handler;
@@ -318,18 +317,28 @@ int Platform_getCpuFreq(Meter* this, int cpu) {
} else {
xSnprintf(szbuf, sizeof(szbuf), "%s", handler);
}
+ ReadIntFromFile(szbuf, &Freq);
} else {
- // sleep_ms(30);
- xSnprintf(szbuf, sizeof(szbuf), "/sys/devices/system/cpu/cpufreq/policy%d/cpuinfo_cur_freq", cpu);
+ // sleep_ms(30);
+ xSnprintf(szbuf, sizeof(szbuf), "/sys/devices/system/cpu/cpufreq/policy%d/scaling_cur_freq", cpu);
+ if (ReadIntFromFile(szbuf, &Freq) < 0) {
+ xSnprintf(szbuf, sizeof(szbuf), "/sys/devices/system/cpu/cpufreq/policy%d/cpuinfo_cur_freq", cpu);
+ ReadIntFromFile(szbuf, &Freq);
+ }
}
- fd = fopen(szbuf, "r");
+ return Freq;
+}
+
+int ReadIntFromFile(char *file_name, int *out) {
+ FILE *fd;
+ fd = fopen(file_name, "r");
if (fd) {
int n;
- n = fscanf(fd, "%d", &Freq);
+ n = fscanf(fd, "%d", out);
fclose(fd);
- if (n <= 0) return 0;
+ return n;
}
- return Freq;
+ return 0;
}
int Platform_getCpuVcore(Meter* this) {