Merge branch 'linus' into timers/urgent, to pick up fixes
[linux-2.6-microblaze.git] / arch / arm / kernel / entry-armv.S
index e255050..bc5f507 100644 (file)
@@ -92,7 +92,7 @@
  * Invalid mode handlers
  */
        .macro  inv_entry, reason
-       sub     sp, sp, #S_FRAME_SIZE
+       sub     sp, sp, #PT_REGS_SIZE
  ARM(  stmib   sp, {r1 - lr}           )
  THUMB(        stmia   sp, {r0 - r12}          )
  THUMB(        str     sp, [sp, #S_SP]         )
@@ -152,7 +152,7 @@ ENDPROC(__und_invalid)
        .macro  svc_entry, stack_hole=0, trace=1, uaccess=1
  UNWIND(.fnstart               )
  UNWIND(.save {r0 - pc}                )
-       sub     sp, sp, #(S_FRAME_SIZE + 8 + \stack_hole - 4)
+       sub     sp, sp, #(SVC_REGS_SIZE + \stack_hole - 4)
 #ifdef CONFIG_THUMB2_KERNEL
  SPFIX(        str     r0, [sp]        )       @ temporarily saved
  SPFIX(        mov     r0, sp          )
@@ -167,7 +167,7 @@ ENDPROC(__und_invalid)
        ldmia   r0, {r3 - r5}
        add     r7, sp, #S_SP - 4       @ here for interlock avoidance
        mov     r6, #-1                 @  ""  ""      ""       ""
-       add     r2, sp, #(S_FRAME_SIZE + 8 + \stack_hole - 4)
+       add     r2, sp, #(SVC_REGS_SIZE + \stack_hole - 4)
  SPFIX(        addeq   r2, r2, #4      )
        str     r3, [sp, #-4]!          @ save the "real" r0 copied
                                        @ from the exception stack
@@ -185,6 +185,12 @@ ENDPROC(__und_invalid)
        @
        stmia   r7, {r2 - r6}
 
+       get_thread_info tsk
+       ldr     r0, [tsk, #TI_ADDR_LIMIT]
+       mov     r1, #TASK_SIZE
+       str     r1, [tsk, #TI_ADDR_LIMIT]
+       str     r0, [sp, #SVC_ADDR_LIMIT]
+
        uaccess_save r0
        .if \uaccess
        uaccess_disable r0
@@ -213,7 +219,6 @@ __irq_svc:
        irq_handler
 
 #ifdef CONFIG_PREEMPT
-       get_thread_info tsk
        ldr     r8, [tsk, #TI_PREEMPT]          @ get preempt count
        ldr     r0, [tsk, #TI_FLAGS]            @ get flags
        teq     r8, #0                          @ if preempt count != 0
@@ -366,17 +371,17 @@ ENDPROC(__fiq_abt)
 /*
  * User mode handlers
  *
- * EABI note: sp_svc is always 64-bit aligned here, so should S_FRAME_SIZE
+ * EABI note: sp_svc is always 64-bit aligned here, so should PT_REGS_SIZE
  */
 
-#if defined(CONFIG_AEABI) && (__LINUX_ARM_ARCH__ >= 5) && (S_FRAME_SIZE & 7)
+#if defined(CONFIG_AEABI) && (__LINUX_ARM_ARCH__ >= 5) && (PT_REGS_SIZE & 7)
 #error "sizeof(struct pt_regs) must be a multiple of 8"
 #endif
 
        .macro  usr_entry, trace=1, uaccess=1
  UNWIND(.fnstart       )
  UNWIND(.cantunwind    )       @ don't unwind the user space
-       sub     sp, sp, #S_FRAME_SIZE
+       sub     sp, sp, #PT_REGS_SIZE
  ARM(  stmib   sp, {r1 - r12}  )
  THUMB(        stmia   sp, {r0 - r12}  )