nvidia-gpu: fix crash due to optional EM config
Sensor poll rate EM config is optional. Handle the case where the same
is missing by assigning a default poll rate.
See https://gerrit.openbmc.org/c/openbmc/entity-manager/+/80579/.
Change-Id: I1ceac45ba8adae33affe0cdd19513484179b1e4c
Signed-off-by: Deepak Kodihalli <deepak.kodihalli.83@gmail.com>
diff --git a/src/nvidia-gpu/NvidiaDeviceDiscovery.cpp b/src/nvidia-gpu/NvidiaDeviceDiscovery.cpp
index a9ca525..dd682cf 100644
--- a/src/nvidia-gpu/NvidiaDeviceDiscovery.cpp
+++ b/src/nvidia-gpu/NvidiaDeviceDiscovery.cpp
@@ -28,11 +28,14 @@
#include <cstdint>
#include <memory>
#include <span>
+#include <stdexcept>
#include <string>
#include <utility>
#include <variant>
#include <vector>
+static constexpr auto sensorPollRateMs = 1000;
+
void processQueryDeviceIdResponse(
boost::asio::io_context& io, sdbusplus::asio::object_server& objectServer,
boost::container::flat_map<std::string, std::shared_ptr<GpuDevice>>&
@@ -318,7 +321,15 @@
configs.name = loadVariant<std::string>(cfg, "Name");
- configs.pollRate = loadVariant<uint64_t>(cfg, "PollRate");
+ try
+ {
+ configs.pollRate = loadVariant<uint64_t>(cfg, "PollRate");
+ }
+ catch (const std::invalid_argument&)
+ {
+ // PollRate is an optional config
+ configs.pollRate = sensorPollRateMs;
+ }
discoverDevices(io, objectServer, gpuDevices, smaDevices,
dbusConnection, mctpRequester, configs, path);