Skip to content

Commit f7f4a21

Browse files
guilhermepiccolirppt
authored andcommitted
memblock: Print out errors on reserve_mem parser
The parsing of kernel parameter "reserve_mem=" is subject to multiple failures, like duplicate naming, malformed expression or even lack of available memory. Right now, all of these fail silently. Let's add some messages so the kernel log can provide useful information in case of failures. Reviewed-by: SeongJae Park <sj@kernel.org> Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com> Link: https://patch.msgid.link/20260324012839.1991765-1-gpiccoli@igalia.com Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
1 parent f338e77 commit f7f4a21

1 file changed

Lines changed: 18 additions & 9 deletions

File tree

mm/memblock.c

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2642,23 +2642,25 @@ static int __init reserve_mem(char *p)
26422642
int len;
26432643

26442644
if (!p)
2645-
return -EINVAL;
2645+
goto err_param;
26462646

26472647
/* Check if there's room for more reserved memory */
2648-
if (reserved_mem_count >= RESERVE_MEM_MAX_ENTRIES)
2648+
if (reserved_mem_count >= RESERVE_MEM_MAX_ENTRIES) {
2649+
pr_err("reserve_mem: no more room for reserved memory\n");
26492650
return -EBUSY;
2651+
}
26502652

26512653
oldp = p;
26522654
size = memparse(p, &p);
26532655
if (!size || p == oldp)
2654-
return -EINVAL;
2656+
goto err_param;
26552657

26562658
if (*p != ':')
2657-
return -EINVAL;
2659+
goto err_param;
26582660

26592661
align = memparse(p+1, &p);
26602662
if (*p != ':')
2661-
return -EINVAL;
2663+
goto err_param;
26622664

26632665
/*
26642666
* memblock_phys_alloc() doesn't like a zero size align,
@@ -2672,32 +2674,39 @@ static int __init reserve_mem(char *p)
26722674

26732675
/* name needs to have length but not too big */
26742676
if (!len || len >= RESERVE_MEM_NAME_SIZE)
2675-
return -EINVAL;
2677+
goto err_param;
26762678

26772679
/* Make sure that name has text */
26782680
for (p = name; *p; p++) {
26792681
if (!isspace(*p))
26802682
break;
26812683
}
26822684
if (!*p)
2683-
return -EINVAL;
2685+
goto err_param;
26842686

26852687
/* Make sure the name is not already used */
2686-
if (reserve_mem_find_by_name(name, &start, &tmp))
2688+
if (reserve_mem_find_by_name(name, &start, &tmp)) {
2689+
pr_err("reserve_mem: name \"%s\" was already used\n", name);
26872690
return -EBUSY;
2691+
}
26882692

26892693
/* Pick previous allocations up from KHO if available */
26902694
if (reserve_mem_kho_revive(name, size, align))
26912695
return 1;
26922696

26932697
/* TODO: Allocation must be outside of scratch region */
26942698
start = memblock_phys_alloc(size, align);
2695-
if (!start)
2699+
if (!start) {
2700+
pr_err("reserve_mem: memblock allocation failed\n");
26962701
return -ENOMEM;
2702+
}
26972703

26982704
reserved_mem_add(start, size, name);
26992705

27002706
return 1;
2707+
err_param:
2708+
pr_err("reserve_mem: empty or malformed parameter\n");
2709+
return -EINVAL;
27012710
}
27022711
__setup("reserve_mem=", reserve_mem);
27032712

0 commit comments

Comments
 (0)