OpenPOWER: Use non blocking call for host dump offload request
Currently dump manager is using pldm_send_recv which is
a blocking call and if the host is not responding
dump manager will hang to avoid this using pldm_send
which is a non-blocking call.
Tests:
Send message while host is down and dump manager is
not hung.
Signed-off-by: Dhruvaraj Subhashchandran <dhruvaraj@in.ibm.com>
Change-Id: Ie90e217325da4c8778c7527afcd453a8fdce02c8
diff --git a/dump-extensions/openpower-dumps/resource_dump_entry.cpp b/dump-extensions/openpower-dumps/resource_dump_entry.cpp
index ac745b5..692ec14 100644
--- a/dump-extensions/openpower-dumps/resource_dump_entry.cpp
+++ b/dump-extensions/openpower-dumps/resource_dump_entry.cpp
@@ -28,8 +28,8 @@
using Reason = xyz::openbmc_project::Common::NotAllowed::REASON;
log<level::INFO>(
fmt::format(
- "Resource dump offload request id({}) uri({}) source dumpid()", id,
- uri, sourceDumpId())
+ "Resource dump offload request id({}) uri({}) source dumpid({})",
+ id, uri, sourceDumpId())
.c_str());
if (!phosphor::dump::isHostRunning())
diff --git a/host-transport-extensions/pldm/oem/ibm/pldm_oem_cmds.cpp b/host-transport-extensions/pldm/oem/ibm/pldm_oem_cmds.cpp
index 21be03a..1c9d703 100644
--- a/host-transport-extensions/pldm/oem/ibm/pldm_oem_cmds.cpp
+++ b/host-transport-extensions/pldm/oem/ibm/pldm_oem_cmds.cpp
@@ -126,13 +126,13 @@
"allowed due to encode failed"));
}
- uint8_t* responseMsg = nullptr;
- size_t responseMsgSize{};
-
CustomFd fd(openPLDM());
- rc = pldm_send_recv(eid, fd(), requestMsg.data(), requestMsg.size(),
- &responseMsg, &responseMsgSize);
+ log<level::INFO>(
+ fmt::format("Sending request to offload dump id({}), eid({})", id, eid)
+ .c_str());
+
+ rc = pldm_send(eid, fd(), requestMsg.data(), requestMsg.size());
if (rc < 0)
{
auto e = errno;
@@ -141,10 +141,8 @@
elog<NotAllowed>(Reason("Host dump offload via pldm is not "
"allowed due to fileack send failed"));
}
- pldm_msg* response = reinterpret_cast<pldm_msg*>(responseMsg);
- log<level::INFO>(fmt::format("Done. PLDM message, RC({})",
- static_cast<uint16_t>(response->payload[0]))
- .c_str());
+ log<level::INFO>(
+ fmt::format("Done. PLDM message, id({} )RC({})", id, rc).c_str());
}
void requestDelete(uint32_t dumpId, uint32_t dumpType)