diff options
author | Helge Deller <deller@gmx.de> | 2017-09-18 18:55:24 +0300 |
---|---|---|
committer | Helge Deller <deller@gmx.de> | 2017-09-22 20:47:00 +0300 |
commit | ea6976483fb0ced259fbaa9e4f68a2cdcee7e312 (patch) | |
tree | b7deab0fd220387934c66403fcf614d893ac9d51 /arch | |
parent | 8d771b143fe2e3941fc8a32926d21410004578c0 (diff) | |
download | linux-ea6976483fb0ced259fbaa9e4f68a2cdcee7e312.tar.xz |
parisc: Check if initrd was loaded into broken RAM
While scanning the PDT for reported broken memory modules, warn if the
initrd was coincidentally loaded into bad memory.
Signed-off-by: Helge Deller <deller@gmx.de>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/parisc/kernel/pdt.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/arch/parisc/kernel/pdt.c b/arch/parisc/kernel/pdt.c index 05730a83895c..00aed082969b 100644 --- a/arch/parisc/kernel/pdt.c +++ b/arch/parisc/kernel/pdt.c @@ -15,6 +15,7 @@ #include <linux/memblock.h> #include <linux/seq_file.h> #include <linux/kthread.h> +#include <linux/initrd.h> #include <asm/pdc.h> #include <asm/pdcpat.h> @@ -216,8 +217,16 @@ void __init pdc_pdt_init(void) } for (i = 0; i < pdt_status.pdt_entries; i++) { + unsigned long addr; + report_mem_err(pdt_entry[i]); + addr = pdt_entry[i] & PDT_ADDR_PHYS_MASK; + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && + addr >= initrd_start && addr < initrd_end) + pr_crit("CRITICAL: initrd possibly broken " + "due to bad memory!\n"); + /* mark memory page bad */ memblock_reserve(pdt_entry[i] & PAGE_MASK, PAGE_SIZE); } |