Make OPAL call to indicate that the dump is processed and the metadata area in OPAL can be cleared/released. Also, setup/initialize FADump for re-registration.
Signed-off-by: Hari Bathini <hbath...@linux.ibm.com> --- arch/powerpc/kernel/fadump.c | 7 ++++++- arch/powerpc/platforms/powernv/opal-fadump.c | 12 +++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/arch/powerpc/kernel/fadump.c b/arch/powerpc/kernel/fadump.c index b2d5ca6..971c50d 100644 --- a/arch/powerpc/kernel/fadump.c +++ b/arch/powerpc/kernel/fadump.c @@ -921,7 +921,12 @@ static void fadump_invalidate_release_mem(void) fw_dump.cpu_notes_buf_size = 0; } - /* Initialize the kernel dump memory structure for FAD registration. */ + /* + * Setup kernel metadata and initialize the kernel dump + * memory structure for FADump re-registration. + */ + if (fw_dump.ops->fadump_setup_metadata(&fw_dump) < 0) + pr_warn("Failed to setup kernel metadata!\n"); fw_dump.ops->fadump_init_mem_struct(&fw_dump); } diff --git a/arch/powerpc/platforms/powernv/opal-fadump.c b/arch/powerpc/platforms/powernv/opal-fadump.c index 6a05d51..f75b861 100644 --- a/arch/powerpc/platforms/powernv/opal-fadump.c +++ b/arch/powerpc/platforms/powernv/opal-fadump.c @@ -260,7 +260,17 @@ static int opal_fadump_unregister(struct fw_dump *fadump_conf) static int opal_fadump_invalidate(struct fw_dump *fadump_conf) { - return -EIO; + s64 rc; + + rc = opal_mpipl_update(OPAL_MPIPL_FREE_PRESERVED_MEMORY, 0, 0, 0); + if (rc) { + pr_err("Failed to invalidate - unexpected Error(%lld).\n", rc); + return -EIO; + } + + fadump_conf->dump_active = 0; + opal_fdm_active = NULL; + return 0; } static void opal_fadump_cleanup(struct fw_dump *fadump_conf)