OpenPOWER: Add support for hardware dump
Hardware dump is a collection hardware state information,
including various registers, and it is used for debugging
system checkstop. checkstop is the descriptive term for
entire system termination by the hardware due to a detected error.
This commits adds
- Hardware dump entry implementation
- Hardware dump manager implementation
Tested:
- Create a hardware dump
busctl --verbose call org.open_power.Dump.Manager /org/openpower/dump xyz.openbmc_project.Dump.Create CreateDump a{sv} 3 "com.ibm.Dump.Create.CreateParameters.DumpType" s "com.ibm.Dump.Create.DumpType.Hardware" "com.ibm.Dump.Create.CreateParameters.ErrorLogId" t 0xDEADBEEF "com.ibm.Dump.Create.CreateParameters.FailingUnitId" t 1
MESSAGE "o" {
OBJECT_PATH "/xyz/openbmc_project/dump/hardware/entry/1";
};
/var/lib/phosphor-debug-collector/hardwaredump/1/hwdump_1_1627559369.tar.gz
- Delete a hardware dump
busctl call xyz.openbmc_project.Dump.Manager /xyz/openbmc_project/dump/hardware/entry/1 xyz.openbmc_project.Object.Delete Delete
- Offload hardware dump
- Restore hardware dumps after restart
Signed-off-by: Dhruvaraj Subhashchandran <dhruvaraj@in.ibm.com>
Change-Id: I7f6b83896b2c78d9eb4295212a62476b1fe1d6c0
diff --git a/dump-extensions/openpower-dumps/dump-extensions.cpp b/dump-extensions/openpower-dumps/dump-extensions.cpp
index 3b91842..c049fc9 100644
--- a/dump-extensions/openpower-dumps/dump-extensions.cpp
+++ b/dump-extensions/openpower-dumps/dump-extensions.cpp
@@ -50,6 +50,26 @@
HOSTBOOT_DUMP_PATH, "hbdump", HOSTBOOT_DUMP_TMP_FILE_DIR,
HOSTBOOT_DUMP_MAX_SIZE, HOSTBOOT_DUMP_MIN_SPACE_REQD,
HOSTBOOT_DUMP_TOTAL_SIZE));
+
+ try
+ {
+ std::filesystem::create_directories(HARDWARE_DUMP_PATH);
+ }
+ catch (std::exception& e)
+ {
+ log<level::ERR>(
+ fmt::format("Failed to create hardware dump directory({})",
+ HARDWARE_DUMP_PATH)
+ .c_str());
+ throw std::runtime_error("Failed to create hardware dump directory");
+ }
+
+ dumpList.push_back(std::make_unique<openpower::dump::hostdump::Manager<
+ sdbusplus::com::ibm::Dump::Entry::server::Hardware>>(
+ bus, event, HARDWARE_DUMP_OBJPATH, HARDWARE_DUMP_OBJ_ENTRY,
+ HARDWARE_DUMP_PATH, "hwdump", HARDWARE_DUMP_TMP_FILE_DIR,
+ HARDWARE_DUMP_MAX_SIZE, HARDWARE_DUMP_MIN_SPACE_REQD,
+ HARDWARE_DUMP_TOTAL_SIZE));
}
} // namespace dump
} // namespace phosphor
diff --git a/dump-extensions/openpower-dumps/meson.build b/dump-extensions/openpower-dumps/meson.build
index ac971a4..d7d99a3 100644
--- a/dump-extensions/openpower-dumps/meson.build
+++ b/dump-extensions/openpower-dumps/meson.build
@@ -19,8 +19,6 @@
opconf_data.set_quoted('RESOURCE_DUMP_OBJ_ENTRY', get_option('RESOURCE_DUMP_OBJ_ENTRY'),
description : 'The resource dump entry D-Bus object path'
)
-
-
opconf_data.set_quoted('HOSTBOOT_DUMP_OBJPATH', get_option('HOSTBOOT_DUMP_OBJPATH'),
description : 'The Hostboot dump manager D-Bus path'
)
@@ -42,6 +40,27 @@
opconf_data.set('HOSTBOOT_DUMP_TOTAL_SIZE', get_option('HOSTBOOT_DUMP_TOTAL_SIZE'),
description : 'Total size of the dump in kilo bytes'
)
+opconf_data.set_quoted('HARDWARE_DUMP_OBJPATH', get_option('HARDWARE_DUMP_OBJPATH'),
+ description : 'The hardware dump manager D-Bus path'
+ )
+opconf_data.set_quoted('HARDWARE_DUMP_OBJ_ENTRY', get_option('HARDWARE_DUMP_OBJ_ENTRY'),
+ description : 'The hardware dump entry D-Bus object path'
+ )
+opconf_data.set_quoted('HARDWARE_DUMP_TMP_FILE_DIR', get_option('HARDWARE_DUMP_TMP_FILE_DIR'),
+ description : 'Directory where hardwre dump pieces are stored for packaging'
+ )
+opconf_data.set_quoted('HARDWARE_DUMP_PATH', get_option('HARDWARE_DUMP_PATH'),
+ description : 'Directory where hardware dumps are placed'
+ )
+opconf_data.set('HARDWARE_DUMP_MAX_SIZE', get_option('HARDWARE_DUMP_MAX_SIZE'),
+ description : 'Maximum size of one hardware dump in kilo bytes'
+ )
+opconf_data.set('HARDWARE_DUMP_MIN_SPACE_REQD', get_option('HARDWARE_DUMP_MIN_SPACE_REQD'),
+ description : 'Minimum space required for one hardware dump in kilo bytes'
+ )
+opconf_data.set('HARDWARE_DUMP_TOTAL_SIZE', get_option('HARDWARE_DUMP_TOTAL_SIZE'),
+ description : 'Total size of the dump in kilo bytes'
+ )
configure_file(configuration : opconf_data,
output : 'openpower_dumps_config.h'