Commit 64615682 authored by Markos Chandras's avatar Markos Chandras Committed by Ralf Baechle

MIPS: Malta: Improve system memory detection for '{e, }memsize' >= 2G

Using kstrtol to parse the "{e,}memsize" variables was wrong because this
parses signed long numbers. In case of '{e,}memsize' >= 2G, the top bit
is set, resulting to -ERANGE errors and possibly random system memory
boundaries. We fix this by replacing "kstrtol" with "kstrtoul".
We also improve the code to check the kstrtoul return value and
print a warning if an error was returned.
Signed-off-by: default avatarMarkos Chandras <markos.chandras@imgtec.com>
Cc: <stable@vger.kernel.org> # v3.15+
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/7543/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 293076f3
...@@ -35,13 +35,19 @@ fw_memblock_t * __init fw_getmdesc(int eva) ...@@ -35,13 +35,19 @@ fw_memblock_t * __init fw_getmdesc(int eva)
/* otherwise look in the environment */ /* otherwise look in the environment */
memsize_str = fw_getenv("memsize"); memsize_str = fw_getenv("memsize");
if (memsize_str) if (memsize_str) {
tmp = kstrtol(memsize_str, 0, &memsize); tmp = kstrtoul(memsize_str, 0, &memsize);
if (tmp)
pr_warn("Failed to read the 'memsize' env variable.\n");
}
if (eva) { if (eva) {
/* Look for ememsize for EVA */ /* Look for ememsize for EVA */
ememsize_str = fw_getenv("ememsize"); ememsize_str = fw_getenv("ememsize");
if (ememsize_str) if (ememsize_str) {
tmp = kstrtol(ememsize_str, 0, &ememsize); tmp = kstrtoul(ememsize_str, 0, &ememsize);
if (tmp)
pr_warn("Failed to read the 'ememsize' env variable.\n");
}
} }
if (!memsize && !ememsize) { if (!memsize && !ememsize) {
pr_warn("memsize not set in YAMON, set to default (32Mb)\n"); pr_warn("memsize not set in YAMON, set to default (32Mb)\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment