powerpc/fadump: handle invalidation of crashdump and re-registraion
authorHari Bathini <hbathini@linux.ibm.com>
Wed, 11 Sep 2019 14:53:28 +0000 (20:23 +0530)
committerMichael Ellerman <mpe@ellerman.id.au>
Fri, 13 Sep 2019 14:04:44 +0000 (00:04 +1000)
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 <hbathini@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/156821356046.5656.12270927048195494911.stgit@hbathini.in.ibm.com
arch/powerpc/kernel/fadump.c
arch/powerpc/platforms/powernv/opal-fadump.c

index aab9b4db0363f1e396a337cf563387795dc55913..852ac4761e90d88ebd8100d22ff2f5fff8c780e4 100644 (file)
@@ -1063,7 +1063,13 @@ static void fadump_invalidate_release_mem(void)
        fadump_release_memory(fw_dump.boot_memory_size, memblock_end_of_DRAM());
        fadump_free_cpu_notes_buf();
 
-       /* 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.ops->fadump_setup_metadata(&fw_dump) < 0))
+               pr_warn("Failed to setup kernel metadata!\n");
        fw_dump.ops->fadump_init_mem_struct(&fw_dump);
 }
 
index 533adae545d8a07d8bc1ca6f651245e5b9919f2c..ef6fb1fc66cbd4ffd9db508a92b1d8dc5419e528 100644 (file)
@@ -254,7 +254,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)