cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

fpu.h (1635B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef __ASM_SH_FPU_H
      3#define __ASM_SH_FPU_H
      4
      5#ifndef __ASSEMBLY__
      6
      7#include <asm/ptrace.h>
      8
      9struct task_struct;
     10
     11#ifdef CONFIG_SH_FPU
     12static inline void release_fpu(struct pt_regs *regs)
     13{
     14	regs->sr |= SR_FD;
     15}
     16
     17static inline void grab_fpu(struct pt_regs *regs)
     18{
     19	regs->sr &= ~SR_FD;
     20}
     21
     22extern void save_fpu(struct task_struct *__tsk);
     23extern void restore_fpu(struct task_struct *__tsk);
     24extern void fpu_state_restore(struct pt_regs *regs);
     25extern void __fpu_state_restore(void);
     26#else
     27#define save_fpu(tsk)			do { } while (0)
     28#define restore_fpu(tsk)		do { } while (0)
     29#define release_fpu(regs)		do { } while (0)
     30#define grab_fpu(regs)			do { } while (0)
     31#define fpu_state_restore(regs)		do { } while (0)
     32#define __fpu_state_restore(regs)	do { } while (0)
     33#endif
     34
     35struct user_regset;
     36
     37extern int do_fpu_inst(unsigned short, struct pt_regs *);
     38extern int init_fpu(struct task_struct *);
     39
     40static inline void __unlazy_fpu(struct task_struct *tsk, struct pt_regs *regs)
     41{
     42	if (task_thread_info(tsk)->status & TS_USEDFPU) {
     43		task_thread_info(tsk)->status &= ~TS_USEDFPU;
     44		save_fpu(tsk);
     45		release_fpu(regs);
     46	} else
     47		tsk->thread.fpu_counter = 0;
     48}
     49
     50static inline void unlazy_fpu(struct task_struct *tsk, struct pt_regs *regs)
     51{
     52	preempt_disable();
     53	__unlazy_fpu(tsk, regs);
     54	preempt_enable();
     55}
     56
     57static inline void clear_fpu(struct task_struct *tsk, struct pt_regs *regs)
     58{
     59	preempt_disable();
     60	if (task_thread_info(tsk)->status & TS_USEDFPU) {
     61		task_thread_info(tsk)->status &= ~TS_USEDFPU;
     62		release_fpu(regs);
     63	}
     64	preempt_enable();
     65}
     66
     67#endif /* __ASSEMBLY__ */
     68
     69#endif /* __ASM_SH_FPU_H */