All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] LoongArch: Support mem=SIZE kernel parameter
@ 2025-07-01  9:04 Ming Wang
  2025-07-02  2:11 ` Yanteng Si
  0 siblings, 1 reply; 6+ messages in thread
From: Ming Wang @ 2025-07-01  9:04 UTC (permalink / raw)
  To: Huacai Chen, WANG Xuerui, Andrew Morton, Bibo Mao, Hari Bathini,
	Guo Weikang, Ming Wang, Sourabh Jain, Usama Arif, loongarch,
	linux-kernel
  Cc: lixuefeng, chenhuacai, gaojuxin

The LoongArch mem= parameter parser was previously limited to the
mem=SIZE@START format. This was inconvenient for the common use case
of simply capping the total system memory, as it forced users to
manually specify a start address. It was also inconsistent with the
behavior on other architectures.

This patch enhances the parser in early_parse_mem() to also support the
more user-friendly mem=SIZE format. The implementation now checks for
the presence of the '@' symbol to determine the user's intent:

- If mem=SIZE is provided (no '@'), the kernel now calls
  memblock_enforce_memory_limit(). This trims memory from the top down
  to the specified size.
- If mem=SIZE@START is used, the original behavior is retained for
  backward compatibility. This allows for defining specific memory
  banks.

This change introduces an important usage rule reflected in the code's
comments: the mem=SIZE format should only be specified once on the
kernel command line. It acts as a single, global cap on total memory. In
contrast, the mem=SIZE@START format can be used multiple times to
define several distinct memory regions.

Signed-off-by: Ming Wang <wangming01@loongson.cn>
---
 arch/loongarch/kernel/setup.c | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/arch/loongarch/kernel/setup.c b/arch/loongarch/kernel/setup.c
index b99fbb388fe0..af59ba180dc2 100644
--- a/arch/loongarch/kernel/setup.c
+++ b/arch/loongarch/kernel/setup.c
@@ -191,6 +191,16 @@ static int __init early_parse_mem(char *p)
 		return -EINVAL;
 	}
 
+	start = 0;
+	size = memparse(p, &p);
+	if (*p == '@')	/* Every mem=... should contain '@' */
+		start = memparse(p + 1, &p);
+	else {			/* Only one mem=... is allowed if no '@' */
+		usermem = 1;
+		memblock_enforce_memory_limit(size);
+		return 0;
+	}
+
 	/*
 	 * If a user specifies memory size, we
 	 * blow away any automatically generated
@@ -201,14 +211,6 @@ static int __init early_parse_mem(char *p)
 		memblock_remove(memblock_start_of_DRAM(),
 			memblock_end_of_DRAM() - memblock_start_of_DRAM());
 	}
-	start = 0;
-	size = memparse(p, &p);
-	if (*p == '@')
-		start = memparse(p + 1, &p);
-	else {
-		pr_err("Invalid format!\n");
-		return -EINVAL;
-	}
 
 	if (!IS_ENABLED(CONFIG_NUMA))
 		memblock_add(start, size);
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2025-07-10  4:28 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-01  9:04 [PATCH] LoongArch: Support mem=SIZE kernel parameter Ming Wang
2025-07-02  2:11 ` Yanteng Si
2025-07-03  1:36   ` Ming Wang
2025-07-07  2:33     ` Yanteng Si
2025-07-07 10:02       ` Ming Wang
2025-07-10  4:28         ` Huacai Chen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.