Re: [PATCH] powerpc: remove fpscr use from [kvm_]cvt_{fd,df}

2010-08-24 Thread Michael Neuling
In message 1282699836.22370.566.ca...@pasglop you wrote:
 On Tue, 2010-08-24 at 15:15 +1000, Michael Neuling wrote:
Do some 32 bit processors need this? 

In 32 bit before the merge, we use to have code that did:

  #if defined(CONFIG_4xx) || defined(CONFIG_E500)
   #define cvt_fd without save/restore fpscr
  #else
   #define cvt_fd with save/restore fpscr
  #end if

Kumar; does this ring any bells?
   
   I don't see anything in the various 440 docs I have at hand that would
   hint at lfd/stfs adffecting FPSCR.
  
  The way the ifdefs are, it's the other way around.  4xx procs don't need
  to save/restore fpscr and others do.
 
 Right, my bad. In any case, Paulus reckons it's all his mistake and we
 really never need to save/restore fpscr.

ACK :-P

Mikey
--
To unsubscribe from this list: send the line unsubscribe kvm-ppc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] powerpc: remove fpscr use from [kvm_]cvt_{fd,df}

2010-08-23 Thread Benjamin Herrenschmidt

 The way the ifdefs are, it's the other way around.  4xx procs don't need
 to save/restore fpscr and others do.

Hrm, oh well, 601 manual says FPSCR is unaffected too :-)

Cheers,
Ben. 

--
To unsubscribe from this list: send the line unsubscribe kvm-ppc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] powerpc: remove fpscr use from [kvm_]cvt_{fd,df}

2010-08-23 Thread Kumar Gala

On Aug 22, 2010, at 7:23 PM, Michael Neuling wrote:

 Neither lfs nor stfs touch the fpscr, so remove the restore/save of it
 around them.
 
 Do some 32 bit processors need this? 
 
 In 32 bit before the merge, we use to have code that did:
 
  #if defined(CONFIG_4xx) || defined(CONFIG_E500)
   #define cvt_fd without save/restore fpscr
  #else
   #define cvt_fd with save/restore fpscr
  #end if
 
 Kumar; does this ring any bells?
 
 (The addition of this predates even bitkeeper)
 
 Mikey

Not really.  However if the ifdef is as you say that seems wrong to me.  We 
should be using CONFIG_PPC_FPU or !CONFIG_PPC_FPU.  As both 4xx and E500 have 
variants w/FPUs.

- k--
To unsubscribe from this list: send the line unsubscribe kvm-ppc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] powerpc: remove fpscr use from [kvm_]cvt_{fd,df}

2010-08-23 Thread Michael Neuling
  Neither lfs nor stfs touch the fpscr, so remove the restore/save of =
 it
  around them.
 =20
  Do some 32 bit processors need this?=20
 =20
  In 32 bit before the merge, we use to have code that did:
 =20
   #if defined(CONFIG_4xx) || defined(CONFIG_E500)
#define cvt_fd without save/restore fpscr
   #else
#define cvt_fd with save/restore fpscr
   #end if
 =20
  Kumar; does this ring any bells?
 =20
  (The addition of this predates even bitkeeper)
 =20
  Mikey
 
 Not really.  However if the ifdef is as you say that seems wrong to
 me.  We should be using CONFIG_PPC_FPU or !CONFIG_PPC_FPU.  As both
 4xx and E500 have variants w/FPUs.

It actually got changed to CONFIG_PPC_FPU, then dwg merged it with some
other versions that were around.  

Mikey
--
To unsubscribe from this list: send the line unsubscribe kvm-ppc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] powerpc: remove fpscr use from [kvm_]cvt_{fd,df}

2010-08-22 Thread Michael Neuling
 Neither lfs nor stfs touch the fpscr, so remove the restore/save of it
 around them.

Do some 32 bit processors need this? 

In 32 bit before the merge, we use to have code that did:

  #if defined(CONFIG_4xx) || defined(CONFIG_E500)
   #define cvt_fd without save/restore fpscr
  #else
   #define cvt_fd with save/restore fpscr
  #end if

Kumar; does this ring any bells?

(The addition of this predates even bitkeeper)

Mikey
 
 Signed-off-by: Andreas Schwab sch...@linux-m68k.org
 ---
  arch/powerpc/include/asm/kvm_fpu.h   |4 +-
  arch/powerpc/include/asm/system.h|4 +-
  arch/powerpc/kernel/align.c  |4 +-
  arch/powerpc/kernel/fpu.S|   10 ---
  arch/powerpc/kvm/book3s_paired_singles.c |   44 +---
-
  arch/powerpc/kvm/fpu.S   |8 -
  6 files changed, 26 insertions(+), 48 deletions(-)
 
 diff --git a/arch/powerpc/include/asm/kvm_fpu.h b/arch/powerpc/include/asm/kv
