[PATCH][v3] PPC: use CURRENT_THREAD_INFO instead of open coded assembly

2012-07-03 Thread Stuart Yoder
From: Stuart Yoder stuart.yo...@freescale.com

Signed-off-by: Stuart Yoder stuart.yo...@freescale.com
---

-v3
   -moved CURRENT_THREAD_INFO out from under the assembly only
#define as per comments on mailing list
   -reversed logic of 64-bit #ifdef for CURRENT_THREAD_INFO 
macro

-this patch is a pre-requisite for the idle hcall which I
am trying to get into Alex's KVM tree, so ideally would like
Ben's ack and get this applied to Alex's tree

-built/tested with a 32-bit booke kernel, built a 64-bit
 booke kernel


 arch/powerpc/include/asm/exception-64s.h |4 ++--
 arch/powerpc/include/asm/thread_info.h   |6 ++
 arch/powerpc/kernel/entry_32.S   |   24 
 arch/powerpc/kernel/entry_64.S   |   14 +++---
 arch/powerpc/kernel/exceptions-64e.S |2 +-
 arch/powerpc/kernel/exceptions-64s.S |2 +-
 arch/powerpc/kernel/head_fsl_booke.S |2 +-
 arch/powerpc/kernel/idle_6xx.S   |4 ++--
 arch/powerpc/kernel/idle_book3e.S|2 +-
 arch/powerpc/kernel/idle_e500.S  |4 ++--
 arch/powerpc/kernel/idle_power4.S|2 +-
 arch/powerpc/kernel/misc_32.S|4 ++--
 arch/powerpc/kvm/bookehv_interrupts.S|6 +-
 arch/powerpc/mm/hash_low_32.S|8 
 arch/powerpc/sysdev/6xx-suspend.S|2 +-
 15 files changed, 44 insertions(+), 42 deletions(-)

diff --git a/arch/powerpc/include/asm/exception-64s.h 
b/arch/powerpc/include/asm/exception-64s.h
index d58fc4e..5dbd00d 100644
--- a/arch/powerpc/include/asm/exception-64s.h
+++ b/arch/powerpc/include/asm/exception-64s.h
@@ -293,7 +293,7 @@ label##_hv: 
\
 
 #define RUNLATCH_ON\
 BEGIN_FTR_SECTION  \
-   clrrdi  r3,r1,THREAD_SHIFT; \
+   CURRENT_THREAD_INFO(r3, r1) \
ld  r4,TI_LOCAL_FLAGS(r3);  \
andi.   r0,r4,_TLF_RUNLATCH;\
beqlppc64_runlatch_on_trampoline;   \
@@ -332,7 +332,7 @@ label##_common: 
\
 #ifdef CONFIG_PPC_970_NAP
 #define FINISH_NAP \
 BEGIN_FTR_SECTION  \
-   clrrdi  r11,r1,THREAD_SHIFT;\
+   CURRENT_THREAD_INFO(r11, r1)\
ld  r9,TI_LOCAL_FLAGS(r11); \
andi.   r10,r9,_TLF_NAPPING;\
bnelpower4_fixup_nap;   \
diff --git a/arch/powerpc/include/asm/thread_info.h 
b/arch/powerpc/include/asm/thread_info.h
index 68831e9..faf9352 100644
--- a/arch/powerpc/include/asm/thread_info.h
+++ b/arch/powerpc/include/asm/thread_info.h
@@ -22,6 +22,12 @@
 
 #define THREAD_SIZE(1  THREAD_SHIFT)
 
+#ifdef CONFIG_PPC64
+#define CURRENT_THREAD_INFO(dest, sp)  clrrdi dest, sp, THREAD_SHIFT
+#else
+#define CURRENT_THREAD_INFO(dest, sp)  rlwinm dest, sp, 0, 0, 31-THREAD_SHIFT
+#endif
+
 #ifndef __ASSEMBLY__
 #include linux/cache.h
 #include asm/processor.h
diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S
index ba3aeb4..bad42e3 100644
--- a/arch/powerpc/kernel/entry_32.S
+++ b/arch/powerpc/kernel/entry_32.S
@@ -92,7 +92,7 @@ crit_transfer_to_handler:
mfspr   r8,SPRN_SPRG_THREAD
lwz r0,KSP_LIMIT(r8)
stw r0,SAVED_KSP_LIMIT(r11)
-   rlwimi  r0,r1,0,0,(31-THREAD_SHIFT)
+   CURRENT_THREAD_INFO(r0, r1)
stw r0,KSP_LIMIT(r8)
/* fall through */
 #endif
