summaryrefslogtreecommitdiffstats
path: root/control/fan.cpp
diff options
context:
space:
mode:
authorMatthew Barth <msbarth@us.ibm.com>2018-05-09 14:18:16 -0500
committerMatthew Barth <msbarth@linux.ibm.com>2018-05-17 17:08:59 +0000
commit1061cba14167d88e9901e6ea50ae58854891ea8e (patch)
treeeac0f40777382d98330562914f04e77d0c093862 /control/fan.cpp
parent2029106af90bcdfd6a640a21c2c2eff36cb95f67 (diff)
downloadphosphor-fan-presence-1061cba14167d88e9901e6ea50ae58854891ea8e.tar.gz
phosphor-fan-presence-1061cba14167d88e9901e6ea50ae58854891ea8e.zip
perf: Cache service name for fan target sensors
Cache the service name for each fan target sensor path and use that service when a new target speed is set on the Target property. Tested: Fan target sensor created and set speed functions the same Change-Id: I3e25e355cf5d31ce814a73c801c6f086fa45531a Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
Diffstat (limited to 'control/fan.cpp')
-rw-r--r--control/fan.cpp31
1 files changed, 12 insertions, 19 deletions
diff --git a/control/fan.cpp b/control/fan.cpp
index b0881da..40ec6b4 100644
--- a/control/fan.cpp
+++ b/control/fan.cpp
@@ -19,7 +19,6 @@
#include <xyz/openbmc_project/Common/error.hpp>
#include <string>
#include "fan.hpp"
-#include "utility.hpp"
#include "sdbusplus.hpp"
namespace phosphor
@@ -49,12 +48,18 @@ Fan::Fan(sdbusplus::bus::bus& bus, const FanDefinition& def):
for (auto& s : sensors)
{
path = FAN_SENSOR_PATH + s;
- _sensors.emplace_back(path);
+ auto service = util::SDBusPlus::getService(
+ bus,
+ path,
+ _interface);
+ _sensors[path] = service;
}
- // All sensors associated with this fan are set to same target speed,
+ // All sensors associated with this fan are set to the same target speed,
// so only need to read target property from one.
if (!path.empty())
{
+ // Use getProperty with service lookup since each target sensor
+ // path given could have different services providing them
_targetSpeed = util::SDBusPlus::getProperty<uint64_t>(
bus,
path,
@@ -63,17 +68,6 @@ Fan::Fan(sdbusplus::bus::bus& bus, const FanDefinition& def):
}
}
-
-//TODO openbmc/openbmc#1524 Can cache this value when
-//openbmc/openbmc#1496 is resolved.
-std::string Fan::getService(const std::string& sensor)
-{
- return phosphor::fan::util::getService(sensor,
- _interface,
- _bus);
-}
-
-
void Fan::setSpeed(uint64_t speed)
{
sdbusplus::message::variant<uint64_t> value = speed;
@@ -81,10 +75,8 @@ void Fan::setSpeed(uint64_t speed)
for (auto& sensor : _sensors)
{
- auto service = getService(sensor);
-
- auto method = _bus.new_method_call(service.c_str(),
- sensor.c_str(),
+ auto method = _bus.new_method_call(sensor.second.c_str(),
+ sensor.first.c_str(),
PROPERTY_INTERFACE,
"Set");
method.append(_interface, property, value);
@@ -93,7 +85,8 @@ void Fan::setSpeed(uint64_t speed)
if (response.is_method_error())
{
log<level::ERR>(
- "Failed call to set fan speed ", entry("SENSOR=%s", sensor));
+ "Failed call to set fan speed ",
+ entry("SENSOR=%s", sensor.first));
elog<InternalFailure>();
}
}
OpenPOWER on IntegriCloud