aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Black <daniel.black@au1.ibm.com>2016-05-23 11:41:56 +1000
committerNivedita Swaminathan <nivedita.swaminathan@intel.com>2016-07-21 15:12:34 -0700
commit5c72da87bc86fe17072b51e53aaf66a69383d071 (patch)
tree3c0333582cdaf074e3d64a0c24b97a8a30c45461
parent351f7f02125bee2799fcccf4541a0a9c66a55a96 (diff)
downloadpowertop-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.cpp7
-rw-r--r--src/measurement/opal-sensors.cpp4
-rw-r--r--src/measurement/opal-sensors.h3
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) {};