summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--scripts/writesensor.mako.cpp2
-rw-r--r--sensordatahandler.cpp20
-rw-r--r--sensorhandler.cpp18
3 files changed, 27 insertions, 13 deletions
diff --git a/scripts/writesensor.mako.cpp b/scripts/writesensor.mako.cpp
index 41f9d60..4355801 100644
--- a/scripts/writesensor.mako.cpp
+++ b/scripts/writesensor.mako.cpp
@@ -5,7 +5,7 @@
<%
from collections import defaultdict
readingTypes = { 'reading': 'cmdData.reading',
- 'assertion': '0',
+ 'assertion': '((cmdData.assertOffset8_14 << 8)|cmdData.assertOffset0_7)',
'eventdata1': 'cmdData.eventData1',
'eventdata2': 'cmdData.eventData2',
'eventdata3': 'cmdData.eventData3'}
diff --git a/sensordatahandler.cpp b/sensordatahandler.cpp
index 6c7b9ac..7c4cd3c 100644
--- a/sensordatahandler.cpp
+++ b/sensordatahandler.cpp
@@ -40,9 +40,9 @@ ServicePath getServiceAndPath(sdbusplus::bus::bus& bus,
auto mapperResponseMsg = bus.call(mapperCall);
if (mapperResponseMsg.is_method_error())
{
- std::string err = "Error in mapper GetSubTree "
- "Interface: " + interface;
- log<level::ERR>(err.c_str());
+ log<level::ERR>("Mapper GetSubTree failed",
+ entry("PATH=%s", path),
+ entry("INTERFACE=%s", interface));
elog<InternalFailure>();
}
@@ -50,10 +50,9 @@ ServicePath getServiceAndPath(sdbusplus::bus::bus& bus,
mapperResponseMsg.read(mapperResponse);
if (mapperResponse.empty())
{
- std::string err = "Invalid response from mapper "
- "Command: GetSubTree "
- "Interface:" + interface;
- log<level::ERR>(err.c_str());
+ log<level::ERR>("Invalid mapper response",
+ entry("PATH=%s", path),
+ entry("INTERFACE=%s", interface));
elog<InternalFailure>();
}
@@ -66,10 +65,9 @@ ServicePath getServiceAndPath(sdbusplus::bus::bus& bus,
const auto& iter = mapperResponse.find(path);
if (iter == mapperResponse.end())
{
- std::string err = "Error in finding sensor dbus"
- "Command: GetSubTree "
- "Interface:" + interface;
- log<level::ERR>(err.c_str());
+ log<level::ERR>("Coudn't find d-bus path",
+ entry("PATH=%s", path),
+ entry("INTERFACE=%s", interface));
elog<InternalFailure>();
}
return std::make_pair(iter->first, iter->second.begin()->first);
diff --git a/sensorhandler.cpp b/sensorhandler.cpp
index a4cfe34..eac4215 100644
--- a/sensorhandler.cpp
+++ b/sensorhandler.cpp
@@ -7,15 +7,20 @@
#include <systemd/sd-bus.h>
#include "host-ipmid/ipmid-api.h"
#include <phosphor-logging/log.hpp>
+#include <phosphor-logging/elog-errors.hpp>
#include "ipmid.hpp"
#include "sensorhandler.h"
#include "types.hpp"
#include "utils.hpp"
+#include "xyz/openbmc_project/Common/error.hpp"
+
extern int updateSensorRecordFromSSRAESC(const void *);
extern sd_bus *bus;
extern const ipmi::sensor::IdInfoMap sensors;
using namespace phosphor::logging;
+using InternalFailure =
+ sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
void register_netfn_sen_functions() __attribute__((constructor));
@@ -418,7 +423,18 @@ ipmi_ret_t setSensorReading(void *request)
return IPMI_CC_SENSOR_INVALID;
}
- return iter->second.updateFunc(cmdData, iter->second);
+ try
+ {
+ return iter->second.updateFunc(cmdData, iter->second);
+ }
+ catch (InternalFailure& e)
+ {
+ log<level::ERR>("Set sensor failed",
+ entry("SENSOR_NUM=%d", cmdData.number));
+ commit<InternalFailure>();
+ }
+
+ return IPMI_CC_UNSPECIFIED_ERROR;
}
ipmi_ret_t ipmi_sen_set_sensor(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
OpenPOWER on IntegriCloud