mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-29 10:01:25 +00:00
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:
parent
a4e92ce8e4
commit
f86593be1e
1 changed files with 33 additions and 2 deletions
|
@ -237,6 +237,35 @@ static int is_boot_memory_area_contiguous(void)
|
||||||
return ret;
|
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. */
|
/* Print firmware assisted dump configurations for debugging purpose. */
|
||||||
static void fadump_show_config(void)
|
static void fadump_show_config(void)
|
||||||
{
|
{
|
||||||
|
@ -603,7 +632,9 @@ static int register_fw_dump(struct fadump_mem_struct *fdm)
|
||||||
break;
|
break;
|
||||||
case -3:
|
case -3:
|
||||||
if (!is_boot_memory_area_contiguous())
|
if (!is_boot_memory_area_contiguous())
|
||||||
pr_err("Can't have holes in boot memory area while "
|
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");
|
" registering fadump\n");
|
||||||
|
|
||||||
printk(KERN_ERR "Failed to register firmware-assisted kernel"
|
printk(KERN_ERR "Failed to register firmware-assisted kernel"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue