]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/m68knommu/platform/coldfire/entry.S
m68knommu: ColdFire add support for kernel preemption
[linux-2.6-omap-h63xx.git] / arch / m68knommu / platform / coldfire / entry.S
index 111b66dc737ba5f15e0d2af56b7a85e2db676050..1af7c1d650f61f968abe7b3897a885c52dbb5e4d 100644 (file)
@@ -106,6 +106,22 @@ ret_from_exception:
        btst    #5,%sp@(PT_SR)          /* check if returning to kernel */
        jeq     Luser_return            /* if so, skip resched, signals */
 
+#ifdef CONFIG_PREEMPT
+       movel   %sp,%d1                 /* get thread_info pointer */
+       andl    #-THREAD_SIZE,%d1       /* at base of kernel stack */
+       movel   %d1,%a0
+       movel   %a0@(TI_FLAGS),%d1      /* get thread_info->flags */
+       andl    #_TIF_NEED_RESCHED,%d1
+       jeq     Lkernel_return
+
+       movel   %a0@(TI_PREEMPTCOUNT),%d1
+       cmpl    #0,%d1
+       jne     Lkernel_return
+
+       pea     Lkernel_return
+       jmp     preempt_schedule_irq    /* preempt the kernel */
+#endif
+
 Lkernel_return:
        moveml  %sp@,%d1-%d5/%a0-%a2
        lea     %sp@(32),%sp            /* space for 8 regs */