diff options
author | Helge Deller <deller@gmx.de> | 2017-09-18 11:55:24 -0400 |
---|---|---|
committer | Helge Deller <deller@gmx.de> | 2017-09-22 13:47:00 -0400 |
commit | ea6976483fb0ced259fbaa9e4f68a2cdcee7e312 (patch) | |
tree | b7deab0fd220387934c66403fcf614d893ac9d51 | |
parent | 8d771b143fe2e3941fc8a32926d21410004578c0 (diff) |
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>
-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 @@ | |||
15 | #include <linux/memblock.h> | 15 | #include <linux/memblock.h> |
16 | #include <linux/seq_file.h> | 16 | #include <linux/seq_file.h> |
17 | #include <linux/kthread.h> | 17 | #include <linux/kthread.h> |
18 | #include <linux/initrd.h> | ||
18 | 19 | ||
19 | #include <asm/pdc.h> | 20 | #include <asm/pdc.h> |
20 | #include <asm/pdcpat.h> | 21 | #include <asm/pdcpat.h> |
@@ -216,8 +217,16 @@ void __init pdc_pdt_init(void) | |||
216 | } | 217 | } |
217 | 218 | ||
218 | for (i = 0; i < pdt_status.pdt_entries; i++) { | 219 | for (i = 0; i < pdt_status.pdt_entries; i++) { |
220 | unsigned long addr; | ||
221 | |||
219 | report_mem_err(pdt_entry[i]); | 222 | report_mem_err(pdt_entry[i]); |
220 | 223 | ||
224 | addr = pdt_entry[i] & PDT_ADDR_PHYS_MASK; | ||
225 | if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && | ||
226 | addr >= initrd_start && addr < initrd_end) | ||
227 | pr_crit("CRITICAL: initrd possibly broken " | ||
228 | "due to bad memory!\n"); | ||
229 | |||
221 | /* mark memory page bad */ | 230 | /* mark memory page bad */ |
222 | memblock_reserve(pdt_entry[i] & PAGE_MASK, PAGE_SIZE); | 231 | memblock_reserve(pdt_entry[i] & PAGE_MASK, PAGE_SIZE); |
223 | } | 232 | } |