diff options
author | Daniel Black <daniel.black@au1.ibm.com> | 2016-05-23 11:41:56 +1000 |
---|---|---|
committer | Nivedita Swaminathan <nivedita.swaminathan@intel.com> | 2016-07-21 15:12:34 -0700 |
commit | 5c72da87bc86fe17072b51e53aaf66a69383d071 (patch) | |
tree | 3c0333582cdaf074e3d64a0c24b97a8a30c45461 | |
parent | 351f7f02125bee2799fcccf4541a0a9c66a55a96 (diff) | |
download | powertop-2.0-5c72da87bc86fe17072b51e53aaf66a69383d071.tar.gz |
Widen ppc64 paths for sysfs file
hwmon0 was assumed to be the only hwmon directory used by POWER
however hwmon4 was observered on different hardware.
Here we use the process_glob function to retrieve all measurement
locations.
The opal_sensors_power_meter class now stores the full path.
Signed-off-by: Daniel Black <daniel.black@au1.ibm.com>
-rw-r--r-- | src/measurement/measurement.cpp | 7 | ||||
-rw-r--r-- | src/measurement/opal-sensors.cpp | 4 | ||||
-rw-r--r-- | src/measurement/opal-sensors.h | 3 |
3 files changed, 8 insertions, 6 deletions
diff --git a/src/measurement/measurement.cpp b/src/measurement/measurement.cpp index 68c41fe..1c8e4da 100644 --- a/src/measurement/measurement.cpp +++ b/src/measurement/measurement.cpp @@ -134,8 +134,11 @@ void acpi_power_meters_callback(const char *d_name) void sysfs_opal_sensors_callback(const char *d_name) { class opal_sensors_power_meter *meter; + const char *c; - if (strncmp(d_name, "power", 5) != 0) + /* Those that end in / are directories and we don't want them */ + c = strrchr(d_name, '/'); + if (c && *(c+1) == '\0') return; meter = new(std::nothrow) class opal_sensors_power_meter(d_name); @@ -146,7 +149,7 @@ void sysfs_opal_sensors_callback(const char *d_name) void detect_power_meters(void) { process_directory("/sys/class/power_supply", sysfs_power_meters_callback); - process_directory("/sys/devices/platform/opal-sensor/hwmon/hwmon0", sysfs_opal_sensors_callback); + process_glob("/sys/devices/platform/opal-sensor/hwmon/hwmon*/power*", sysfs_opal_sensors_callback); if (power_meters.size() == 0) { process_directory("/proc/acpi/battery", acpi_power_meters_callback); } diff --git a/src/measurement/opal-sensors.cpp b/src/measurement/opal-sensors.cpp index 4198b63..7316d1f 100644 --- a/src/measurement/opal-sensors.cpp +++ b/src/measurement/opal-sensors.cpp @@ -36,13 +36,11 @@ opal_sensors_power_meter::opal_sensors_power_meter(const char *power_supply_name double opal_sensors_power_meter::joules_consumed(void) { - char filename[PATH_MAX]; bool ok; int value; double r = 0; - snprintf(filename, sizeof(filename), "/sys/devices/platform/opal-sensor/hwmon/hwmon0/%s", name); - value = read_sysfs(filename, &ok); + value = read_sysfs(name, &ok); if(ok) r = value / 1000000.0; diff --git a/src/measurement/opal-sensors.h b/src/measurement/opal-sensors.h index d8aa5e2..8347733 100644 --- a/src/measurement/opal-sensors.h +++ b/src/measurement/opal-sensors.h @@ -26,9 +26,10 @@ #define INCLUDE_GUARD_OPAL_SENSORS_H #include "measurement.h" +#include <limits.h> class opal_sensors_power_meter: public power_meter { - char name[256]; + char name[PATH_MAX]; public: opal_sensors_power_meter(const char *power_supply_name); virtual void start_measurement(void) {}; |