diff options
-rw-r--r-- | arch/x86/kernel/cpu/common.c | 10 |
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 */ |