diff options
-rw-r--r-- | scripts/writesensor.mako.cpp | 2 | ||||
-rw-r--r-- | sensordatahandler.cpp | 20 | ||||
-rw-r--r-- | sensorhandler.cpp | 18 |
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, |