From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932280AbXCGBgk (ORCPT ); Tue, 6 Mar 2007 20:36:40 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S932518AbXCGBgk (ORCPT ); Tue, 6 Mar 2007 20:36:40 -0500 Received: from inet-tsb5.toshiba.co.jp ([202.33.96.24]:42091 "EHLO inet-tsb5.toshiba.co.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932280AbXCGBgh (ORCPT ); Tue, 6 Mar 2007 20:36:37 -0500 Date: Wed, 07 Mar 2007 10:36:21 +0900 Message-ID: From: Tsutomu OWA To: mingo@elte.hu Cc: linuxppc-dev@ozlabs.org, linux-kernel@vger.kernel.org, tsutomu.owa@toshiba.co.jp Subject: [patch 1/6 -rt] powerpc 2.6.20-rt8: add preemption checks for NEED_RESCHED_DELAYED. In-Reply-To: References: User-Agent: Wanderlust/2.8.1 (Something) Emacs/20.7 Mule/4.0 (HANANOEN) Organization: Software Engineering Center, TOSHIBA. MIME-Version: 1.0 (generated by SEMI 1.14.4 - "Hosorogi") Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org To add preemption checks for the NEED_RESCHED_DELAYED flag. Signed-off-by: Tsutomu Owa -- 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) {