@@ -112,7 +112,7 @@ crit_transfer_to_handler:
mfspr   r8,SPRN_SPRG_THREAD
lwz r0,KSP_LIMIT(r8)
stw r0,saved_ksp_limit@l(0)
-   rlwimi  r0,r1,0,0,(31-THREAD_SHIFT)
+   CURRENT_THREAD_INFO(r0, r1)
stw r0,KSP_LIMIT(r8)
/* fall through */
 #endif
@@ -158,7 +158,7 @@ transfer_to_handler:
tophys(r11,r11)
addir11,r11,global_dbcr0@l
 #ifdef CONFIG_SMP
-   rlwinm  r9,r1,0,0,(31-THREAD_SHIFT)
+   CURRENT_THREAD_INFO(r9, r1)
lwz r9,TI_CPU(r9)
slwir9,r9,3
add r11,r11,r9
@@ -179,7 +179,7 @@ transfer_to_handler:
ble-stack_ovf   /* then the kernel stack overflowed */
 5:
 #if defined(CONFIG_6xx) || defined(CONFIG_E500)
-   rlwinm  r9,r1,0,0,31-THREAD_SHIFT
+   CURRENT_THREAD_INFO(r9, r1)
tophys(r9,r9)   /* check local flags */
lwz r12,TI_LOCAL_FLAGS(r9)
mtcrf   0x01,r12
@@ -333,7 +333,7 @@ _GLOBAL(DoSyscall)
mtmsr   r11
 1:
 #endif /* CONFIG_TRACE_IRQFLAGS */
-   rlwinm  r10,r1,0,0,(31-THREAD_SHIFT)/* current_thread_info() */
+   CURRENT_THREAD_INFO(r10, r1)
lwz r11,TI_FLAGS(r10)
andi.   r11,r11,_TIF_SYSCALL_T_OR_A
bne-syscall_dotrace
@@ -354,7 +354,7 @@ ret_from_syscall:
bl  do_show_syscall_exit
 #endif
mr  r6,r3
-   rlwinm  

Re: [PATCH][v3] PPC: use CURRENT_THREAD_INFO instead of open coded assembly

2012-07-03 Thread Benjamin Herrenschmidt
On Tue, 2012-07-03 at 10:11 -0500, Stuart Yoder wrote:
 From: Stuart Yoder stuart.yo...@freescale.com
 
 Signed-off-by: Stuart Yoder stuart.yo...@freescale.com
 ---
 
 -v3
-moved CURRENT_THREAD_INFO out from under the assembly only
 #define as per comments on mailing list
-reversed logic of 64-bit #ifdef for CURRENT_THREAD_INFO 
 macro

Almost there :-)

  #define RUNLATCH_ON  \
  BEGIN_FTR_SECTION\
 - clrrdi  r3,r1,THREAD_SHIFT; \
 + CURRENT_THREAD_INFO(r3, r1) \

Missing semicolon (in a macro you need it)

   ld  r4,TI_LOCAL_FLAGS(r3);  \
   andi.   r0,r4,_TLF_RUNLATCH;\
   beqlppc64_runlatch_on_trampoline;   \
 @@ -332,7 +332,7 @@ label##_common:   
 \
  #ifdef CONFIG_PPC_970_NAP
  #define FINISH_NAP   \
  BEGIN_FTR_SECTION\
 - clrrdi  r11,r1,THREAD_SHIFT;\
 + CURRENT_THREAD_INFO(r11, r1)\

Same

 --- a/arch/powerpc/kernel/exceptions-64e.S
 +++ b/arch/powerpc/kernel/exceptions-64e.S
 @@ -222,7 +222,7 @@ exc_##n##_bad_stack:  
 \
   * interrupts happen before the wait instruction.
   */
  #define CHECK_NAPPING()  
 \
 - clrrdi  r11,r1,THREAD_SHIFT;\
 + CURRENT_THREAD_INFO(r11, r1)

Missing both semicolon and backslash

Cheers,
Ben.

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev