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/

Reply via email to