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: Markos 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: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
parent
c6c7d7c343
commit
a168dc393d
1 changed files with 10 additions and 4 deletions
|
@ -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");
|
||||||
|
|
Loading…
Reference in a new issue