powerpc: Set stack limit properly in crit_transfer_to_handler
authorStuart Yoder <stuart.yoder@freescale.com>
Mon, 16 Jul 2012 09:06:48 +0000 (09:06 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Fri, 27 Jul 2012 01:42:31 +0000 (11:42 +1000)
Commit 9778b696a0188ad3b3524b383953ee73b31b7b68 incorrectly
changes the code setting the stack limit on entry to the
kernel to mark the thread_info at the bottom of the stack
out of bounds anymore. This fixes it.

Signed-off-by: Stuart Yoder <stuart.yoder@freescale.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/kernel/entry_32.S

index 5207d5a..ead5016 100644 (file)
@@ -89,10 +89,14 @@ crit_transfer_to_handler:
        mfspr   r0,SPRN_SRR1
        stw     r0,_SRR1(r11)
 
+       /* set the stack limit to the current stack
+        * and set the limit to protect the thread_info
+        * struct
+        */
        mfspr   r8,SPRN_SPRG_THREAD
        lwz     r0,KSP_LIMIT(r8)
        stw     r0,SAVED_KSP_LIMIT(r11)
-       CURRENT_THREAD_INFO(r0, r1)
+       rlwimi  r0,r1,0,0,(31-THREAD_SHIFT)
        stw     r0,KSP_LIMIT(r8)
        /* fall through */
 #endif
@@ -109,10 +113,14 @@ crit_transfer_to_handler:
        mfspr   r0,SPRN_SRR1
        stw     r0,crit_srr1@l(0)
 
+       /* set the stack limit to the current stack
+        * and set the limit to protect the thread_info
+        * struct
+        */
        mfspr   r8,SPRN_SPRG_THREAD
        lwz     r0,KSP_LIMIT(r8)
        stw     r0,saved_ksp_limit@l(0)
-       CURRENT_THREAD_INFO(r0, r1)
+       rlwimi  r0,r1,0,0,(31-THREAD_SHIFT)
        stw     r0,KSP_LIMIT(r8)
        /* fall through */
 #endif