Add support for resource dump delete.
Add support for deleting resource dumps in host memory.
Change requestDelete to accept dump type.
Update system dump delete to pass dump type.
Signed-off-by: Dhruvaraj Subhashchandran <dhruvaraj@in.ibm.com>
Change-Id: I8dcf85a2b38da15ff8451003c11232e340c4ca89
diff --git a/dump-extensions/openpower-dumps/resource_dump_entry.cpp b/dump-extensions/openpower-dumps/resource_dump_entry.cpp
index efbb758..e8e73f3 100644
--- a/dump-extensions/openpower-dumps/resource_dump_entry.cpp
+++ b/dump-extensions/openpower-dumps/resource_dump_entry.cpp
@@ -12,6 +12,10 @@
{
namespace resource
{
+// TODO #ibm-openbmc/issues/2859
+// Revisit host transport impelementation
+// This value is used to identify the dump in the transport layer to host,
+constexpr auto TRANSPORT_DUMP_TYPE_IDENTIFIER = 7;
using namespace phosphor::logging;
void Entry::initiateOffload(std::string uri)
@@ -30,6 +34,21 @@
phosphor::dump::host::requestOffload(sourceDumpId());
}
+void Entry::delete_()
+{
+ auto srcDumpID = sourceDumpId();
+
+ // Remove Dump entry D-bus object
+ phosphor::dump::Entry::delete_();
+
+ // Remove resource dump when host is up by using source dump id
+ // which is present in resource dump entry dbus object as a property.
+ if (phosphor::dump::isHostRunning())
+ {
+ phosphor::dump::host::requestDelete(srcDumpID,
+ TRANSPORT_DUMP_TYPE_IDENTIFIER);
+ }
+}
} // namespace resource
} // namespace dump
} // namespace openpower
diff --git a/dump-extensions/openpower-dumps/resource_dump_entry.hpp b/dump-extensions/openpower-dumps/resource_dump_entry.hpp
index cc5172d..3e099a9 100644
--- a/dump-extensions/openpower-dumps/resource_dump_entry.hpp
+++ b/dump-extensions/openpower-dumps/resource_dump_entry.hpp
@@ -88,6 +88,11 @@
status(OperationStatus::Completed);
completedTime(timeStamp);
}
+
+ /**
+ * @brief Delete resource dump in host memory and the entry dbus object
+ */
+ void delete_() override;
};
} // namespace resource
diff --git a/dump-extensions/openpower-dumps/system_dump_entry.cpp b/dump-extensions/openpower-dumps/system_dump_entry.cpp
index f950c5d..af7714d 100644
--- a/dump-extensions/openpower-dumps/system_dump_entry.cpp
+++ b/dump-extensions/openpower-dumps/system_dump_entry.cpp
@@ -12,6 +12,10 @@
{
namespace system
{
+// TODO #ibm-openbmc/issues/2859
+// Revisit host transport impelementation
+// This value is used to identify the dump in the transport layer to host,
+constexpr auto TRANSPORT_DUMP_TYPE_IDENTIFIER = 3;
using namespace phosphor::logging;
void Entry::initiateOffload(std::string uri)
@@ -42,7 +46,8 @@
// which is present in system dump entry dbus object as a property.
if (phosphor::dump::isHostRunning())
{
- phosphor::dump::host::requestDelete(srcDumpID);
+ phosphor::dump::host::requestDelete(srcDumpID,
+ TRANSPORT_DUMP_TYPE_IDENTIFIER);
}
}
} // namespace system
diff --git a/host-transport-extensions/default/default.cpp b/host-transport-extensions/default/default.cpp
index bc49afc..7b613df 100644
--- a/host-transport-extensions/default/default.cpp
+++ b/host-transport-extensions/default/default.cpp
@@ -12,7 +12,7 @@
throw std::runtime_error("Hostdump offload method not specified");
}
-void requestDelete(uint32_t)
+void requestDelete(uint32_t, uint32_t)
{
throw std::runtime_error("Hostdump delete method not specified");
}
diff --git a/host-transport-extensions/pldm/default/pldm_interface.cpp b/host-transport-extensions/pldm/default/pldm_interface.cpp
index f432b03..09b96db 100644
--- a/host-transport-extensions/pldm/default/pldm_interface.cpp
+++ b/host-transport-extensions/pldm/default/pldm_interface.cpp
@@ -21,7 +21,7 @@
throw std::runtime_error("PLDM: Hostdump offload method not specified");
}
-void requestDelete(uint32_t)
+void requestDelete(uint32_t, uint32_t)
{
throw std::runtime_error("PLDM: Hostdump delete method not specified");
}
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 a26a5d3..981076c 100644
--- a/host-transport-extensions/pldm/oem/ibm/pldm_oem_cmds.cpp
+++ b/host-transport-extensions/pldm/oem/ibm/pldm_oem_cmds.cpp
@@ -46,9 +46,9 @@
pldm::requestOffload(id);
}
-void requestDelete(uint32_t id)
+void requestDelete(uint32_t id, uint32_t dumpType)
{
- pldm::requestDelete(id);
+ pldm::requestDelete(id, dumpType);
}
} // namespace host
@@ -119,7 +119,7 @@
if (rc != PLDM_SUCCESS)
{
log<level::ERR>("Message encode failure. ", entry("RC=%d", rc));
- elog<NotAllowed>(Reason("Host system dump offload via pldm is not "
+ elog<NotAllowed>(Reason("Host dump offload via pldm is not "
"allowed due to encode failed"));
}
@@ -135,7 +135,7 @@
auto e = errno;
log<level::ERR>("pldm_send failed", entry("RC=%d", rc),
entry("ERRNO=%d", e));
- elog<NotAllowed>(Reason("Host system dump offload via pldm is not "
+ elog<NotAllowed>(Reason("Host dump offload via pldm is not "
"allowed due to fileack send failed"));
}
pldm_msg* response = reinterpret_cast<pldm_msg*>(responseMsg);
@@ -144,12 +144,21 @@
entry("RC=%d", static_cast<uint16_t>(response->payload[0])));
}
-/*
- * Using FileAck pldm command with file type as PLDM_FILE_TYPE_DUMP
- * to delete host system dump
- */
-void requestDelete(uint32_t dumpId)
+void requestDelete(uint32_t dumpId, uint32_t dumpType)
{
+ pldm_fileio_file_type pldmDumpType;
+ switch (dumpType)
+ {
+ case PLDM_FILE_TYPE_DUMP:
+ pldmDumpType = PLDM_FILE_TYPE_DUMP;
+ break;
+ case PLDM_FILE_TYPE_RESOURCE_DUMP_PARMS:
+ pldmDumpType = PLDM_FILE_TYPE_RESOURCE_DUMP_PARMS;
+ break;
+ default:
+ throw std::runtime_error("Unknown pldm dump file-io type to delete "
+ "host dump");
+ }
const size_t pldmMsgHdrSize = sizeof(pldm_msg_hdr);
std::array<uint8_t, pldmMsgHdrSize + PLDM_FILE_ACK_REQ_BYTES> fileAckReqMsg;
@@ -157,21 +166,20 @@
auto pldmInstanceId = getPLDMInstanceID(mctpEndPointId);
- // - PLDM_FILE_TYPE_DUMP - To indicate FileAck for Host system dump
// - PLDM_SUCCESS - To indicate dump was readed (offloaded) or user decided,
- // no longer host system dump is not required so, initiate deletion from
+ // no longer host dump is not required so, initiate deletion from
// host memory
- int retCode = encode_file_ack_req(
- pldmInstanceId, PLDM_FILE_TYPE_DUMP, dumpId, PLDM_SUCCESS,
- reinterpret_cast<pldm_msg*>(fileAckReqMsg.data()));
+ int retCode =
+ encode_file_ack_req(pldmInstanceId, pldmDumpType, dumpId, PLDM_SUCCESS,
+ reinterpret_cast<pldm_msg*>(fileAckReqMsg.data()));
if (retCode != PLDM_SUCCESS)
{
- log<level::ERR>(
- "Failed to encode pldm FileAck to delete host system dump",
- entry("SRC_DUMP_ID=%d", dumpId),
- entry("PLDM_RETURN_CODE=%d", retCode));
- elog<NotAllowed>(Reason("Host system dump deletion via pldm is not "
+ log<level::ERR>("Failed to encode pldm FileAck to delete host dump",
+ entry("SRC_DUMP_ID=%d", dumpId),
+ entry("PLDM_FILE_IO_TYPE=%d", pldmDumpType),
+ entry("PLDM_RETURN_CODE=%d", retCode));
+ elog<NotAllowed>(Reason("Host dump deletion via pldm is not "
"allowed due to encode fileack failed"));
}
@@ -189,13 +197,13 @@
if (retCode != PLDM_REQUESTER_SUCCESS)
{
auto errorNumber = errno;
- log<level::ERR>(
- "Failed to send pldm FileAck to delete host system dump",
- entry("SRC_DUMP_ID=%d", dumpId),
- entry("PLDM_RETURN_CODE=%d", retCode),
- entry("ERRNO=%d", errorNumber),
- entry("ERRMSG=%s", strerror(errorNumber)));
- elog<NotAllowed>(Reason("Host system dump deletion via pldm is not "
+ log<level::ERR>("Failed to send pldm FileAck to delete host dump",
+ entry("SRC_DUMP_ID=%d", dumpId),
+ entry("PLDM_FILE_IO_TYPE=%d", pldmDumpType),
+ entry("PLDM_RETURN_CODE=%d", retCode),
+ entry("ERRNO=%d", errorNumber),
+ entry("ERRMSG=%s", strerror(errorNumber)));
+ elog<NotAllowed>(Reason("Host dump deletion via pldm is not "
"allowed due to fileack send failed"));
}
@@ -207,16 +215,16 @@
if (retCode || completionCode)
{
- log<level::ERR>("Failed to delete host system dump",
+ log<level::ERR>("Failed to delete host dump",
entry("SRC_DUMP_ID=%d", dumpId),
+ entry("PLDM_FILE_IO_TYPE=%d", pldmDumpType),
entry("PLDM_RETURN_CODE=%d", retCode),
entry("PLDM_COMPLETION_CODE=%d", completionCode));
- elog<NotAllowed>(Reason("Host system dump deletion via pldm is "
+ elog<NotAllowed>(Reason("Host dump deletion via pldm is "
"failed"));
}
- log<level::INFO>("Deleted host system dump",
- entry("SRC_DUMP_ID=%d", dumpId));
+ log<level::INFO>("Deleted host dump", entry("SRC_DUMP_ID=%d", dumpId));
}
} // namespace pldm
} // namespace dump
diff --git a/host-transport-extensions/pldm/oem/ibm/pldm_oem_cmds.hpp b/host-transport-extensions/pldm/oem/ibm/pldm_oem_cmds.hpp
index 1ab099a..b4b0d9d 100644
--- a/host-transport-extensions/pldm/oem/ibm/pldm_oem_cmds.hpp
+++ b/host-transport-extensions/pldm/oem/ibm/pldm_oem_cmds.hpp
@@ -20,10 +20,11 @@
* @brief Request to delete dump
*
* @param[in] id - The Dump Source ID.
+ * @param[in] dumpType - Type of the dump.
* @return NULL
*
*/
-void requestDelete(uint32_t id);
+void requestDelete(uint32_t id, uint32_t dumpType);
} // namespace host
namespace pldm
@@ -56,10 +57,11 @@
* @brief Request to delete dump
*
* @param[in] id - The Dump Source ID.
+ * @param[in] dumpType - Type of the dump.
* @return NULL
*
*/
-void requestDelete(uint32_t id);
+void requestDelete(uint32_t id, uint32_t dumpType);
} // namespace pldm
} // namespace dump
} // namespace phosphor
diff --git a/host_transport_exts.hpp b/host_transport_exts.hpp
index b31585e..8e218ee 100644
--- a/host_transport_exts.hpp
+++ b/host_transport_exts.hpp
@@ -17,10 +17,11 @@
* @brief Request to delete dump
*
* @param[in] id - The Dump Source ID.
+ * @param[in] type - transport defined type of the dump.
* @return NULL
*
*/
-void requestDelete(uint32_t id);
+void requestDelete(uint32_t id, uint32_t type);
} // namespace host
} // namespace dump