x86/fpu: Keep xfd_state in sync with MSR_IA32_XFD
[sfrench/cifs-2.6.git] / arch / x86 / kernel / fpu / xstate.h
index 3518fb26d06b021144a4f8c1427ad8ee620cb78d..19ca623ffa2ac77204d9ffa47208d867a5dbb8da 100644 (file)
@@ -148,20 +148,26 @@ static inline void xfd_validate_state(struct fpstate *fpstate, u64 mask, bool rs
 #endif
 
 #ifdef CONFIG_X86_64
+static inline void xfd_set_state(u64 xfd)
+{
+       wrmsrl(MSR_IA32_XFD, xfd);
+       __this_cpu_write(xfd_state, xfd);
+}
+
 static inline void xfd_update_state(struct fpstate *fpstate)
 {
        if (fpu_state_size_dynamic()) {
                u64 xfd = fpstate->xfd;
 
-               if (__this_cpu_read(xfd_state) != xfd) {
-                       wrmsrl(MSR_IA32_XFD, xfd);
-                       __this_cpu_write(xfd_state, xfd);
-               }
+               if (__this_cpu_read(xfd_state) != xfd)
+                       xfd_set_state(xfd);
        }
 }
 
 extern int __xfd_enable_feature(u64 which, struct fpu_guest *guest_fpu);
 #else
+static inline void xfd_set_state(u64 xfd) { }
+
 static inline void xfd_update_state(struct fpstate *fpstate) { }
 
 static inline int __xfd_enable_feature(u64 which, struct fpu_guest *guest_fpu) {