Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

x86/fpu: Rename fxregs-related copy functions

The function names for fxsave/fxrstor operations are horribly named and
a permanent source of confusion.

Rename:
copy_fxregs_to_kernel() to fxsave()
copy_kernel_to_fxregs() to fxrstor()
copy_fxregs_to_user() to fxsave_to_user_sigframe()
copy_user_to_fxregs() to fxrstor_from_user_sigframe()

so it's clear what these are doing. All these functions are really low
level wrappers around the equally named instructions, so mapping to the
documentation is just natural.

While at it, replace the static_cpu_has(X86_FEATURE_FXSR) with
use_fxsr() to be consistent with the rest of the code.

No functional change.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Borislav Petkov <bp@suse.de>
Link: https://lkml.kernel.org/r/20210623121454.017863494@linutronix.de

authored by

Thomas Gleixner and committed by
Borislav Petkov
16dcf438 6b862ba1

+13 -21
+5 -13
arch/x86/include/asm/fpu/internal.h
··· 129 129 return user_insn(fnsave %[fx]; fwait, [fx] "=m" (*fx), "m" (*fx)); 130 130 } 131 131 132 - static inline int copy_fxregs_to_user(struct fxregs_state __user *fx) 132 + static inline int fxsave_to_user_sigframe(struct fxregs_state __user *fx) 133 133 { 134 134 if (IS_ENABLED(CONFIG_X86_32)) 135 135 return user_insn(fxsave %[fx], [fx] "=m" (*fx), "m" (*fx)); ··· 138 138 139 139 } 140 140 141 - static inline void copy_kernel_to_fxregs(struct fxregs_state *fx) 141 + static inline void fxrstor(struct fxregs_state *fx) 142 142 { 143 143 if (IS_ENABLED(CONFIG_X86_32)) 144 144 kernel_insn(fxrstor %[fx], "=m" (*fx), [fx] "m" (*fx)); ··· 146 146 kernel_insn(fxrstorq %[fx], "=m" (*fx), [fx] "m" (*fx)); 147 147 } 148 148 149 - static inline int copy_kernel_to_fxregs_err(struct fxregs_state *fx) 149 + static inline int fxrstor_safe(struct fxregs_state *fx) 150 150 { 151 151 if (IS_ENABLED(CONFIG_X86_32)) 152 152 return kernel_insn_err(fxrstor %[fx], "=m" (*fx), [fx] "m" (*fx)); ··· 154 154 return kernel_insn_err(fxrstorq %[fx], "=m" (*fx), [fx] "m" (*fx)); 155 155 } 156 156 157 - static inline int copy_user_to_fxregs(struct fxregs_state __user *fx) 157 + static inline int fxrstor_from_user_sigframe(struct fxregs_state __user *fx) 158 158 { 159 159 if (IS_ENABLED(CONFIG_X86_32)) 160 160 return user_insn(fxrstor %[fx], "=m" (*fx), [fx] "m" (*fx)); ··· 175 175 static inline int copy_user_to_fregs(struct fregs_state __user *fx) 176 176 { 177 177 return user_insn(frstor %[fx], "=m" (*fx), [fx] "m" (*fx)); 178 - } 179 - 180 - static inline void copy_fxregs_to_kernel(struct fpu *fpu) 181 - { 182 - if (IS_ENABLED(CONFIG_X86_32)) 183 - asm volatile( "fxsave %[fx]" : [fx] "=m" (fpu->state.fxsave)); 184 - else 185 - asm volatile("fxsaveq %[fx]" : [fx] "=m" (fpu->state.fxsave)); 186 178 } 187 179 188 180 static inline void fxsave(struct fxregs_state *fx) ··· 383 391 os_xrstor(&fpstate->xsave, mask); 384 392 } else { 385 393 if (use_fxsr()) 386 - copy_kernel_to_fxregs(&fpstate->fxsave); 394 + fxrstor(&fpstate->fxsave); 387 395 else 388 396 copy_kernel_to_fregs(&fpstate->fsave); 389 397 }
+3 -3
arch/x86/kernel/fpu/core.c
··· 107 107 } 108 108 109 109 if (likely(use_fxsr())) { 110 - copy_fxregs_to_kernel(fpu); 110 + fxsave(&fpu->state.fxsave); 111 111 return 1; 112 112 } 113 113 ··· 315 315 { 316 316 if (use_xsave()) 317 317 os_xrstor(&init_fpstate.xsave, features_mask); 318 - else if (static_cpu_has(X86_FEATURE_FXSR)) 319 - copy_kernel_to_fxregs(&init_fpstate.fxsave); 318 + else if (use_fxsr()) 319 + fxrstor(&init_fpstate.fxsave); 320 320 else 321 321 copy_kernel_to_fregs(&init_fpstate.fsave); 322 322
+5 -5
arch/x86/kernel/fpu/signal.c
··· 64 64 65 65 fpregs_lock(); 66 66 if (!test_thread_flag(TIF_NEED_FPU_LOAD)) 67 - copy_fxregs_to_kernel(&tsk->thread.fpu); 67 + fxsave(&tsk->thread.fpu.state.fxsave); 68 68 fpregs_unlock(); 69 69 70 70 convert_from_fxsr(&env, tsk); ··· 131 131 if (use_xsave()) 132 132 err = xsave_to_user_sigframe(buf); 133 133 else if (use_fxsr()) 134 - err = copy_fxregs_to_user((struct fxregs_state __user *) buf); 134 + err = fxsave_to_user_sigframe((struct fxregs_state __user *) buf); 135 135 else 136 136 err = copy_fregs_to_user((struct fregs_state __user *) buf); 137 137 ··· 259 259 if (fx_only) { 260 260 init_bv = xfeatures_mask_user() & ~XFEATURE_MASK_FPSSE; 261 261 262 - r = copy_user_to_fxregs(buf); 262 + r = fxrstor_from_user_sigframe(buf); 263 263 if (!r) 264 264 os_xrstor(&init_fpstate.xsave, init_bv); 265 265 return r; ··· 272 272 return r; 273 273 } 274 274 } else if (use_fxsr()) { 275 - return copy_user_to_fxregs(buf); 275 + return fxrstor_from_user_sigframe(buf); 276 276 } else 277 277 return copy_user_to_fregs(buf); 278 278 } ··· 458 458 os_xrstor(&init_fpstate.xsave, init_bv); 459 459 } 460 460 461 - ret = copy_kernel_to_fxregs_err(&fpu->state.fxsave); 461 + ret = fxrstor_safe(&fpu->state.fxsave); 462 462 } else { 463 463 ret = __copy_from_user(&fpu->state.fsave, buf_fx, state_size); 464 464 if (ret)