To add preemption checks for the NEED_RESCHED_DELAYED flag.

Signed-off-by: Tsutomu Owa <[EMAIL PROTECTED]>
-- owa

diff -rup linux-rt8/include/asm-powerpc/thread_info.h 
rt/include/asm-powerpc/thread_info.h
--- linux-rt8/include/asm-powerpc/thread_info.h 2007-02-20 14:30:40.000000000 
+0900
+++ rt/include/asm-powerpc/thread_info.h        2007-02-20 15:39:25.000000000 
+0900
@@ -146,7 +146,8 @@ static inline struct thread_info *curren
 #define _TIF_SYSCALL_T_OR_A    
(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP)
 
 #define _TIF_USER_WORK_MASK    (_TIF_NOTIFY_RESUME | _TIF_SIGPENDING | \
-                                _TIF_NEED_RESCHED | _TIF_RESTORE_SIGMASK)
+                                _TIF_NEED_RESCHED | _TIF_RESTORE_SIGMASK | \
+                                _TIF_NEED_RESCHED_DELAYED)
 #define _TIF_PERSYSCALL_MASK   (_TIF_RESTOREALL|_TIF_NOERROR)
 
 /* Bits in local_flags */
diff -rup linux-rt8/arch/powerpc/kernel/entry_64.S 
rt/arch/powerpc/kernel/entry_64.S
--- linux-rt8/arch/powerpc/kernel/entry_64.S    2007-02-20 09:38:52.000000000 
+0900
+++ rt/arch/powerpc/kernel/entry_64.S   2007-03-05 11:59:17.000000000 +0900
@@ -444,7 +444,8 @@ _GLOBAL(ret_from_except_lite)
 
 #ifdef CONFIG_PREEMPT
        clrrdi  r9,r1,THREAD_SHIFT      /* current_thread_info() */
-       li      r0,_TIF_NEED_RESCHED    /* bits to check */
+       li      r0,(_TIF_NEED_RESCHED|_TIF_NEED_RESCHED_DELAYED)
+                                       /* bits to check */
        ld      r3,_MSR(r1)
        ld      r4,TI_FLAGS(r9)
        /* Move MSR_PR bit in r3 to _TIF_SIGPENDING position in r0 */
@@ -565,7 +566,7 @@ do_work:
        rotldi  r10,r10,16
        mtmsrd  r10,1
        ld      r4,TI_FLAGS(r9)
-       andi.   r0,r4,_TIF_NEED_RESCHED
+       andi.   r0,r4,(_TIF_NEED_RESCHED|_TIF_NEED_RESCHED_DELAYED)
        bne     1b
        b       restore
 
@@ -575,7 +576,7 @@ user_work:
        ori     r10,r10,MSR_EE
        mtmsrd  r10,1
 
-       andi.   r0,r4,_TIF_NEED_RESCHED
+       andi.   r0,r4,(_TIF_NEED_RESCHED|_TIF_NEED_RESCHED_DELAYED)
        beq     1f
        bl      .schedule
        b       .ret_from_except_lite
diff -rup linux-rt8/arch/powerpc/kernel/idle.c rt/arch/powerpc/kernel/idle.c
--- linux-rt8/arch/powerpc/kernel/idle.c        2007-02-20 14:30:38.000000000 
+0900
+++ rt/arch/powerpc/kernel/idle.c       2007-02-20 15:43:04.000000000 +0900
@@ -56,7 +56,8 @@ void cpu_idle(void)
 
        set_thread_flag(TIF_POLLING_NRFLAG);
        while (1) {
-               while (!need_resched() && !cpu_should_die()) {
+               while (!need_resched() && !need_resched_delayed() &&
+                               !cpu_should_die()) {
                        ppc64_runlatch_off();
 
                        if (ppc_md.power_save) {

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to