summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDhruvaraj Subhashchandran <dhruvaraj@in.ibm.com>2017-08-09 09:10:47 -0500
committerPatrick Williams <patrick@stwcx.xyz>2017-08-10 17:31:53 +0000
commit18e9999232b76cc311bd307fd28adce0fb17db9a (patch)
treecae5703d184253d21bd2f40b448cfa0e147d6482
parent63a0051b4f93f1422998f0748c9ac6c0111d25c3 (diff)
downloadphosphor-host-ipmid-18e9999232b76cc311bd307fd28adce0fb17db9a.tar.gz
phosphor-host-ipmid-18e9999232b76cc311bd307fd28adce0fb17db9a.zip
Fix for reboot attempt and catch internal failures.
The assumption was reboot attempt left will be sent through reading data in ipmi sensor data, but it is being sent as assertion so adding support to read raw data from assertion bits. Added a catch for internal failures while calling update function for sensors. Change-Id: If45d003c1c22f60e7c8a723c1ff9d077c53cad37 Signed-off-by: Dhruvaraj Subhashchandran <dhruvaraj@in.ibm.com>
-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