Commit d366bf7e authored by Borislav Petkov's avatar Borislav Petkov Committed by Ingo Molnar

x86/cpufeature: Replace cpu_has_xsave with boot_cpu_has() usage

Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: kvm@vger.kernel.org
Link: http://lkml.kernel.org/r/1459801503-15600-10-git-send-email-bp@alien8.deSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent 01f8fd73
...@@ -357,7 +357,7 @@ int ia32_setup_rt_frame(int sig, struct ksignal *ksig, ...@@ -357,7 +357,7 @@ int ia32_setup_rt_frame(int sig, struct ksignal *ksig,
put_user_ex(ptr_to_compat(&frame->uc), &frame->puc); put_user_ex(ptr_to_compat(&frame->uc), &frame->puc);
/* Create the ucontext. */ /* Create the ucontext. */
if (cpu_has_xsave) if (boot_cpu_has(X86_FEATURE_XSAVE))
put_user_ex(UC_FP_XSTATE, &frame->uc.uc_flags); put_user_ex(UC_FP_XSTATE, &frame->uc.uc_flags);
else else
put_user_ex(0, &frame->uc.uc_flags); put_user_ex(0, &frame->uc.uc_flags);
......
...@@ -118,7 +118,6 @@ extern const char * const x86_bug_flags[NBUGINTS*32]; ...@@ -118,7 +118,6 @@ extern const char * const x86_bug_flags[NBUGINTS*32];
set_bit(bit, (unsigned long *)cpu_caps_set); \ set_bit(bit, (unsigned long *)cpu_caps_set); \
} while (0) } while (0)
#define cpu_has_xsave boot_cpu_has(X86_FEATURE_XSAVE)
#define cpu_has_xsaves boot_cpu_has(X86_FEATURE_XSAVES) #define cpu_has_xsaves boot_cpu_has(X86_FEATURE_XSAVES)
/* /*
* Do not add any more of those clumsy macros - use static_cpu_has() for * Do not add any more of those clumsy macros - use static_cpu_has() for
......
...@@ -68,7 +68,7 @@ int xfpregs_set(struct task_struct *target, const struct user_regset *regset, ...@@ -68,7 +68,7 @@ int xfpregs_set(struct task_struct *target, const struct user_regset *regset,
* update the header bits in the xsave header, indicating the * update the header bits in the xsave header, indicating the
* presence of FP and SSE state. * presence of FP and SSE state.
*/ */
if (cpu_has_xsave) if (boot_cpu_has(X86_FEATURE_XSAVE))
fpu->state.xsave.header.xfeatures |= XFEATURE_MASK_FPSSE; fpu->state.xsave.header.xfeatures |= XFEATURE_MASK_FPSSE;
return ret; return ret;
...@@ -82,7 +82,7 @@ int xstateregs_get(struct task_struct *target, const struct user_regset *regset, ...@@ -82,7 +82,7 @@ int xstateregs_get(struct task_struct *target, const struct user_regset *regset,
struct xregs_state *xsave; struct xregs_state *xsave;
int ret; int ret;
if (!cpu_has_xsave) if (!boot_cpu_has(X86_FEATURE_XSAVE))
return -ENODEV; return -ENODEV;
fpu__activate_fpstate_read(fpu); fpu__activate_fpstate_read(fpu);
...@@ -111,7 +111,7 @@ int xstateregs_set(struct task_struct *target, const struct user_regset *regset, ...@@ -111,7 +111,7 @@ int xstateregs_set(struct task_struct *target, const struct user_regset *regset,
struct xregs_state *xsave; struct xregs_state *xsave;
int ret; int ret;
if (!cpu_has_xsave) if (!boot_cpu_has(X86_FEATURE_XSAVE))
return -ENODEV; return -ENODEV;
fpu__activate_fpstate_write(fpu); fpu__activate_fpstate_write(fpu);
...@@ -328,7 +328,7 @@ int fpregs_set(struct task_struct *target, const struct user_regset *regset, ...@@ -328,7 +328,7 @@ int fpregs_set(struct task_struct *target, const struct user_regset *regset,
* update the header bit in the xsave header, indicating the * update the header bit in the xsave header, indicating the
* presence of FP. * presence of FP.
*/ */
if (cpu_has_xsave) if (boot_cpu_has(X86_FEATURE_XSAVE))
fpu->state.xsave.header.xfeatures |= XFEATURE_MASK_FP; fpu->state.xsave.header.xfeatures |= XFEATURE_MASK_FP;
return ret; return ret;
} }
......
...@@ -190,7 +190,7 @@ void fpstate_sanitize_xstate(struct fpu *fpu) ...@@ -190,7 +190,7 @@ void fpstate_sanitize_xstate(struct fpu *fpu)
*/ */
void fpu__init_cpu_xstate(void) void fpu__init_cpu_xstate(void)
{ {
if (!cpu_has_xsave || !xfeatures_mask) if (!boot_cpu_has(X86_FEATURE_XSAVE) || !xfeatures_mask)
return; return;
cr4_set_bits(X86_CR4_OSXSAVE); cr4_set_bits(X86_CR4_OSXSAVE);
...@@ -316,7 +316,7 @@ static void __init setup_init_fpu_buf(void) ...@@ -316,7 +316,7 @@ static void __init setup_init_fpu_buf(void)
WARN_ON_FPU(!on_boot_cpu); WARN_ON_FPU(!on_boot_cpu);
on_boot_cpu = 0; on_boot_cpu = 0;
if (!cpu_has_xsave) if (!boot_cpu_has(X86_FEATURE_XSAVE))
return; return;
setup_xstate_features(); setup_xstate_features();
...@@ -630,7 +630,7 @@ void __init fpu__init_system_xstate(void) ...@@ -630,7 +630,7 @@ void __init fpu__init_system_xstate(void)
WARN_ON_FPU(!on_boot_cpu); WARN_ON_FPU(!on_boot_cpu);
on_boot_cpu = 0; on_boot_cpu = 0;
if (!cpu_has_xsave) { if (!boot_cpu_has(X86_FEATURE_XSAVE)) {
pr_info("x86/fpu: Legacy x87 FPU detected.\n"); pr_info("x86/fpu: Legacy x87 FPU detected.\n");
return; return;
} }
...@@ -678,7 +678,7 @@ void fpu__resume_cpu(void) ...@@ -678,7 +678,7 @@ void fpu__resume_cpu(void)
/* /*
* Restore XCR0 on xsave capable CPUs: * Restore XCR0 on xsave capable CPUs:
*/ */
if (cpu_has_xsave) if (boot_cpu_has(X86_FEATURE_XSAVE))
xsetbv(XCR_XFEATURE_ENABLED_MASK, xfeatures_mask); xsetbv(XCR_XFEATURE_ENABLED_MASK, xfeatures_mask);
} }
......
...@@ -391,7 +391,7 @@ static int __setup_rt_frame(int sig, struct ksignal *ksig, ...@@ -391,7 +391,7 @@ static int __setup_rt_frame(int sig, struct ksignal *ksig,
put_user_ex(&frame->uc, &frame->puc); put_user_ex(&frame->uc, &frame->puc);
/* Create the ucontext. */ /* Create the ucontext. */
if (cpu_has_xsave) if (boot_cpu_has(X86_FEATURE_XSAVE))
put_user_ex(UC_FP_XSTATE, &frame->uc.uc_flags); put_user_ex(UC_FP_XSTATE, &frame->uc.uc_flags);
else else
put_user_ex(0, &frame->uc.uc_flags); put_user_ex(0, &frame->uc.uc_flags);
...@@ -442,7 +442,7 @@ static unsigned long frame_uc_flags(struct pt_regs *regs) ...@@ -442,7 +442,7 @@ static unsigned long frame_uc_flags(struct pt_regs *regs)
{ {
unsigned long flags; unsigned long flags;
if (cpu_has_xsave) if (boot_cpu_has(X86_FEATURE_XSAVE))
flags = UC_FP_XSTATE | UC_SIGCONTEXT_SS; flags = UC_FP_XSTATE | UC_SIGCONTEXT_SS;
else else
flags = UC_SIGCONTEXT_SS; flags = UC_SIGCONTEXT_SS;
......
...@@ -75,7 +75,7 @@ int kvm_update_cpuid(struct kvm_vcpu *vcpu) ...@@ -75,7 +75,7 @@ int kvm_update_cpuid(struct kvm_vcpu *vcpu)
return 0; return 0;
/* Update OSXSAVE bit */ /* Update OSXSAVE bit */
if (cpu_has_xsave && best->function == 0x1) { if (boot_cpu_has(X86_FEATURE_XSAVE) && best->function == 0x1) {
best->ecx &= ~F(OSXSAVE); best->ecx &= ~F(OSXSAVE);
if (kvm_read_cr4_bits(vcpu, X86_CR4_OSXSAVE)) if (kvm_read_cr4_bits(vcpu, X86_CR4_OSXSAVE))
best->ecx |= F(OSXSAVE); best->ecx |= F(OSXSAVE);
......
...@@ -2612,7 +2612,7 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext) ...@@ -2612,7 +2612,7 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
r = KVM_MAX_MCE_BANKS; r = KVM_MAX_MCE_BANKS;
break; break;
case KVM_CAP_XCRS: case KVM_CAP_XCRS:
r = cpu_has_xsave; r = boot_cpu_has(X86_FEATURE_XSAVE);
break; break;
case KVM_CAP_TSC_CONTROL: case KVM_CAP_TSC_CONTROL:
r = kvm_has_tsc_control; r = kvm_has_tsc_control;
...@@ -3122,7 +3122,7 @@ static void load_xsave(struct kvm_vcpu *vcpu, u8 *src) ...@@ -3122,7 +3122,7 @@ static void load_xsave(struct kvm_vcpu *vcpu, u8 *src)
static void kvm_vcpu_ioctl_x86_get_xsave(struct kvm_vcpu *vcpu, static void kvm_vcpu_ioctl_x86_get_xsave(struct kvm_vcpu *vcpu,
struct kvm_xsave *guest_xsave) struct kvm_xsave *guest_xsave)
{ {
if (cpu_has_xsave) { if (boot_cpu_has(X86_FEATURE_XSAVE)) {
memset(guest_xsave, 0, sizeof(struct kvm_xsave)); memset(guest_xsave, 0, sizeof(struct kvm_xsave));
fill_xsave((u8 *) guest_xsave->region, vcpu); fill_xsave((u8 *) guest_xsave->region, vcpu);
} else { } else {
...@@ -3140,7 +3140,7 @@ static int kvm_vcpu_ioctl_x86_set_xsave(struct kvm_vcpu *vcpu, ...@@ -3140,7 +3140,7 @@ static int kvm_vcpu_ioctl_x86_set_xsave(struct kvm_vcpu *vcpu,
u64 xstate_bv = u64 xstate_bv =
*(u64 *)&guest_xsave->region[XSAVE_HDR_OFFSET / sizeof(u32)]; *(u64 *)&guest_xsave->region[XSAVE_HDR_OFFSET / sizeof(u32)];
if (cpu_has_xsave) { if (boot_cpu_has(X86_FEATURE_XSAVE)) {
/* /*
* Here we allow setting states that are not present in * Here we allow setting states that are not present in
* CPUID leaf 0xD, index 0, EDX:EAX. This is for compatibility * CPUID leaf 0xD, index 0, EDX:EAX. This is for compatibility
...@@ -3161,7 +3161,7 @@ static int kvm_vcpu_ioctl_x86_set_xsave(struct kvm_vcpu *vcpu, ...@@ -3161,7 +3161,7 @@ static int kvm_vcpu_ioctl_x86_set_xsave(struct kvm_vcpu *vcpu,
static void kvm_vcpu_ioctl_x86_get_xcrs(struct kvm_vcpu *vcpu, static void kvm_vcpu_ioctl_x86_get_xcrs(struct kvm_vcpu *vcpu,
struct kvm_xcrs *guest_xcrs) struct kvm_xcrs *guest_xcrs)
{ {
if (!cpu_has_xsave) { if (!boot_cpu_has(X86_FEATURE_XSAVE)) {
guest_xcrs->nr_xcrs = 0; guest_xcrs->nr_xcrs = 0;
return; return;
} }
...@@ -3177,7 +3177,7 @@ static int kvm_vcpu_ioctl_x86_set_xcrs(struct kvm_vcpu *vcpu, ...@@ -3177,7 +3177,7 @@ static int kvm_vcpu_ioctl_x86_set_xcrs(struct kvm_vcpu *vcpu,
{ {
int i, r = 0; int i, r = 0;
if (!cpu_has_xsave) if (!boot_cpu_has(X86_FEATURE_XSAVE))
return -EINVAL; return -EINVAL;
if (guest_xcrs->nr_xcrs > KVM_MAX_XCRS || guest_xcrs->flags) if (guest_xcrs->nr_xcrs > KVM_MAX_XCRS || guest_xcrs->flags)
...@@ -5866,7 +5866,7 @@ int kvm_arch_init(void *opaque) ...@@ -5866,7 +5866,7 @@ int kvm_arch_init(void *opaque)
perf_register_guest_info_callbacks(&kvm_guest_cbs); perf_register_guest_info_callbacks(&kvm_guest_cbs);
if (cpu_has_xsave) if (boot_cpu_has(X86_FEATURE_XSAVE))
host_xcr0 = xgetbv(XCR_XFEATURE_ENABLED_MASK); host_xcr0 = xgetbv(XCR_XFEATURE_ENABLED_MASK);
kvm_lapic_init(); kvm_lapic_init();
......
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