x86-64: align RODATA kernel section to 2MB with CONFIG_DEBUG_RODATA
authorSuresh Siddha <suresh.b.siddha@intel.com>
Wed, 14 Oct 2009 21:46:56 +0000 (14:46 -0700)
committerH. Peter Anvin <hpa@zytor.com>
Tue, 20 Oct 2009 05:46:00 +0000 (14:46 +0900)
commit74e081797bd9d2a7d8005fe519e719df343a2ba8
treef210cca2002f87bf4cb17c20b853c129ce1df8f9
parentb9af7c0d44b8bb71e3af5e94688d076414aa8c87
x86-64: align RODATA kernel section to 2MB with CONFIG_DEBUG_RODATA

CONFIG_DEBUG_RODATA chops the large pages spanning boundaries of kernel
text/rodata/data to small 4KB pages as they are mapped with different
attributes (text as RO, RODATA as RO and NX etc).

On x86_64, preserve the large page mappings for kernel text/rodata/data
boundaries when CONFIG_DEBUG_RODATA is enabled. This is done by allowing the
RODATA section to be hugepage aligned and having same RWX attributes
for the 2MB page boundaries

Extra Memory pages padding the sections will be freed during the end of the boot
and the kernel identity mappings will have different RWX permissions compared to
the kernel text mappings.

Kernel identity mappings to these physical pages will be mapped with smaller
pages but large page mappings are still retained for kernel text,rodata,data
mappings.

Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
LKML-Reference: <20091014220254.190119924@sbs-t61.sc.intel.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
arch/x86/include/asm/sections.h
arch/x86/kernel/vmlinux.lds.S
arch/x86/mm/init_64.c
arch/x86/mm/pageattr.c