Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 181117
b: refs/heads/master
c: 3ef2932
h: refs/heads/master
i:
  181115: 2be44b9
v: v3
  • Loading branch information
Paul Mundt committed Jan 19, 2010
1 parent 0bb2b66 commit 93e506a
Show file tree
Hide file tree
Showing 9 changed files with 44 additions and 42 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: cb6d04468d16de5a6161167ec7e76a43be540a80
refs/heads/master: 3ef2932b8c1fc89408ef1fd4b1e1c2caabc7f07d
6 changes: 6 additions & 0 deletions trunk/arch/sh/include/asm/processor.h
Original file line number Diff line number Diff line change
Expand Up @@ -98,9 +98,15 @@ extern struct sh_cpuinfo cpu_data[];

/* Forward decl */
struct seq_operations;
struct task_struct;

extern struct pt_regs fake_swapper_regs;

/* arch/sh/kernel/process.c */
extern unsigned int xstate_size;
extern void free_thread_xstate(struct task_struct *);
extern struct kmem_cache *task_xstate_cachep;

/* arch/sh/mm/init.c */
extern unsigned int mem_init_done;

Expand Down
4 changes: 0 additions & 4 deletions trunk/arch/sh/include/asm/processor_32.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,10 +96,6 @@ union thread_xstate {
struct sh_fpu_soft_struct softfpu;
};

extern unsigned int xstate_size;
extern void free_thread_xstate(struct task_struct *);
extern struct kmem_cache *task_xstate_cachep;

struct thread_struct {
/* Saved registers when thread is descheduled */
unsigned long sp;
Expand Down
18 changes: 9 additions & 9 deletions trunk/arch/sh/include/asm/processor_64.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,20 +87,21 @@ struct sh_fpu_hard_struct {
/* long status; * software status information */
};

#if 0
/* Dummy fpu emulator */
struct sh_fpu_soft_struct {
unsigned long long fp_regs[32];
unsigned long fp_regs[64];
unsigned int fpscr;
unsigned char lookahead;
unsigned long entry_pc;
};
#endif

union sh_fpu_union {
struct sh_fpu_hard_struct hard;
/* 'hard' itself only produces 32 bit alignment, yet we need
to access it using 64 bit load/store as well. */
union thread_xstate {
struct sh_fpu_hard_struct hardfpu;
struct sh_fpu_soft_struct softfpu;
/*
* The structure definitions only produce 32 bit alignment, yet we need
* to access them using 64 bit load/store as well.
*/
unsigned long long alignment_dummy;
};

Expand All @@ -122,7 +123,7 @@ struct thread_struct {
/* Hardware debugging registers may come here */

/* floating point info */
union sh_fpu_union fpu;
union thread_xstate *xstate;
};

#define INIT_MMAP \
Expand All @@ -137,7 +138,6 @@ struct thread_struct {
.trap_no = 0, \
.error_code = 0, \
.address = 0, \
.fpu = { { { 0, } }, } \
}

/*
Expand Down
12 changes: 6 additions & 6 deletions trunk/arch/sh/kernel/cpu/sh5/fpu.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@
#define sNAN64 0xFFFFFFFFFFFFFFFFULL
#define sNAN32 0xFFFFFFFFUL

static union sh_fpu_union init_fpuregs = {
.hard = {
static union thread_xstate init_fpuregs = {
.hardfpu = {
.fp_regs = { [0 ... 63] = sNAN32 },
.fpscr = FPSCR_INIT
}
Expand Down Expand Up @@ -72,7 +72,7 @@ void save_fpu(struct task_struct *tsk)
"fgetscr fr63\n\t"
"fst.s %0, (32*8), fr63\n\t"
: /* no output */
: "r" (&tsk->thread.fpu.hard)
: "r" (&tsk->thread.xstate->hardfpu)
: "memory");
}

Expand Down Expand Up @@ -121,7 +121,7 @@ fpload(struct sh_fpu_hard_struct *fpregs)

void fpinit(struct sh_fpu_hard_struct *fpregs)
{
*fpregs = init_fpuregs.hard;
*fpregs = init_fpuregs.hardfpu;
}

asmlinkage void
Expand Down Expand Up @@ -157,10 +157,10 @@ do_fpu_state_restore(unsigned long ex, struct pt_regs *regs)

last_task_used_math = current;
if (used_math()) {
fpload(&current->thread.fpu.hard);
fpload(&current->thread.xstate->hardfpu);
} else {
/* First time FPU user. */
fpload(&init_fpuregs.hard);
fpload(&init_fpuregs.hardfpu);
set_used_math();
}
disable_fpu();
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/sh/kernel/process_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -410,7 +410,7 @@ int dump_fpu(struct pt_regs *regs, elf_fpregset_t *fpu)
regs->sr |= SR_FD;
}

memcpy(fpu, &tsk->thread.fpu.hard, sizeof(*fpu));
memcpy(fpu, &tsk->thread.xstate->hardfpu, sizeof(*fpu));
}

return fpvalid;
Expand Down
10 changes: 5 additions & 5 deletions trunk/arch/sh/kernel/ptrace_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ get_fpu_long(struct task_struct *task, unsigned long addr)
regs->sr |= SR_FD;
}

tmp = ((long *)&task->thread.fpu)[addr / sizeof(unsigned long)];
tmp = ((long *)task->thread.xstate)[addr / sizeof(unsigned long)];
return tmp;
}

