MIPS: init: Ensure reserved memory regions are not added to bootmem
authorMarcin Nowakowski <marcin.nowakowski@imgtec.com>
Wed, 23 Nov 2016 13:43:44 +0000 (14:43 +0100)
committerRalf Baechle <ralf@linux-mips.org>
Tue, 3 Jan 2017 15:34:45 +0000 (16:34 +0100)
Memories managed through boot_mem_map are generally expected to define
non-crossing areas. However, if part of a larger memory block is marked
as reserved, it would still be added to bootmem allocator as an
available block and could end up being overwritten by the allocator.

Prevent this by explicitly marking the memory as reserved it if exists
in the range used by bootmem allocator.

Signed-off-by: Marcin Nowakowski <marcin.nowakowski@imgtec.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/14608/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/kernel/setup.c

index 0058feaa65e5078ba466a4995a516318752ea10a..8ebad247ce82c597b3494d6de1dffc868de54410 100644 (file)
@@ -483,6 +483,10 @@ static void __init bootmem_init(void)
                        continue;
                default:
                        /* Not usable memory */
+                       if (start > min_low_pfn && end < max_low_pfn)
+                               reserve_bootmem(boot_mem_map.map[i].addr,
+                                               boot_mem_map.map[i].size,
+                                               BOOTMEM_DEFAULT);
                        continue;
                }