From: Anton Blanchard <[EMAIL PROTECTED]>
Date: Tue, 15 May 2007 14:59:06 -0500
Subject: [PATCH] Reserve threadinfo flags for perfmon2
Reserve two TIF flags for perfmon2 and shift them into the low 16 bits
so we can use single assembly instructions to create constants based off
them.
This allows us to remove the LOAD_TIF_KERNEL() macros from the powerpc code.
Signed-off-by: Anton Blanchard <[EMAIL PROTECTED]>
Signed-off-by: Kevin Corry <[EMAIL PROTECTED]>
Signed-off-by: Carl Love <[EMAIL PROTECTED]>
Index: linux-2.6.21-arnd2-perfmon1/include/asm-powerpc/thread_info.h
===================================================================
--- linux-2.6.21-arnd2-perfmon1.orig/include/asm-powerpc/thread_info.h
+++ linux-2.6.21-arnd2-perfmon1/include/asm-powerpc/thread_info.h
@@ -113,8 +113,8 @@ static inline struct thread_info *curren
#define TIF_POLLING_NRFLAG 4 /* true if poll_idle() is polling
TIF_NEED_RESCHED */
#define TIF_32BIT 5 /* 32 bit binary */
-#define TIF_RUNLATCH 6 /* Is the runlatch enabled? */
-#define TIF_ABI_PENDING 7 /* 32/64 bit switch needed */
+#define TIF_PERFMON_WORK 6 /* work for pfm_handle_work() */
+#define TIF_PERFMON_CTXSW 7 /* perfmon needs ctxsw calls */
#define TIF_SYSCALL_AUDIT 8 /* syscall auditing active */
#define TIF_SINGLESTEP 9 /* singlestepping active */
#define TIF_MEMDIE 10
@@ -123,8 +123,8 @@ static inline struct thread_info *curren
#define TIF_NOERROR 14 /* Force successful syscall return */
#define TIF_RESTORE_SIGMASK 15 /* Restore signal mask in do_signal */
#define TIF_FREEZE 16 /* Freezing for suspend */
-#define TIF_PERFMON_WORK 17 /* work for pfm_handle_work() */
-#define TIF_PERFMON_CTXSW 18 /* perfmon needs ctxsw calls */
+#define TIF_RUNLATCH 17 /* Is the runlatch enabled? */
+#define TIF_ABI_PENDING 18 /* 32/64 bit switch needed */
/* as above, but as bit values */
#define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE)
@@ -133,8 +133,8 @@ static inline struct thread_info *curren
#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
#define _TIF_32BIT (1<<TIF_32BIT)
-#define _TIF_RUNLATCH (1<<TIF_RUNLATCH)
-#define _TIF_ABI_PENDING (1<<TIF_ABI_PENDING)
+#define _TIF_PERFMON_WORK (1<<TIF_PERFMON_WORK)
+#define _TIF_PERFMON_CTXSW (1<<TIF_PERFMON_CTXSW)
#define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT)
#define _TIF_SINGLESTEP (1<<TIF_SINGLESTEP)
#define _TIF_SECCOMP (1<<TIF_SECCOMP)
@@ -142,6 +142,8 @@ static inline struct thread_info *curren
#define _TIF_NOERROR (1<<TIF_NOERROR)
#define _TIF_RESTORE_SIGMASK (1<<TIF_RESTORE_SIGMASK)
#define _TIF_FREEZE (1<<TIF_FREEZE)
+#define _TIF_RUNLATCH (1<<TIF_RUNLATCH)
+#define _TIF_ABI_PENDING (1<<TIF_ABI_PENDING)
#define _TIF_SYSCALL_T_OR_A
(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP)
#define _TIF_PERFMON_WORK (1<<TIF_PERFMON_WORK)
#define _TIF_PERFMON_CTXSW (1<<TIF_PERFMON_CTXSW)
Index: linux-2.6.21-arnd2-perfmon1/arch/powerpc/kernel/entry_32.S
===================================================================
--- linux-2.6.21-arnd2-perfmon1.orig/arch/powerpc/kernel/entry_32.S
+++ linux-2.6.21-arnd2-perfmon1/arch/powerpc/kernel/entry_32.S
@@ -43,12 +43,6 @@
#define LOAD_MSR_KERNEL(r, x) li r,(x)
#endif
-#if
(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK)
>= 0x10000
-#define LOAD_TIF_KERNEL(r, x) lis r,(x)@h; ori r,r,(x)@l
-#else
-#define LOAD_TIF_KERNEL(r, x) ori r,r,(x)
-#endif
-
#ifdef CONFIG_BOOKE
#include "head_booke.h"
#define TRANSFER_TO_HANDLER_EXC_LEVEL(exc_level) \
@@ -234,8 +228,7 @@ ret_from_syscall:
MTMSRD(r10)
lwz r9,TI_FLAGS(r12)
li r8,-_LAST_ERRNO
-
LOAD_TIF_KERNEL(r7,_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK)
- and. r0,r9,r7
+ andi.
r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK)
bne- syscall_exit_work
cmplw 0,r3,r8
blt+ syscall_exit_cont
Index: linux-2.6.21-arnd2-perfmon1/arch/powerpc/kernel/entry_64.S
===================================================================
--- linux-2.6.21-arnd2-perfmon1.orig/arch/powerpc/kernel/entry_64.S
+++ linux-2.6.21-arnd2-perfmon1/arch/powerpc/kernel/entry_64.S
@@ -30,12 +30,6 @@
#include <asm/firmware.h>
#include <asm/bug.h>
-#if
(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK)
>= 0x10000
-#define LOAD_TIF_KERNEL(r, x) lis r,(x)@h; ori r,r,(x)@l
-#else
-#define LOAD_TIF_KERNEL(r, x) ori r,r,(x)
-#endif
-
/*
* System calls.
*/
@@ -168,8 +162,7 @@ syscall_exit:
mtmsrd r10,1
ld r9,TI_FLAGS(r12)
li r11,-_LAST_ERRNO
- LOAD_TIF_KERNEL(r0,
_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK)
- and. r0,r9,r0
+ andi.
r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK)
bne- syscall_exit_work
cmpld r3,r11
ld r5,_CCR(r1)
@@ -472,8 +465,7 @@ _GLOBAL(ret_from_except_lite)
/* Check current_thread_info()->flags */
clrrdi r9,r1,THREAD_SHIFT
ld r4,TI_FLAGS(r9)
- LOAD_TIF_KERNEL(r0, _TIF_USER_WORK_MASK)
- and. r0,r4,r0
+ andi. r0,r4,_TIF_USER_WORK_MASK
bne do_work
#endif
_______________________________________________
perfmon mailing list
[email protected]
http://www.hpl.hp.com/hosted/linux/mail-archives/perfmon/