diff options
| -rw-r--r-- | arch/x86/include/asm/xsave.h | 28 |
1 files changed, 11 insertions, 17 deletions
diff --git a/arch/x86/include/asm/xsave.h b/arch/x86/include/asm/xsave.h index 5fa9770035dc..c9a6d68b8d62 100644 --- a/arch/x86/include/asm/xsave.h +++ b/arch/x86/include/asm/xsave.h | |||
| @@ -82,18 +82,15 @@ static inline int xsave_state_booting(struct xsave_struct *fx, u64 mask) | |||
| 82 | if (boot_cpu_has(X86_FEATURE_XSAVES)) | 82 | if (boot_cpu_has(X86_FEATURE_XSAVES)) |
| 83 | asm volatile("1:"XSAVES"\n\t" | 83 | asm volatile("1:"XSAVES"\n\t" |
| 84 | "2:\n\t" | 84 | "2:\n\t" |
| 85 | : : "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask) | 85 | xstate_fault |
| 86 | : "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask) | ||
| 86 | : "memory"); | 87 | : "memory"); |
| 87 | else | 88 | else |
| 88 | asm volatile("1:"XSAVE"\n\t" | 89 | asm volatile("1:"XSAVE"\n\t" |
| 89 | "2:\n\t" | 90 | "2:\n\t" |
| 90 | : : "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask) | 91 | xstate_fault |
| 92 | : "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask) | ||
| 91 | : "memory"); | 93 | : "memory"); |
| 92 | |||
| 93 | asm volatile(xstate_fault | ||
| 94 | : "0" (0) | ||
| 95 | : "memory"); | ||
| 96 | |||
| 97 | return err; | 94 | return err; |
| 98 | } | 95 | } |
| 99 | 96 | ||
| @@ -112,18 +109,15 @@ static inline int xrstor_state_booting(struct xsave_struct *fx, u64 mask) | |||
| 112 | if (boot_cpu_has(X86_FEATURE_XSAVES)) | 109 | if (boot_cpu_has(X86_FEATURE_XSAVES)) |
| 113 | asm volatile("1:"XRSTORS"\n\t" | 110 | asm volatile("1:"XRSTORS"\n\t" |
| 114 | "2:\n\t" | 111 | "2:\n\t" |
| 115 | : : "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask) | 112 | xstate_fault |
| 113 | : "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask) | ||
| 116 | : "memory"); | 114 | : "memory"); |
| 117 | else | 115 | else |
| 118 | asm volatile("1:"XRSTOR"\n\t" | 116 | asm volatile("1:"XRSTOR"\n\t" |
| 119 | "2:\n\t" | 117 | "2:\n\t" |
| 120 | : : "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask) | 118 | xstate_fault |
| 119 | : "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask) | ||
| 121 | : "memory"); | 120 | : "memory"); |
| 122 | |||
| 123 | asm volatile(xstate_fault | ||
| 124 | : "0" (0) | ||
| 125 | : "memory"); | ||
| 126 | |||
| 127 | return err; | 121 | return err; |
| 128 | } | 122 | } |
| 129 | 123 | ||
| @@ -149,9 +143,9 @@ static inline int xsave_state(struct xsave_struct *fx, u64 mask) | |||
| 149 | */ | 143 | */ |
| 150 | alternative_input_2( | 144 | alternative_input_2( |
| 151 | "1:"XSAVE, | 145 | "1:"XSAVE, |
| 152 | "1:"XSAVEOPT, | 146 | XSAVEOPT, |
| 153 | X86_FEATURE_XSAVEOPT, | 147 | X86_FEATURE_XSAVEOPT, |
| 154 | "1:"XSAVES, | 148 | XSAVES, |
| 155 | X86_FEATURE_XSAVES, | 149 | X86_FEATURE_XSAVES, |
| 156 | [fx] "D" (fx), "a" (lmask), "d" (hmask) : | 150 | [fx] "D" (fx), "a" (lmask), "d" (hmask) : |
| 157 | "memory"); | 151 | "memory"); |
| @@ -178,7 +172,7 @@ static inline int xrstor_state(struct xsave_struct *fx, u64 mask) | |||
| 178 | */ | 172 | */ |
| 179 | alternative_input( | 173 | alternative_input( |
| 180 | "1: " XRSTOR, | 174 | "1: " XRSTOR, |
| 181 | "1: " XRSTORS, | 175 | XRSTORS, |
| 182 | X86_FEATURE_XSAVES, | 176 | X86_FEATURE_XSAVES, |
| 183 | "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask) | 177 | "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask) |
| 184 | : "memory"); | 178 | : "memory"); |
