If dmapped zones are available, register the log buffer into one zone.

Signed-off-by: Eugen Hristev <[email protected]>
---
 fs/pstore/platform.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c
index 32448d9dd316..9a5c1d6d5031 100644
--- a/fs/pstore/platform.c
+++ b/fs/pstore/platform.c
@@ -452,11 +452,22 @@ static void pstore_register_kmsg(void)
        kmsg_dump_register(&pstore_dumper);
 }
 
+static int pstore_register_kmsg_dmapped(void)
+{
+       return pstore_register_core_area("dmesg", log_buf_addr_get(),
+                                        log_buf_len_get());
+}
+
 static void pstore_unregister_kmsg(void)
 {
        kmsg_dump_unregister(&pstore_dumper);
 }
 
+static int pstore_unregister_kmsg_dmapped(void)
+{
+       return pstore_unregister_core_area("dmesg", log_buf_addr_get(),
+                                          log_buf_len_get());
+}
 #ifdef CONFIG_PSTORE_CONSOLE
 static void pstore_console_write(struct console *con, const char *s, unsigned 
c)
 {
@@ -582,6 +593,9 @@ int pstore_register(struct pstore_info *psi)
                pstore_dumper.max_reason = psinfo->max_reason;
                pstore_register_kmsg();
        }
+       if (psi->flags & PSTORE_FLAGS_DMAPPED)
+               if (pstore_register_kmsg_dmapped())
+                       pr_warn("Registering kmsg as dmapped failed.\n");
        if (psi->flags & PSTORE_FLAGS_CONSOLE)
                pstore_register_console();
        if (psi->flags & PSTORE_FLAGS_FTRACE)
@@ -628,6 +642,8 @@ void pstore_unregister(struct pstore_info *psi)
                pstore_unregister_console();
        if (psi->flags & PSTORE_FLAGS_DMESG)
                pstore_unregister_kmsg();
+       if (psi->flags & PSTORE_FLAGS_DMAPPED)
+               pstore_unregister_kmsg_dmapped();
 
        /* Stop timer and make sure all work has finished. */
        del_timer_sync(&pstore_timer);
-- 
2.43.0


Reply via email to