Skip to content

Commit

Permalink
powerpc/fadump: Throw proper error message on fadump registration fai…
Browse files Browse the repository at this point in the history
…lure

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>
  • Loading branch information
Mahesh Salgaonkar authored and Michael Ellerman committed Dec 21, 2018
1 parent a4e92ce commit f86593b
Showing 1 changed file with 33 additions and 2 deletions.
35 changes: 33 additions & 2 deletions arch/powerpc/kernel/fadump.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit f86593b

Please sign in to comment.