x86: x86 user_regset cleanup
This removes a bunch of dead code that is no longer needed now that the user_regset interfaces are being used for all these jobs. Signed-off-by: Roland McGrath <roland@redhat.com> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:

committed by
Ingo Molnar

parent
5a4646a4ef
commit
60b3b9af35
@@ -454,113 +454,26 @@ int restore_i387_ia32(struct _fpstate_ia32 __user *buf)
|
||||
return err;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_X86_32 || CONFIG_IA32_EMULATION */
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
|
||||
int get_fpregs(struct user_i387_struct __user *buf, struct task_struct *tsk)
|
||||
{
|
||||
return xfpregs_get(tsk, NULL, 0, sizeof(*buf), NULL, buf);
|
||||
}
|
||||
|
||||
int set_fpregs(struct task_struct *tsk, struct user_i387_struct __user *buf)
|
||||
{
|
||||
return xfpregs_set(tsk, NULL, 0, sizeof(*buf), NULL, buf);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
int get_fpregs(struct user_i387_struct __user *buf, struct task_struct *tsk)
|
||||
{
|
||||
return fpregs_get(tsk, NULL, 0, sizeof(*buf), NULL, buf);
|
||||
}
|
||||
|
||||
int set_fpregs(struct task_struct *tsk, struct user_i387_struct __user *buf)
|
||||
{
|
||||
return fpregs_set(tsk, NULL, 0, sizeof(*buf), NULL, buf);
|
||||
}
|
||||
|
||||
int get_fpxregs(struct user_fxsr_struct __user *buf, struct task_struct *tsk)
|
||||
{
|
||||
return xfpregs_get(tsk, NULL, 0, sizeof(*buf), NULL, buf);
|
||||
}
|
||||
|
||||
int set_fpxregs(struct task_struct *tsk, struct user_fxsr_struct __user *buf)
|
||||
{
|
||||
return xfpregs_get(tsk, NULL, 0, sizeof(*buf), NULL, buf);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* FPU state for core dumps.
|
||||
* This is only used for a.out dumps now.
|
||||
* It is declared generically using elf_fpregset_t (which is
|
||||
* struct user_i387_struct) but is in fact only used for 32-bit
|
||||
* dumps, so on 64-bit it is really struct user_i387_ia32_struct.
|
||||
*/
|
||||
|
||||
static inline void copy_fpu_fsave(struct task_struct *tsk,
|
||||
struct user_i387_struct *fpu)
|
||||
{
|
||||
memcpy(fpu, &tsk->thread.i387.fsave,
|
||||
sizeof(struct user_i387_struct));
|
||||
}
|
||||
|
||||
static inline void copy_fpu_fxsave(struct task_struct *tsk,
|
||||
struct user_i387_struct *fpu)
|
||||
{
|
||||
unsigned short *to;
|
||||
unsigned short *from;
|
||||
int i;
|
||||
|
||||
memcpy(fpu, &tsk->thread.i387.fxsave, 7 * sizeof(long));
|
||||
|
||||
to = (unsigned short *)&fpu->st_space[0];
|
||||
from = (unsigned short *)&tsk->thread.i387.fxsave.st_space[0];
|
||||
for (i = 0; i < 8; i++, to += 5, from += 8)
|
||||
memcpy(to, from, 5 * sizeof(unsigned short));
|
||||
}
|
||||
|
||||
int dump_fpu(struct pt_regs *regs, struct user_i387_struct *fpu)
|
||||
{
|
||||
int fpvalid;
|
||||
struct task_struct *tsk = current;
|
||||
|
||||
fpvalid = !!used_math();
|
||||
if (fpvalid) {
|
||||
unlazy_fpu(tsk);
|
||||
if (cpu_has_fxsr) {
|
||||
copy_fpu_fxsave(tsk, fpu);
|
||||
} else {
|
||||
copy_fpu_fsave(tsk, fpu);
|
||||
}
|
||||
}
|
||||
if (fpvalid)
|
||||
fpvalid = !fpregs_get(tsk, NULL,
|
||||
0, sizeof(struct user_i387_ia32_struct),
|
||||
fpu, NULL);
|
||||
|
||||
return fpvalid;
|
||||
}
|
||||
EXPORT_SYMBOL(dump_fpu);
|
||||
|
||||
int dump_task_fpu(struct task_struct *tsk, struct user_i387_struct *fpu)
|
||||
{
|
||||
int fpvalid = !!tsk_used_math(tsk);
|
||||
|
||||
if (fpvalid) {
|
||||
if (tsk == current)
|
||||
unlazy_fpu(tsk);
|
||||
if (cpu_has_fxsr)
|
||||
copy_fpu_fxsave(tsk, fpu);
|
||||
else
|
||||
copy_fpu_fsave(tsk, fpu);
|
||||
}
|
||||
return fpvalid;
|
||||
}
|
||||
|
||||
int dump_task_extended_fpu(struct task_struct *tsk,
|
||||
struct user32_fxsr_struct *fpu)
|
||||
{
|
||||
int fpvalid = tsk_used_math(tsk) && cpu_has_fxsr;
|
||||
|
||||
if (fpvalid) {
|
||||
if (tsk == current)
|
||||
unlazy_fpu(tsk);
|
||||
memcpy(fpu, &tsk->thread.i387.fxsave, sizeof(*fpu));
|
||||
}
|
||||
return fpvalid;
|
||||
}
|
||||
#endif /* CONFIG_X86_32 || CONFIG_IA32_EMULATION */
|
||||
|
@@ -571,22 +571,6 @@ void dump_thread(struct pt_regs * regs, struct user * dump)
|
||||
}
|
||||
EXPORT_SYMBOL(dump_thread);
|
||||
|
||||
/*
|
||||
* Capture the user space registers if the task is not running (in user space)
|
||||
*/
|
||||
int dump_task_regs(struct task_struct *tsk, elf_gregset_t *regs)
|
||||
{
|
||||
struct pt_regs ptregs = *task_pt_regs(tsk);
|
||||
ptregs.cs &= 0xffff;
|
||||
ptregs.ds &= 0xffff;
|
||||
ptregs.es &= 0xffff;
|
||||
ptregs.ss &= 0xffff;
|
||||
|
||||
elf_core_copy_regs(regs, &ptregs);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SECCOMP
|
||||
static void hard_disable_TSC(void)
|
||||
{
|
||||
|
@@ -544,24 +544,6 @@ out:
|
||||
*/
|
||||
#define loaddebug(thread, r) set_debugreg(thread->debugreg ## r, r)
|
||||
|
||||
/*
|
||||
* Capture the user space registers if the task is not running (in user space)
|
||||
*/
|
||||
int dump_task_regs(struct task_struct *tsk, elf_gregset_t *regs)
|
||||
{
|
||||
struct pt_regs *pp, ptregs;
|
||||
|
||||
pp = task_pt_regs(tsk);
|
||||
|
||||
ptregs = *pp;
|
||||
ptregs.cs &= 0xffff;
|
||||
ptregs.ss &= 0xffff;
|
||||
|
||||
elf_core_copy_regs(regs, &ptregs);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline void __switch_to_xtra(struct task_struct *prev_p,
|
||||
struct task_struct *next_p,
|
||||
struct tss_struct *tss)
|
||||
@@ -929,4 +911,3 @@ unsigned long arch_randomize_brk(struct mm_struct *mm)
|
||||
unsigned long range_end = mm->brk + 0x02000000;
|
||||
return randomize_range(mm->brk, range_end, 0) ? : mm->brk;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user