ARM: 8168/1: extend __init_end to a page align address
authorYalin Wang <Yalin.Wang@sonymobile.com>
Fri, 26 Sep 2014 02:30:59 +0000 (03:30 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Thu, 2 Oct 2014 20:28:16 +0000 (21:28 +0100)
This patch changes the __init_end address to a
page align address, so that free_initmem() can
free the whole .init section, because if the end
address is not page aligned, it will round down to
a page align address, then the tail unligned page
will not be freed.

Signed-off-by: wang <yalin.wang2010@gmail.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/kernel/vmlinux.lds.S
arch/arm64/kernel/vmlinux.lds.S
include/asm-generic/vmlinux.lds.h

index 6f57cb94367fed3697ae3628bcc5b16fc9f8a5be..8e95aa47457a56761b4a84bcc5ad8a657fac8c66 100644 (file)
@@ -219,8 +219,8 @@ SECTIONS
        __data_loc = ALIGN(4);          /* location in binary */
        . = PAGE_OFFSET + TEXT_OFFSET;
 #else
-       __init_end = .;
        . = ALIGN(THREAD_SIZE);
+       __init_end = .;
        __data_loc = .;
 #endif
 
index 97f0c0429dfa647fc9e07eb349768b4ebc750e71..edf8715ba39b5b3486776afd1cdccd90666a8702 100644 (file)
@@ -97,9 +97,9 @@ SECTIONS
 
        PERCPU_SECTION(64)
 
+       . = ALIGN(PAGE_SIZE);
        __init_end = .;
 
-       . = ALIGN(PAGE_SIZE);
        _data = .;
        _sdata = .;
        RW_DATA_SECTION(64, PAGE_SIZE, THREAD_SIZE)
index 5ba0360663a7daae3df0f063e6901d7990a381d8..aa70cbda327c1feee026b8e2e1196db9b081ef0c 100644 (file)
@@ -40,6 +40,8 @@
  * }
  *
  * [__init_begin, __init_end] is the init section that may be freed after init
+ *     // __init_begin and __init_end should be page aligned, so that we can
+ *     // free the whole .init memory
  * [_stext, _etext] is the text section
  * [_sdata, _edata] is the data section
  *