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)

Reply via email to