sched: make use of precise accounting for /proc task stats
[safe/jmp/linux-2.6] / include / asm-sparc64 / ttable.h
index 9e28b24..bbb9c8f 100644 (file)
@@ -2,7 +2,6 @@
 #ifndef _SPARC64_TTABLE_H
 #define _SPARC64_TTABLE_H
 
-#include <linux/config.h>
 #include <asm/utrap.h>
 
 #ifdef __ASSEMBLY__
 #endif
 #define BREAKPOINT_TRAP TRAP(breakpoint_trap)
 
+#ifdef CONFIG_TRACE_IRQFLAGS
+
 #define TRAP_IRQ(routine, level)                       \
        rdpr    %pil, %g2;                              \
        wrpr    %g0, 15, %pil;                          \
-       b,pt    %xcc, etrap_irq;                        \
-        rd     %pc, %g7;                               \
+       sethi   %hi(1f-4), %g7;                         \
+       ba,pt   %xcc, etrap_irq;                        \
+        or     %g7, %lo(1f-4), %g7;                    \
+       nop;                                            \
+       nop;                                            \
+       nop;                                            \
+       .subsection     2;                              \
+1:     call    trace_hardirqs_off;                     \
+        nop;                                           \
        mov     level, %o0;                             \
        call    routine;                                \
         add    %sp, PTREGS_OFF, %o1;                   \
-       ba,a,pt %xcc, rtrap_irq;
-       
-#define TICK_SMP_IRQ                                   \
+       ba,a,pt %xcc, rtrap_irq;                        \
+       .previous;
+
+#else
+
+#define TRAP_IRQ(routine, level)                       \
        rdpr    %pil, %g2;                              \
        wrpr    %g0, 15, %pil;                          \
-       sethi   %hi(109f), %g7;                         \
-       b,pt    %xcc, etrap_irq;                        \
-109:    or     %g7, %lo(109b), %g7;                    \
-       call    smp_percpu_timer_interrupt;             \
-        add    %sp, PTREGS_OFF, %o0;                   \
+       ba,pt   %xcc, etrap_irq;                        \
+        rd     %pc, %g7;                               \
+       mov     level, %o0;                             \
+       call    routine;                                \
+        add    %sp, PTREGS_OFF, %o1;                   \
        ba,a,pt %xcc, rtrap_irq;
+       
+#endif
 
 #define TRAP_IVEC TRAP_NOSAVE(do_ivec)
 
        ldxa    [%g0] ASI_SCRATCHPAD, %g2;              \
        ldx     [%g2 + HV_FAULT_I_ADDR_OFFSET], %g4;    \
        ldx     [%g2 + HV_FAULT_I_CTX_OFFSET], %g5;     \
-       srlx    %g4, 22, %g7;                           \
-       sllx    %g5, 48, %g6;                           \
+       srlx    %g4, 22, %g6;                           \
        ba,pt   %xcc, sun4v_itsb_miss;                  \
-        or     %g6, %g7, %g6;                          \
+        nop;                                           \
+       nop;                                            \
        nop;
 
 #define SUN4V_DTSB_MISS                                        \
        ldxa    [%g0] ASI_SCRATCHPAD, %g2;              \
        ldx     [%g2 + HV_FAULT_D_ADDR_OFFSET], %g4;    \
        ldx     [%g2 + HV_FAULT_D_CTX_OFFSET], %g5;     \
-       srlx    %g4, 22, %g7;                           \
-       sllx    %g5, 48, %g6;                           \
+       srlx    %g4, 22, %g6;                           \
        ba,pt   %xcc, sun4v_dtsb_miss;                  \
-        or     %g6, %g7, %g6;                          \
+        nop;                                           \
+       nop;                                            \
        nop;
 
 /* Before touching these macros, you owe it to yourself to go and