diff options
Diffstat (limited to 'arch/parisc/kernel/pdt.c')
| -rw-r--r-- | arch/parisc/kernel/pdt.c | 10 | 
1 files changed, 10 insertions, 0 deletions
| diff --git a/arch/parisc/kernel/pdt.c b/arch/parisc/kernel/pdt.c index 05730a83895c..e07eb34c8750 100644 --- a/arch/parisc/kernel/pdt.c +++ b/arch/parisc/kernel/pdt.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  /*   *    Page Deallocation Table (PDT) support   * @@ -15,6 +16,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 +218,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);  	} |