powerpc/fadump: Throw proper error message on fadump registration failure

fadump fails to register when there are holes in reserved memory area.
This can happen if user has hot-removed a memory that falls in the
fadump reserved memory area. Throw a meaningful error message to the
user in such case.

Signed-off-by: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
[mpe: is_reserved_memory_area_contiguous() returns bool, unsplit string]
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
Mahesh Salgaonkar 2018-08-20 13:47:24 +05:30 committed by Michael Ellerman
parent a4e92ce8e4
commit f86593be1e
1 changed files with 33 additions and 2 deletions

View File

@ -237,6 +237,35 @@ static int is_boot_memory_area_contiguous(void)
return ret;
}
/*
* Returns true, if there are no holes in reserved memory area,
* false otherwise.
*/
static bool is_reserved_memory_area_contiguous(void)
{
struct memblock_region *reg;
unsigned long start, end;
unsigned long d_start = fw_dump.reserve_dump_area_start;
unsigned long d_end = d_start + fw_dump.reserve_dump_area_size;
for_each_memblock(memory, reg) {
start = max(d_start, (unsigned long)reg->base);
end = min(d_end, (unsigned long)(reg->base + reg->size));
if (d_start < end) {
/* Memory hole from d_start to start */
if (start > d_start)
break;
if (end == d_end)
return true;
d_start = end + 1;
}
}
return false;
}
/* Print firmware assisted dump configurations for debugging purpose. */
static void fadump_show_config(void)
{
@ -603,8 +632,10 @@ static int register_fw_dump(struct fadump_mem_struct *fdm)
break;
case -3:
if (!is_boot_memory_area_contiguous())
pr_err("Can't have holes in boot memory area while "
"registering fadump\n");
pr_err("Can't have holes in boot memory area while registering fadump\n");
else if (!is_reserved_memory_area_contiguous())
pr_err("Can't have holes in reserved memory area while"
" registering fadump\n");
printk(KERN_ERR "Failed to register firmware-assisted kernel"
" dump. Parameter Error(%d).\n", rc);