Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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>

authored by

Guilherme G. Piccoli and committed by
Mike Rapoport (Microsoft)
f7f4a21c f338e773

+18 -9
+18 -9
mm/memblock.c
··· 2642 2642 int len; 2643 2643 2644 2644 if (!p) 2645 - return -EINVAL; 2645 + goto err_param; 2646 2646 2647 2647 /* 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"); 2649 2650 return -EBUSY; 2651 + } 2650 2652 2651 2653 oldp = p; 2652 2654 size = memparse(p, &p); 2653 2655 if (!size || p == oldp) 2654 - return -EINVAL; 2656 + goto err_param; 2655 2657 2656 2658 if (*p != ':') 2657 - return -EINVAL; 2659 + goto err_param; 2658 2660 2659 2661 align = memparse(p+1, &p); 2660 2662 if (*p != ':') 2661 - return -EINVAL; 2663 + goto err_param; 2662 2664 2663 2665 /* 2664 2666 * memblock_phys_alloc() doesn't like a zero size align, ··· 2674 2672 2675 2673 /* name needs to have length but not too big */ 2676 2674 if (!len || len >= RESERVE_MEM_NAME_SIZE) 2677 - return -EINVAL; 2675 + goto err_param; 2678 2676 2679 2677 /* Make sure that name has text */ 2680 2678 for (p = name; *p; p++) { ··· 2682 2680 break; 2683 2681 } 2684 2682 if (!*p) 2685 - return -EINVAL; 2683 + goto err_param; 2686 2684 2687 2685 /* Make sure the name is not already used */ 2688 - if (reserve_mem_find_by_name(name, &start, &tmp)) 2686 + if (reserve_mem_find_by_name(name, &start, &tmp)) { 2687 + pr_err("reserve_mem: name \"%s\" was already used\n", name); 2689 2688 return -EBUSY; 2689 + } 2690 2690 2691 2691 /* Pick previous allocations up from KHO if available */ 2692 2692 if (reserve_mem_kho_revive(name, size, align)) ··· 2696 2692 2697 2693 /* TODO: Allocation must be outside of scratch region */ 2698 2694 start = memblock_phys_alloc(size, align); 2699 - if (!start) 2695 + if (!start) { 2696 + pr_err("reserve_mem: memblock allocation failed\n"); 2700 2697 return -ENOMEM; 2698 + } 2701 2699 2702 2700 reserved_mem_add(start, size, name); 2703 2701 2704 2702 return 1; 2703 + err_param: 2704 + pr_err("reserve_mem: empty or malformed parameter\n"); 2705 + return -EINVAL; 2705 2706 } 2706 2707 __setup("reserve_mem=", reserve_mem); 2707 2708