mm: memtest: convert to memtest_report_meminfo()
authorKefeng Wang <wangkefeng.wang@huawei.com>
Tue, 8 Aug 2023 03:33:59 +0000 (11:33 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Mon, 21 Aug 2023 20:37:47 +0000 (13:37 -0700)
It is better to not expose too many internal variables of memtest,
add a helper memtest_report_meminfo() to show memtest results.

Link: https://lkml.kernel.org/r/20230808033359.174986-1-wangkefeng.wang@huawei.com
Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
Acked-by: Mike Rapoport (IBM) <rppt@kernel.org>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: Tomas Mudrunka <tomas.mudrunka@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
fs/proc/meminfo.c
include/linux/memblock.h
mm/memtest.c

index 74e3c3815696a6129640c91876c4b1195799d178..45af9a989d4040135a4fe18acc9b5ef055a2affc 100644 (file)
@@ -133,17 +133,7 @@ static int meminfo_proc_show(struct seq_file *m, void *v)
        show_val_kb(m, "VmallocChunk:   ", 0ul);
        show_val_kb(m, "Percpu:         ", pcpu_nr_pages());
 
-#ifdef CONFIG_MEMTEST
-       if (early_memtest_done) {
-               unsigned long early_memtest_bad_size_kb;
-
-               early_memtest_bad_size_kb = early_memtest_bad_size>>10;
-               if (early_memtest_bad_size && !early_memtest_bad_size_kb)
-                       early_memtest_bad_size_kb = 1;
-               /* When 0 is reported, it means there actually was a successful test */
-               seq_printf(m, "EarlyMemtestBad:   %5lu kB\n", early_memtest_bad_size_kb);
-       }
-#endif
+       memtest_report_meminfo(m);
 
 #ifdef CONFIG_MEMORY_FAILURE
        seq_printf(m, "HardwareCorrupted: %5lu kB\n",
index 0d031fbfea2537f8fbc26faa48c9b8903d8c0278..1c1072e3ca063544c93288bcf3dbba15aa6f2616 100644 (file)
@@ -594,13 +594,11 @@ extern int hashdist;              /* Distribute hashes across NUMA nodes? */
 #endif
 
 #ifdef CONFIG_MEMTEST
-extern phys_addr_t early_memtest_bad_size;     /* Size of faulty ram found by memtest */
-extern bool early_memtest_done;                        /* Was early memtest done? */
-extern void early_memtest(phys_addr_t start, phys_addr_t end);
+void early_memtest(phys_addr_t start, phys_addr_t end);
+void memtest_report_meminfo(struct seq_file *m);
 #else
-static inline void early_memtest(phys_addr_t start, phys_addr_t end)
-{
-}
+static inline void early_memtest(phys_addr_t start, phys_addr_t end) { }
+static inline void memtest_report_meminfo(struct seq_file *m) { }
 #endif
 
 
index 57149dfee438551453c7d6ca23e6bf9800611884..32f3e9dda8370f9967988886162434b40fb2d18c 100644 (file)
@@ -3,9 +3,10 @@
 #include <linux/types.h>
 #include <linux/init.h>
 #include <linux/memblock.h>
+#include <linux/seq_file.h>
 
-bool early_memtest_done;
-phys_addr_t early_memtest_bad_size;
+static bool early_memtest_done;
+static phys_addr_t early_memtest_bad_size;
 
 static u64 patterns[] __initdata = {
        /* The first entry has to be 0 to leave memtest with zeroed memory */
@@ -117,3 +118,20 @@ void __init early_memtest(phys_addr_t start, phys_addr_t end)
                do_one_pass(patterns[idx], start, end);
        }
 }
+
+void memtest_report_meminfo(struct seq_file *m)
+{
+       unsigned long early_memtest_bad_size_kb;
+
+       if (!IS_ENABLED(CONFIG_PROC_FS))
+               return;
+
+       if (!early_memtest_done)
+               return;
+
+       early_memtest_bad_size_kb = early_memtest_bad_size >> 10;
+       if (early_memtest_bad_size && !early_memtest_bad_size_kb)
+               early_memtest_bad_size_kb = 1;
+       /* When 0 is reported, it means there actually was a successful test */
+       seq_printf(m, "EarlyMemtestBad:   %5lu kB\n", early_memtest_bad_size_kb);
+}