diff -urp okl4_2.1.1-patch.9/arch/arm/pistachio/v5/src/traps.spp okl4_2.1.1-patch.9.mod/arch/arm/pistachio/v5/src/traps.spp
--- okl4_2.1.1-patch.9/arch/arm/pistachio/v5/src/traps.spp	2008-06-16 15:16:54.000000000 +1000
+++ okl4_2.1.1-patch.9.mod/arch/arm/pistachio/v5/src/traps.spp	2008-08-20 17:05:16.260771801 +1000
@@ -219,10 +219,11 @@ LABEL(fiq_vec)
         SET_USER_DACR
         LOAD_CONTEXT_INTO_SP
         /* LOAD_CONTEXT_INTO_SP will have z flag set if return to user */
-        ldreq   r1,     [r0, #OFS_TCB_POST_SYSCALL_CALLBACK]
-        clzeq   r1,     r1 /* r1 contains callback function, 0xFXXXXXXX */
+        ldr     r1,     [r0, #OFS_TCB_POST_SYSCALL_CALLBACK]
         cmpeq   r1,     #0 /* r1 should be 0, if has callback function */
+	bne     kernel_fixup
 
+normal_return:
         ldr     lr,     [sp, #PT_CPSR]
         ldmib   sp,     {r0-r14}^
         nop
@@ -230,7 +231,16 @@ LABEL(fiq_vec)
         ldr     lr,     [sp, #PT_PC]
         add     sp,     sp,     #PT_SIZE
 
-        subnes  pc,     lr,     #1
+        subs    pc,     lr,     #1
+
+        /* 
+         * Two possible cases to get here:
+         * -normal return to kernel mode - need to jump back
+         * -post syscall callback - need to fall through
+         */ 
+kernel_fixup:
+        cmp     r1,     #0
+        beq     normal_return
 
         /* If there is a post-syscall callback, handle that now. */
         ldr     r0,     =arm_perform_callback_from_interrupt

