diff options
author | Suresh Siddha <suresh.b.siddha@intel.com> | 2009-10-14 14:46:56 -0700 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2009-10-20 14:46:00 +0900 |
commit | 74e081797bd9d2a7d8005fe519e719df343a2ba8 (patch) | |
tree | f210cca2002f87bf4cb17c20b853c129ce1df8f9 /arch/x86/include/asm/sections.h | |
parent | b9af7c0d44b8bb71e3af5e94688d076414aa8c87 (diff) | |
download | talos-op-linux-74e081797bd9d2a7d8005fe519e719df343a2ba8.tar.gz talos-op-linux-74e081797bd9d2a7d8005fe519e719df343a2ba8.zip |
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>
Diffstat (limited to 'arch/x86/include/asm/sections.h')
-rw-r--r-- | arch/x86/include/asm/sections.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/arch/x86/include/asm/sections.h b/arch/x86/include/asm/sections.h index 1b7ee5d673c2..0a5242428659 100644 --- a/arch/x86/include/asm/sections.h +++ b/arch/x86/include/asm/sections.h @@ -2,7 +2,13 @@ #define _ASM_X86_SECTIONS_H #include <asm-generic/sections.h> +#include <asm/uaccess.h> extern char __brk_base[], __brk_limit[]; +extern struct exception_table_entry __stop___ex_table[]; + +#if defined(CONFIG_X86_64) && defined(CONFIG_DEBUG_RODATA) +extern char __end_rodata_hpage_align[]; +#endif #endif /* _ASM_X86_SECTIONS_H */ |