aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/kernel/cpu/common.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
index 002216ab9145..c928a7ae1099 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -1169,9 +1169,8 @@ void syscall_init(void)
1169 */ 1169 */
1170 wrmsrl(MSR_STAR, ((u64)__USER32_CS)<<48 | ((u64)__KERNEL_CS)<<32); 1170 wrmsrl(MSR_STAR, ((u64)__USER32_CS)<<48 | ((u64)__KERNEL_CS)<<32);
1171 wrmsrl(MSR_LSTAR, system_call); 1171 wrmsrl(MSR_LSTAR, system_call);
1172#ifndef CONFIG_IA32_EMULATION 1172
1173 wrmsrl(MSR_CSTAR, ignore_sysret); 1173#ifdef CONFIG_IA32_EMULATION
1174#else
1175 wrmsrl(MSR_CSTAR, ia32_cstar_target); 1174 wrmsrl(MSR_CSTAR, ia32_cstar_target);
1176 /* 1175 /*
1177 * Always load these, in case some future 64-bit CPU supports 1176 * Always load these, in case some future 64-bit CPU supports
@@ -1180,6 +1179,11 @@ void syscall_init(void)
1180 wrmsrl_safe(MSR_IA32_SYSENTER_CS, (u64)__KERNEL_CS); 1179 wrmsrl_safe(MSR_IA32_SYSENTER_CS, (u64)__KERNEL_CS);
1181 wrmsrl_safe(MSR_IA32_SYSENTER_ESP, 0ULL); 1180 wrmsrl_safe(MSR_IA32_SYSENTER_ESP, 0ULL);
1182 wrmsrl_safe(MSR_IA32_SYSENTER_EIP, (u64)ia32_sysenter_target); 1181 wrmsrl_safe(MSR_IA32_SYSENTER_EIP, (u64)ia32_sysenter_target);
1182#else
1183 wrmsrl(MSR_CSTAR, ignore_sysret);
1184 wrmsrl_safe(MSR_IA32_SYSENTER_CS, 0);
1185 wrmsrl_safe(MSR_IA32_SYSENTER_ESP, 0ULL);
1186 wrmsrl_safe(MSR_IA32_SYSENTER_EIP, 0ULL);
1183#endif 1187#endif
1184 1188
1185 /* Flags to clear on syscall */ 1189 /* Flags to clear on syscall */