powerpc/fadump: provide a helpful error message

fadump fails to register when there are holes in boot memory area.
Provide a helpful error message to the user in such case.

Signed-off-by: Hari Bathini <hbathini@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
Hari Bathini 2017-06-01 22:52:10 +05:30 committed by Michael Ellerman
parent eae0dfcc44
commit a5a05b91c7

View File

@ -130,6 +130,38 @@ int is_fadump_active(void)
return fw_dump.dump_active; return fw_dump.dump_active;
} }
/*
* Returns 1, if there are no holes in boot memory area,
* 0 otherwise.
*/
static int is_boot_memory_area_contiguous(void)
{
struct memblock_region *reg;
unsigned long tstart, tend;
unsigned long start_pfn = PHYS_PFN(RMA_START);
unsigned long end_pfn = PHYS_PFN(RMA_START + fw_dump.boot_memory_size);
unsigned int ret = 0;
for_each_memblock(memory, reg) {
tstart = max(start_pfn, memblock_region_memory_base_pfn(reg));
tend = min(end_pfn, memblock_region_memory_end_pfn(reg));
if (tstart < tend) {
/* Memory hole from start_pfn to tstart */
if (tstart > start_pfn)
break;
if (tend == end_pfn) {
ret = 1;
break;
}
start_pfn = tend + 1;
}
}
return ret;
}
/* Print firmware assisted dump configurations for debugging purpose. */ /* Print firmware assisted dump configurations for debugging purpose. */
static void fadump_show_config(void) static void fadump_show_config(void)
{ {
@ -457,6 +489,10 @@ static int register_fw_dump(struct fadump_mem_struct *fdm)
" dump. Hardware Error(%d).\n", rc); " dump. Hardware Error(%d).\n", rc);
break; break;
case -3: case -3:
if (!is_boot_memory_area_contiguous())
pr_err("Can't have holes in boot memory area while "
"registering fadump\n");
printk(KERN_ERR "Failed to register firmware-assisted kernel" printk(KERN_ERR "Failed to register firmware-assisted kernel"
" dump. Parameter Error(%d).\n", rc); " dump. Parameter Error(%d).\n", rc);
err = -EINVAL; err = -EINVAL;