Lines Matching refs:fpu
37 DEFINE_PER_CPU(struct fpu *, fpu_fpregs_owner_ctx);
76 return !current->thread.fpu.fpregs_active && (read_cr0() & X86_CR0_TS); in interrupted_kernel_fpu_idle()
110 struct fpu *fpu = ¤t->thread.fpu; in __kernel_fpu_begin() local
116 if (fpu->fpregs_active) { in __kernel_fpu_begin()
117 copy_fpregs_to_fpstate(fpu); in __kernel_fpu_begin()
127 struct fpu *fpu = ¤t->thread.fpu; in __kernel_fpu_end() local
129 if (fpu->fpregs_active) in __kernel_fpu_end()
130 copy_kernel_to_fpregs(&fpu->state); in __kernel_fpu_end()
186 void fpu__save(struct fpu *fpu) in fpu__save() argument
188 WARN_ON_FPU(fpu != ¤t->thread.fpu); in fpu__save()
191 if (fpu->fpregs_active) { in fpu__save()
192 if (!copy_fpregs_to_fpstate(fpu)) in fpu__save()
193 fpregs_deactivate(fpu); in fpu__save()
232 static void fpu_copy(struct fpu *dst_fpu, struct fpu *src_fpu) in fpu_copy()
234 WARN_ON_FPU(src_fpu != ¤t->thread.fpu); in fpu_copy()
267 int fpu__copy(struct fpu *dst_fpu, struct fpu *src_fpu) in fpu__copy()
283 void fpu__activate_curr(struct fpu *fpu) in fpu__activate_curr() argument
285 WARN_ON_FPU(fpu != ¤t->thread.fpu); in fpu__activate_curr()
287 if (!fpu->fpstate_active) { in fpu__activate_curr()
288 fpstate_init(&fpu->state); in fpu__activate_curr()
291 fpu->fpstate_active = 1; in fpu__activate_curr()
304 void fpu__activate_fpstate_read(struct fpu *fpu) in fpu__activate_fpstate_read() argument
310 if (fpu->fpregs_active) { in fpu__activate_fpstate_read()
311 fpu__save(fpu); in fpu__activate_fpstate_read()
313 if (!fpu->fpstate_active) { in fpu__activate_fpstate_read()
314 fpstate_init(&fpu->state); in fpu__activate_fpstate_read()
317 fpu->fpstate_active = 1; in fpu__activate_fpstate_read()
335 void fpu__activate_fpstate_write(struct fpu *fpu) in fpu__activate_fpstate_write() argument
341 WARN_ON_FPU(fpu == ¤t->thread.fpu); in fpu__activate_fpstate_write()
343 if (fpu->fpstate_active) { in fpu__activate_fpstate_write()
345 fpu->last_cpu = -1; in fpu__activate_fpstate_write()
347 fpstate_init(&fpu->state); in fpu__activate_fpstate_write()
350 fpu->fpstate_active = 1; in fpu__activate_fpstate_write()
364 void fpu__restore(struct fpu *fpu) in fpu__restore() argument
366 fpu__activate_curr(fpu); in fpu__restore()
370 fpregs_activate(fpu); in fpu__restore()
371 copy_kernel_to_fpregs(&fpu->state); in fpu__restore()
372 fpu->counter++; in fpu__restore()
386 void fpu__drop(struct fpu *fpu) in fpu__drop() argument
389 fpu->counter = 0; in fpu__drop()
391 if (fpu->fpregs_active) { in fpu__drop()
396 fpregs_deactivate(fpu); in fpu__drop()
399 fpu->fpstate_active = 0; in fpu__drop()
422 void fpu__clear(struct fpu *fpu) in fpu__clear() argument
424 WARN_ON_FPU(fpu != ¤t->thread.fpu); /* Almost certainly an anomaly */ in fpu__clear()
428 fpu__drop(fpu); in fpu__clear()
430 if (!fpu->fpstate_active) { in fpu__clear()
431 fpu__activate_curr(fpu); in fpu__clear()
442 static inline unsigned short get_fpu_cwd(struct fpu *fpu) in get_fpu_cwd() argument
445 return fpu->state.fxsave.cwd; in get_fpu_cwd()
447 return (unsigned short)fpu->state.fsave.cwd; in get_fpu_cwd()
451 static inline unsigned short get_fpu_swd(struct fpu *fpu) in get_fpu_swd() argument
454 return fpu->state.fxsave.swd; in get_fpu_swd()
456 return (unsigned short)fpu->state.fsave.swd; in get_fpu_swd()
460 static inline unsigned short get_fpu_mxcsr(struct fpu *fpu) in get_fpu_mxcsr() argument
463 return fpu->state.fxsave.mxcsr; in get_fpu_mxcsr()
469 int fpu__exception_code(struct fpu *fpu, int trap_nr) in fpu__exception_code() argument
485 cwd = get_fpu_cwd(fpu); in fpu__exception_code()
486 swd = get_fpu_swd(fpu); in fpu__exception_code()
496 unsigned short mxcsr = get_fpu_mxcsr(fpu); in fpu__exception_code()