m_fpu.h
 index c3d4f05..92daae1 100644
 --- a/arch/powerpc/include/asm/kvm_fpu.h
 +++ b/arch/powerpc/include/asm/kvm_fpu.h
 @@ -82,7 +82,7 @@ FPD_THREE_IN(fmadd)
  FPD_THREE_IN(fnmsub)
  FPD_THREE_IN(fnmadd)
  
 -extern void kvm_cvt_fd(u32 *from, u64 *to, u64 *fpscr);
 -extern void kvm_cvt_df(u64 *from, u32 *to, u64 *fpscr);
 +extern void kvm_cvt_fd(u32 *from, u64 *to);
 +extern void kvm_cvt_df(u64 *from, u32 *to);
  
  #endif
 diff --git a/arch/powerpc/include/asm/system.h b/arch/powerpc/include/asm/sys
tem.h
 index 6c294ac..0b3fe78 100644
 --- a/arch/powerpc/include/asm/system.h
 +++ b/arch/powerpc/include/asm/system.h
 @@ -154,8 +154,8 @@ extern void enable_kernel_spe(void);
  extern void giveup_spe(struct task_struct *);
  extern void load_up_spe(struct task_struct *);
  extern int fix_alignment(struct pt_regs *);
 -extern void cvt_fd(float *from, double *to, struct thread_struct *thread);
 -extern void cvt_df(double *from, float *to, struct thread_struct *thread);
 +extern void cvt_fd(float *from, double *to);
 +extern void cvt_df(double *from, float *to);
  
  #ifndef CONFIG_SMP
  extern void discard_lazy_cpu_state(void);
 diff --git a/arch/powerpc/kernel/align.c b/arch/powerpc/kernel/align.c
 index b876e98..8184ee9 100644
 --- a/arch/powerpc/kernel/align.c
 +++ b/arch/powerpc/kernel/align.c
 @@ -889,7 +889,7 @@ int fix_alignment(struct pt_regs *regs)
  #ifdef CONFIG_PPC_FPU
   preempt_disable();
   enable_kernel_fp();
 - cvt_df(data.dd, (float *)data.v[4], current-thread)
;
 + cvt_df(data.dd, (float *)data.v[4]);
   preempt_enable();
  #else
   return 0;
 @@ -933,7 +933,7 @@ int fix_alignment(struct pt_regs *regs)
  #ifdef CONFIG_PPC_FPU
   preempt_disable();
   enable_kernel_fp();
 - cvt_fd((float *)data.v[4], data.dd, current-thread);
 + cvt_fd((float *)data.v[4], data.dd);
   preempt_enable();
  #else
   return 0;
 diff --git a/arch/powerpc/kernel/fpu.S b/arch/powerpc/kernel/fpu.S
 index fc8f5b1..e86c040 100644
 --- a/arch/powerpc/kernel/fpu.S
 +++ b/arch/powerpc/kernel/fpu.S
 @@ -163,24 +163,14 @@ END_FTR_SECTION_IFSET(CPU_FTR_VSX)
  /*
   * These are used in the alignment trap handler when emulating
   * single-precision loads and stores.
 - * We restore and save the fpscr so the task gets the same result
 - * and exceptions as if the cpu had performed the load or store.
   */
  
  _GLOBAL(cvt_fd)
 - lfd 0,THREAD_FPSCR(r5)  /* load up fpscr value */
 - MTFSF_L(0)
   lfs 0,0(r3)
   stfd0,0(r4)
 - mffs0
 - stfd0,THREAD_FPSCR(r5)  /* save new fpscr value */
   blr
  
  _GLOBAL(cvt_df)
 - lfd 0,THREAD_FPSCR(r5)  /* load up fpscr value */
 - MTFSF_L(0)
   lfd 0,0(r3)
   stfs0,0(r4)
 - mffs0
 - stfd0,THREAD_FPSCR(r5)  /* save new fpscr value */
   blr
 diff --git a/arch/powerpc/kvm/book3s_paired_singles.c b/arch/powerpc/kvm/book
3s_paired_singles.c
 index 474f2e2..35a701f 100644
 --- a/arch/powerpc/kvm/book3s_paired_singles.c
 +++ b/arch/powerpc/kvm/book3s_paired_singles.c
 @@ -159,7 +159,7 @@
  
  static inline void kvmppc_sync_qpr(struct kvm_vcpu *vcpu, int rt)
  {
 - kvm_cvt_df(vcpu-arch.fpr[rt], vcpu-arch.qpr[rt], vcpu-arch.fpscr)
;
 + kvm_cvt_df(vcpu-arch.fpr[rt], vcpu-arch.qpr[rt]);
  }
  
  static void kvmppc_inject_pf(struct kvm_vcpu *vcpu, ulong eaddr, bool is_sto
re)
 @@ -204,7 +204,7 @@ static int kvmppc_emulate_fpr_load(struct kvm_run *run, s
truct kvm_vcpu *vcpu,
   /* put in registers */
   switch (ls_type) {
   case FPU_LS_SINGLE:
 - kvm_cvt_fd((u32*)tmp, vcpu-arch.fpr[rs], vcpu-arch.fpscr);
 + kvm_cvt_fd((u32*)tmp, vcpu-arch.fpr[rs]);
   vcpu-arch.qpr[rs] = *((u32*)tmp);
   break;
   case FPU_LS_DOUBLE:
 @@ -230,7 +230,7 @@ static int