[patch 1/6 -rt] powerpc 2.6.20-rt8: add preemption checks for NEED_RESCHED_DELAYED.

Tsutomu OWA
2007-03-07T01:36:40Z

To add preemption checks for the NEED_RESCHED_DELAYED flag.

Signed-off-by: Tsutomu Owa <tsutomu.owa@toshiba.co.jp>
-- 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) {