Expand All @@ -114,7 +114,7 @@ put_fpu_long(struct task_struct *task, unsigned long addr, unsigned long data)
regs = (struct pt_regs*)((unsigned char *)task + THREAD_SIZE) - 1;

if (!tsk_used_math(task)) {
fpinit(&task->thread.fpu.hard);
fpinit(&task->thread.xstate->hardfpu);
set_stopped_child_used_math(task);
} else if (last_task_used_math == task) {
enable_fpu();
Expand All @@ -124,7 +124,7 @@ put_fpu_long(struct task_struct *task, unsigned long addr, unsigned long data)
regs->sr |= SR_FD;
}

((long *)&task->thread.fpu)[addr / sizeof(unsigned long)] = data;
((long *)task->thread.xstate)[addr / sizeof(unsigned long)] = data;
return 0;
}

Expand Down Expand Up @@ -222,7 +222,7 @@ int fpregs_get(struct task_struct *target,
return ret;

return user_regset_copyout(&pos, &count, &kbuf, &ubuf,
&target->thread.fpu.hard, 0, -1);
&target->thread.xstate->hardfpu, 0, -1);
}

static int fpregs_set(struct task_struct *target,
Expand All @@ -239,7 +239,7 @@ static int fpregs_set(struct task_struct *target,
set_stopped_child_used_math(target);

return user_regset_copyin(&pos, &count, &kbuf, &ubuf,
&target->thread.fpu.hard, 0, -1);
&target->thread.xstate->hardfpu, 0, -1);
}

static int fpregs_active(struct task_struct *target,
Expand Down
4 changes: 2 additions & 2 deletions trunk/arch/sh/kernel/signal_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@ restore_sigcontext_fpu(struct pt_regs *regs, struct sigcontext __user *sc)
regs->sr |= SR_FD;
}

err |= __copy_from_user(&current->thread.fpu.hard, &sc->sc_fpregs[0],
err |= __copy_from_user(&current->thread.xstate->hardfpu, &sc->sc_fpregs[0],
(sizeof(long long) * 32) + (sizeof(int) * 1));

return err;
Expand All @@ -320,7 +320,7 @@ setup_sigcontext_fpu(struct pt_regs *regs, struct sigcontext __user *sc)
regs->sr |= SR_FD;
}

err |= __copy_to_user(&sc->sc_fpregs[0], &current->thread.fpu.hard,
err |= __copy_to_user(&sc->sc_fpregs[0], &current->thread.xstate->hardfpu,
(sizeof(long long) * 32) + (sizeof(int) * 1));
clear_used_math();

Expand Down
28 changes: 14 additions & 14 deletions trunk/arch/sh/kernel/traps_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -611,19 +611,19 @@ static int misaligned_fpu_load(struct pt_regs *regs,

switch (width_shift) {
case 2:
current->thread.fpu.hard.fp_regs[destreg] = buflo;
current->thread.xstate->hardfpu.fp_regs[destreg] = buflo;
break;
case 3:
if (do_paired_load) {
current->thread.fpu.hard.fp_regs[destreg] = buflo;
current->thread.fpu.hard.fp_regs[destreg+1] = bufhi;
current->thread.xstate->hardfpu.fp_regs[destreg] = buflo;
current->thread.xstate->hardfpu.fp_regs[destreg+1] = bufhi;
} else {
#if defined(CONFIG_CPU_LITTLE_ENDIAN)
current->thread.fpu.hard.fp_regs[destreg] = bufhi;
current->thread.fpu.hard.fp_regs[destreg+1] = buflo;
current->thread.xstate->hardfpu.fp_regs[destreg] = bufhi;
current->thread.xstate->hardfpu.fp_regs[destreg+1] = buflo;
#else
current->thread.fpu.hard.fp_regs[destreg] = buflo;
current->thread.fpu.hard.fp_regs[destreg+1] = bufhi;
current->thread.xstate->hardfpu.fp_regs[destreg] = buflo;
current->thread.xstate->hardfpu.fp_regs[destreg+1] = bufhi;
#endif
}
break;
Expand Down Expand Up @@ -681,19 +681,19 @@ static int misaligned_fpu_store(struct pt_regs *regs,

switch (width_shift) {
case 2:
buflo = current->thread.fpu.hard.fp_regs[srcreg];
buflo = current->thread.xstate->hardfpu.fp_regs[srcreg];
break;
case 3:
if (do_paired_load) {
buflo = current->thread.fpu.hard.fp_regs[srcreg];
bufhi = current->thread.fpu.hard.fp_regs[srcreg+1];
buflo = current->thread.xstate->hardfpu.fp_regs[srcreg];
bufhi = current->thread.xstate->hardfpu.fp_regs[srcreg+1];
} else {
#if defined(CONFIG_CPU_LITTLE_ENDIAN)
bufhi = current->thread.fpu.hard.fp_regs[srcreg];
buflo = current->thread.fpu.hard.fp_regs[srcreg+1];
bufhi = current->thread.xstate->hardfpu.fp_regs[srcreg];
buflo = current->thread.xstate->hardfpu.fp_regs[srcreg+1];
#else
buflo = current->thread.fpu.hard.fp_regs[srcreg];
bufhi = current->thread.fpu.hard.fp_regs[srcreg+1];
buflo = current->thread.xstate->hardfpu.fp_regs[srcreg];
bufhi = current->thread.xstate->hardfpu.fp_regs[srcreg+1];
#endif
}
break;
Expand Down

0 comments on commit 93e506a

Please sign in to comment.