diff options
-rw-r--r-- | meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0001-sensor-Implement-sensor-ASYNC_READ_TIMEOUT.patch (renamed from meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0002-lev-add-sensors-slow-readings.patch) | 70 | ||||
-rw-r--r-- | meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0002-Add-power-on-monitor-mechanism.patch (renamed from meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0001-lev-add-poweron-monitor-feature.patch) | 144 | ||||
-rw-r--r-- | meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon_%.bbappend | 6 |
3 files changed, 135 insertions, 85 deletions
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0002-lev-add-sensors-slow-readings.patch b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0001-sensor-Implement-sensor-ASYNC_READ_TIMEOUT.patch index 0ab2f20483..88f55d055b 100644 --- a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0002-lev-add-sensors-slow-readings.patch +++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0001-sensor-Implement-sensor-ASYNC_READ_TIMEOUT.patch @@ -1,18 +1,56 @@ -From 8eafa1b0513dd2f5898182487b4524a485bf1e21 Mon Sep 17 00:00:00 2001 -From: Eddielu <Eddie.Lu@quantatw.com> -Date: Mon, 27 Jul 2020 20:54:28 +0800 -Subject: [PATCH] Update add sensors slow readings patch. +From c1b3d32430df12ab01f9cacf132aedff8324d55b Mon Sep 17 00:00:00 2001 +From: Brandon Kim <brandonkim@google.com> +Date: Fri, 9 Aug 2019 15:38:53 -0700 +Subject: [PATCH] sensor: Implement sensor "ASYNC_READ_TIMEOUT" +This change will prevent sensors from blocking all other sensor reads +and D-Bus if they do not report failures quickly enough. + +If "ASYNC_READ_TIMEOUT" environment variable is defined in the +sensor's config file for a key_type, the sensor read will be +asynchronous with timeout set in milliseconds. + +For example for "sensor1": +ASYNC_READ_TIMEOUT_sensor1="1000" // Timeout will be set to 1 sec + +If the read times out, the sensor read will be skipped and the +sensor's functional property will be set to 'false'. Timed out futures +will be placed in a map to prevent their destructor from running and +blocking until the read completes (limiation of std::async). + +Change-Id: I3d9ed4d5c9cc87d3196fc281451834f3001d0b48 +Signed-off-by: Brandon Kim <brandonkim@google.com> --- - mainloop.cpp | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---- + Makefile.am | 2 ++ + mainloop.cpp | 73 +++++++++++++++++++++++++++++++++++++++++++++++--- mainloop.hpp | 3 +++ meson.build | 1 + - sensor.cpp | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++------- - sensor.hpp | 20 ++++++++++++++-- - 5 files changed, 158 insertions(+), 14 deletions(-) + sensor.cpp | 75 ++++++++++++++++++++++++++++++++++++++++++++++------ + sensor.hpp | 20 ++++++++++++-- + 6 files changed, 160 insertions(+), 14 deletions(-) +diff --git a/Makefile.am b/Makefile.am +index 706a6cc..c620fa4 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -46,6 +46,7 @@ libhwmon_la_LIBADD = \ + $(SDEVENTPLUS_LIBS) \ + $(PHOSPHOR_DBUS_INTERFACES_LIBS) \ + $(PHOSPHOR_LOGGING_LIBS) \ ++ $(PTHREAD_LIBS) \ + $(GPIOPLUS_LIBS) \ + $(STDPLUS_LIBS) \ + $(CODE_COVERAGE_LIBS) \ +@@ -55,6 +56,7 @@ libhwmon_la_CXXFLAGS = \ + $(SDEVENTPLUS_CFLAGS) \ + $(PHOSPHOR_DBUS_INTERFACES_CFLAGS) \ + $(PHOSPHOR_LOGGING_CFLAGS) \ ++ $(PTHREAD_CFLAGS) \ + $(STDPLUS_CFLAGS) \ + $(CODE_COVERAGE_CXXFLAGS) + diff --git a/mainloop.cpp b/mainloop.cpp -index 4789a80..98d0658 100644 +index ecceee5..29dc26a 100644 --- a/mainloop.cpp +++ b/mainloop.cpp @@ -34,6 +34,7 @@ @@ -23,7 +61,7 @@ index 4789a80..98d0658 100644 #include <iostream> #include <memory> #include <phosphor-logging/elog-errors.hpp> -@@ -299,7 +300,7 @@ std::optional<ObjectStateData> +@@ -242,7 +243,7 @@ std::optional<ObjectStateData> { // Add status interface based on _fault file being present sensorObj->addStatus(info); @@ -32,7 +70,7 @@ index 4789a80..98d0658 100644 } catch (const std::system_error& e) { -@@ -542,10 +543,74 @@ void MainLoop::read() +@@ -478,10 +479,74 @@ void MainLoop::read() // RAII object for GPIO unlock / lock auto locker = sensor::gpioUnlock(sensor->getGpio()); @@ -144,7 +182,7 @@ index 66e6801..d6a92f8 100644 link_with: [ libaverage, diff --git a/sensor.cpp b/sensor.cpp -index b1cb470..72b45f8 100644 +index 09aeca6..ac2f896 100644 --- a/sensor.cpp +++ b/sensor.cpp @@ -15,6 +15,7 @@ @@ -155,7 +193,7 @@ index b1cb470..72b45f8 100644 #include <phosphor-logging/elog-errors.hpp> #include <thread> #include <xyz/openbmc_project/Common/error.hpp> -@@ -125,8 +126,9 @@ SensorValueType Sensor::adjustValue(SensorValueType value) +@@ -116,8 +117,9 @@ SensorValueType Sensor::adjustValue(SensorValueType value) return value; } @@ -167,7 +205,7 @@ index b1cb470..72b45f8 100644 { static constexpr bool deferSignals = true; -@@ -153,12 +155,69 @@ std::shared_ptr<ValueObject> Sensor::addValue(const RetryIO& retryIO, +@@ -144,12 +146,69 @@ std::shared_ptr<ValueObject> Sensor::addValue(const RetryIO& retryIO, // RAII object for GPIO unlock / lock auto locker = gpioUnlock(getGpio()); @@ -244,7 +282,7 @@ index b1cb470..72b45f8 100644 #ifdef UPDATE_FUNCTIONAL_ON_FAIL catch (const std::system_error& e) diff --git a/sensor.hpp b/sensor.hpp -index 369a252..41c0fe7 100644 +index 4b2d281..64d6e48 100644 --- a/sensor.hpp +++ b/sensor.hpp @@ -4,6 +4,8 @@ @@ -291,5 +329,5 @@ index 369a252..41c0fe7 100644 /** * @brief Add status interface and functional property for sensor -- -2.7.4 +2.21.0 diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0001-lev-add-poweron-monitor-feature.patch b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0002-Add-power-on-monitor-mechanism.patch index c279e0b816..a3718ea2a0 100644 --- a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0001-lev-add-poweron-monitor-feature.patch +++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0002-Add-power-on-monitor-mechanism.patch @@ -1,44 +1,33 @@ -From 2cea5d289b278db4468b16bf6b64102655811fd0 Mon Sep 17 00:00:00 2001 -From: Eddielu <Eddie.Lu@quantatw.com> -Date: Mon, 27 Jul 2020 20:30:22 +0800 -Subject: [PATCH] Update lev-add-poweron-monitor-feature patch. +From 5cea18ba476c0cb6ea622be50a09ead00cd47b14 Mon Sep 17 00:00:00 2001 +From: Ivan Li <rli11@lenovo.com> +Date: Wed, 25 Dec 2019 17:05:00 +0800 +Subject: [PATCH] Add power on monitor mechanism +Summary: +1. Add "PWRONMON" attribute in sensor configuration file to determine whether it's power-on monitor sensor or not. (i.e. PWRONMON_temp1 = "ON") +2. Watching "CurrentHostState" property and then use it to turn on/off threshold alert for power-on monitor sensors. + +Test Plan: +Check if there is any abnormal threshold events occurred in power off state or during power transition + +Signed-off-by: Ivan Li <rli11@lenovo.com> +Change-Id: I76d3a664153141d94636e0011f3a48e4f6dee922 --- - Makefile.am | 2 ++ - mainloop.cpp | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - sensor.cpp | 11 ++++++- - sensor.hpp | 13 ++++++++ - thresholds.hpp | 2 -- - 5 files changed, 127 insertions(+), 3 deletions(-) + mainloop.cpp | 102 +++++++++++++++++++++++++++++++++++++++++++++++++ + sensor.cpp | 11 +++++- + sensor.hpp | 13 +++++++ + thresholds.hpp | 24 ------------ + 4 files changed, 125 insertions(+), 25 deletions(-) -diff --git a/Makefile.am b/Makefile.am -index 706a6cc..c620fa4 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -46,6 +46,7 @@ libhwmon_la_LIBADD = \ - $(SDEVENTPLUS_LIBS) \ - $(PHOSPHOR_DBUS_INTERFACES_LIBS) \ - $(PHOSPHOR_LOGGING_LIBS) \ -+ $(PTHREAD_LIBS) \ - $(GPIOPLUS_LIBS) \ - $(STDPLUS_LIBS) \ - $(CODE_COVERAGE_LIBS) \ -@@ -55,6 +56,7 @@ libhwmon_la_CXXFLAGS = \ - $(SDEVENTPLUS_CFLAGS) \ - $(PHOSPHOR_DBUS_INTERFACES_CFLAGS) \ - $(PHOSPHOR_LOGGING_CFLAGS) \ -+ $(PTHREAD_CFLAGS) \ - $(STDPLUS_CFLAGS) \ - $(CODE_COVERAGE_CXXFLAGS) - diff --git a/mainloop.cpp b/mainloop.cpp -index 3e7e0bf..4789a80 100644 +index 29dc26a..5e27a30 100644 --- a/mainloop.cpp +++ b/mainloop.cpp -@@ -41,6 +41,12 @@ +@@ -42,6 +42,13 @@ #include <string> #include <unordered_set> #include <xyz/openbmc_project/Sensor/Device/error.hpp> ++#include <boost/asio/io_service.hpp> +#include <boost/container/flat_map.hpp> +#include <boost/algorithm/string/predicate.hpp> +#include <sdbusplus/asio/connection.hpp> @@ -48,9 +37,9 @@ index 3e7e0bf..4789a80 100644 using namespace phosphor::logging; -@@ -76,6 +82,12 @@ decltype( - Thresholds<CriticalObject>::alarmHi) Thresholds<CriticalObject>::alarmHi = - &CriticalObject::criticalAlarmHigh; +@@ -110,6 +117,12 @@ decltype(Thresholds<CriticalObject>::deassertHighSignal) + Thresholds<CriticalObject>::deassertHighSignal = + &CriticalObject::criticalHighAlarmDeasserted; +static std::unique_ptr<phosphor::Timer> cacheTimer = nullptr; +static std::unique_ptr<sdbusplus::bus::match::match> powerMatch = nullptr; @@ -61,7 +50,7 @@ index 3e7e0bf..4789a80 100644 void updateSensorInterfaces(InterfaceMap& ifaces, SensorValueType value) { for (auto& iface : ifaces) -@@ -103,6 +115,84 @@ void updateSensorInterfaces(InterfaceMap& ifaces, SensorValueType value) +@@ -137,6 +150,83 @@ void updateSensorInterfaces(InterfaceMap& ifaces, SensorValueType value) } } @@ -104,23 +93,23 @@ index 3e7e0bf..4789a80 100644 + std::string objectName; + boost::container::flat_map<std::string, std::variant<std::string>> + values; -+ message.read(objectName, values); -+ auto findState = values.find("CurrentHostState"); -+ if (findState != values.end()) -+ { -+ bool on = boost::ends_with( ++ message.read(objectName, values); ++ auto findState = values.find("CurrentHostState"); ++ if (findState != values.end()) ++ { ++ bool on = boost::ends_with( + std::get<std::string>(findState->second), "Running"); -+ if (!on) ++ if (!on) + { -+ cacheTimer->stop(); ++ cacheTimer->stop(); + powerStatusOn = false; + return; + } -+ cacheTimer->start(std::chrono::duration_cast<std::chrono::microseconds>( ++ cacheTimer->start(std::chrono::duration_cast<std::chrono::microseconds>( + std::chrono::seconds(10))); -+ } -+ else { -+ powerStatusOn = false; ++ } ++ else { ++ powerStatusOn = false; + } + }); + @@ -135,18 +124,17 @@ index 3e7e0bf..4789a80 100644 + boost::ends_with(std::get<std::string>(state), "Running"); + }, + "xyz.openbmc_project.State.Host", -+ "/xyz/openbmc_project/state/host0", -+ "org.freedesktop.DBus.Properties", "Get", ++ "/xyz/openbmc_project/state/host0", ++ "org.freedesktop.DBus.Properties", "Get", + "xyz.openbmc_project.State.Host", "CurrentHostState"); + + createTimer(); +} + -+ std::string MainLoop::getID(SensorSet::container_t::const_reference sensor) { std::string id; -@@ -384,6 +474,7 @@ void MainLoop::init() +@@ -418,6 +508,7 @@ void MainLoop::init() _interval = std::strtoull(interval.c_str(), NULL, 10); } } @@ -154,7 +142,7 @@ index 3e7e0bf..4789a80 100644 } void MainLoop::read() -@@ -428,6 +519,12 @@ void MainLoop::read() +@@ -462,6 +553,12 @@ void MainLoop::read() try { @@ -167,23 +155,23 @@ index 3e7e0bf..4789a80 100644 if (sensor->hasFaultFile()) { auto fault = _ioAccess->read(sensorSysfsType, sensorSysfsNum, -@@ -490,6 +587,11 @@ void MainLoop::read() +@@ -588,6 +685,11 @@ void MainLoop::read() } } + if(sensor->pwrOnMonitor() && !isPowerOn()) + { -+ statusIface->functional(false); -+ continue; ++ statusIface->functional(false); ++ continue; + } updateSensorInterfaces(obj, value); } catch (const std::system_error& e) diff --git a/sensor.cpp b/sensor.cpp -index 09aeca6..b1cb470 100644 +index ac2f896..72b45f8 100644 --- a/sensor.cpp +++ b/sensor.cpp -@@ -31,7 +31,7 @@ Sensor::Sensor(const SensorSet::key_type& sensor, +@@ -32,7 +32,7 @@ Sensor::Sensor(const SensorSet::key_type& sensor, const hwmonio::HwmonIOInterface* ioAccess, const std::string& devPath) : _sensor(sensor), @@ -192,7 +180,7 @@ index 09aeca6..b1cb470 100644 { auto chip = env::getEnv("GPIOCHIP", sensor); auto access = env::getEnv("GPIO", sensor); -@@ -60,6 +60,15 @@ Sensor::Sensor(const SensorSet::key_type& sensor, +@@ -61,6 +61,15 @@ Sensor::Sensor(const SensorSet::key_type& sensor, auto senRmRCs = env::getEnv("REMOVERCS", sensor); // Add sensor removal return codes defined per sensor addRemoveRCs(senRmRCs); @@ -209,10 +197,10 @@ index 09aeca6..b1cb470 100644 void Sensor::addRemoveRCs(const std::string& rcList) diff --git a/sensor.hpp b/sensor.hpp -index 4b2d281..369a252 100644 +index 64d6e48..41c0fe7 100644 --- a/sensor.hpp +++ b/sensor.hpp -@@ -135,6 +135,16 @@ class Sensor +@@ -151,6 +151,16 @@ class Sensor return _hasFaultFile; } @@ -229,7 +217,7 @@ index 4b2d281..369a252 100644 private: /** @brief Sensor object's identifiers */ SensorSet::key_type _sensor; -@@ -156,6 +166,9 @@ class Sensor +@@ -172,6 +182,9 @@ class Sensor /** @brief Tracks whether the sensor has a fault file or not. */ bool _hasFaultFile; @@ -240,18 +228,42 @@ index 4b2d281..369a252 100644 /** diff --git a/thresholds.hpp b/thresholds.hpp -index 4d2fcff..972a469 100644 +index 8d557fc..0ffe0ce 100644 --- a/thresholds.hpp +++ b/thresholds.hpp -@@ -101,8 +101,6 @@ auto addThreshold(const std::string& sensorType, const std::string& sensorID, +@@ -137,32 +137,8 @@ auto addThreshold(const std::string& sensorType, const std::string& sensorID, auto hi = stod(tHi) * std::pow(10, scale); (*iface.*Thresholds<T>::setLo)(lo); (*iface.*Thresholds<T>::setHi)(hi); -- (*iface.*Thresholds<T>::alarmLo)(value <= lo); -- (*iface.*Thresholds<T>::alarmHi)(value >= hi); +- auto alarmLowState = (*iface.*Thresholds<T>::getAlarmLow)(); +- auto alarmHighState = (*iface.*Thresholds<T>::getAlarmHigh)(); + (*iface.*Thresholds<T>::alarmLo)(value <= lo); + (*iface.*Thresholds<T>::alarmHi)(value >= hi); +- if (alarmLowState != (value <= lo)) +- { +- if (value <= lo) +- { +- (*iface.*Thresholds<T>::assertLowSignal)(value); +- } +- else +- { +- (*iface.*Thresholds<T>::deassertLowSignal)(value); +- } +- } +- if (alarmHighState != (value >= hi)) +- { +- if (value >= hi) +- { +- (*iface.*Thresholds<T>::assertHighSignal)(value); +- } +- else +- { +- (*iface.*Thresholds<T>::deassertHighSignal)(value); +- } +- } auto type = Thresholds<T>::type; obj[type] = iface; } -- -2.7.4 +2.21.0 diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon_%.bbappend index 5f0517a302..e6b8e2d805 100644 --- a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon_%.bbappend +++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon_%.bbappend @@ -1,7 +1,7 @@ FILESEXTRAPATHS_prepend_gbs := "${THISDIR}/${PN}:" -SRC_URI_append_gbs = " file://0001-lev-add-poweron-monitor-feature.patch \ - file://0002-lev-add-sensors-slow-readings.patch \ +SRC_URI_append_gbs = " file://0001-sensor-Implement-sensor-ASYNC_READ_TIMEOUT.patch \ + file://0002-Add-power-on-monitor-mechanism.patch \ " GBS_NAMES = " \ @@ -32,4 +32,4 @@ FENVS = "obmc/hwmon/ahb/apb/{0}" SYSTEMD_ENVIRONMENT_FILE_${PN}_append_gbs = " ${@compose_list(d, 'FENVS', 'FITEMS')}" -EXTRA_OEMESON_append_gbs = " -Dupdate-functional-on-fail=true" +EXTRA_OEMESON_append_gbs = " -Dupdate-functional-on-fail=true -Dnegative-errno-on-fail=false" |