From: Linus Torvalds Date: Mon, 23 May 2011 04:37:01 +0000 (-0700) Subject: x86: setup_smep needs to be __cpuinit X-Git-Tag: upstream/snapshot3+hdmi~10369 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=82da65dab5f438ac7df28eeb43e2f5b742aa00ef;p=platform%2Fadaptation%2Frenesas_rcar%2Frenesas_kernel.git x86: setup_smep needs to be __cpuinit The setup_smep function gets calle at resume time too, and is thus not a pure __init function. When marked as __init, it gets thrown out after the kernel has initialized, and when the kernel is suspended and resumed, the code will no longer be around, and we'll get a nice "kernel tried to execute NX-protected page" oops because the page is no longer marked executable. Reported-and-tested-by: Parag Warudkar Cc: Fenghua Yu Cc: "H. Peter Anvin" Cc: Ingo Molnar Signed-off-by: Linus Torvalds --- diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c index cbc70a2..c8b4162 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c @@ -254,7 +254,7 @@ static inline void squash_the_stupid_serial_number(struct cpuinfo_x86 *c) } #endif -static int disable_smep __initdata; +static int disable_smep __cpuinitdata; static __init int setup_disable_smep(char *arg) { disable_smep = 1; @@ -262,7 +262,7 @@ static __init int setup_disable_smep(char *arg) } __setup("nosmep", setup_disable_smep); -static __init void setup_smep(struct cpuinfo_x86 *c) +static __cpuinit void setup_smep(struct cpuinfo_x86 *c) { if (cpu_has(c, X86_FEATURE_SMEP)) { if (unlikely(disable_smep)) {