Commit 82da65da authored by Linus Torvalds's avatar Linus Torvalds

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: default avatarParag Warudkar <parag.lkml@gmail.com>
Cc: Fenghua Yu <fenghua.yu@intel.com>
Cc: "H. Peter Anvin" <hpa@linux.intel.com>
Cc: Ingo Molnar <mingo@elte.hu>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent a1e4891f
...@@ -254,7 +254,7 @@ static inline void squash_the_stupid_serial_number(struct cpuinfo_x86 *c) ...@@ -254,7 +254,7 @@ static inline void squash_the_stupid_serial_number(struct cpuinfo_x86 *c)
} }
#endif #endif
static int disable_smep __initdata; static int disable_smep __cpuinitdata;
static __init int setup_disable_smep(char *arg) static __init int setup_disable_smep(char *arg)
{ {
disable_smep = 1; disable_smep = 1;
...@@ -262,7 +262,7 @@ static __init int setup_disable_smep(char *arg) ...@@ -262,7 +262,7 @@ static __init int setup_disable_smep(char *arg)
} }
__setup("nosmep", setup_disable_smep); __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 (cpu_has(c, X86_FEATURE_SMEP)) {
if (unlikely(disable_smep)) { if (unlikely(disable_smep)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment