]> git.baikalelectronics.ru Git - kernel.git/commit
ARM: 6890/1: memmap: only free allocated memmap entries when using SPARSEMEM
authorWill Deacon <will.deacon@arm.com>
Thu, 28 Apr 2011 17:44:31 +0000 (18:44 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Thu, 12 May 2011 09:52:00 +0000 (10:52 +0100)
commit1a12bcefcc89d3650c2af31dcf2176c9df511ee6
treeb884faac285aeb76c07f73e118ef29ce94cd7156
parentd89721ee35080897183d6fa38634f71cd495d006
ARM: 6890/1: memmap: only free allocated memmap entries when using SPARSEMEM

The SPARSEMEM code allocates memmap entries only for sections which are
present (i.e. those which contain some valid memory). The membank checks
in free_unused_memmap do not take this into account and can incorrectly
attempt to free memory which is not allocated, resulting in a BUG() in
the bootmem code.

However, if memory is configured as follows:

    |<----section---->|<----hole---->|<----section---->|
    +--------+--------+--------------+--------+--------+
    | bank 0 | unused |              | bank 1 | unused |
    +--------+--------+--------------+--------+--------+

where a bank only occupies part of a section, the memmap allocated for
the remainder of the section *can* be freed.

This patch modifies the checks in free_unused_memmap so that only valid
memmap entries are considered for removal.

Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mm/init.c