aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/include/asm
diff options
context:
space:
mode:
authorHeiko Carstens <heiko.carstens@de.ibm.com>2009-06-12 04:26:44 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2009-06-12 04:27:38 -0400
commitdfd9f7abc0fb67b5781f340d982384cea53b2884 (patch)
tree850baae88167699f45ba1dea1765b9156373db72 /arch/s390/include/asm
parenta2b53673fae14601bb520acf6a6f154463994565 (diff)
[S390] ftrace: add dynamic ftrace support
Dynamic ftrace support for s390. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/include/asm')
-rw-r--r--arch/s390/include/asm/ftrace.h19
-rw-r--r--arch/s390/include/asm/lowcore.h8
2 files changed, 25 insertions, 2 deletions
diff --git a/arch/s390/include/asm/ftrace.h b/arch/s390/include/asm/ftrace.h
index 5a5bc75e19d4..ba23d8f97d07 100644
--- a/arch/s390/include/asm/ftrace.h
+++ b/arch/s390/include/asm/ftrace.h
@@ -2,7 +2,26 @@
2#define _ASM_S390_FTRACE_H 2#define _ASM_S390_FTRACE_H
3 3
4#ifndef __ASSEMBLY__ 4#ifndef __ASSEMBLY__
5
5extern void _mcount(void); 6extern void _mcount(void);
7extern unsigned long ftrace_dyn_func;
8
9struct dyn_arch_ftrace { };
10
11#define MCOUNT_ADDR ((long)_mcount)
12
13#ifdef CONFIG_64BIT
14#define MCOUNT_INSN_SIZE 24
15#define MCOUNT_OFFSET 14
16#else
17#define MCOUNT_INSN_SIZE 30
18#define MCOUNT_OFFSET 8
6#endif 19#endif
7 20
21static inline unsigned long ftrace_call_adjust(unsigned long addr)
22{
23 return addr - MCOUNT_OFFSET;
24}
25
26#endif /* __ASSEMBLY__ */
8#endif /* _ASM_S390_FTRACE_H */ 27#endif /* _ASM_S390_FTRACE_H */
diff --git a/arch/s390/include/asm/lowcore.h b/arch/s390/include/asm/lowcore.h
index 713fe9fb1fcc..5046ad6b7a63 100644
--- a/arch/s390/include/asm/lowcore.h
+++ b/arch/s390/include/asm/lowcore.h
@@ -68,6 +68,7 @@
68#define __LC_CPUID 0x02b0 68#define __LC_CPUID 0x02b0
69#define __LC_INT_CLOCK 0x02c8 69#define __LC_INT_CLOCK 0x02c8
70#define __LC_MACHINE_FLAGS 0x02d8 70#define __LC_MACHINE_FLAGS 0x02d8
71#define __LC_FTRACE_FUNC 0x02dc
71#define __LC_IRB 0x0300 72#define __LC_IRB 0x0300
72#define __LC_PFAULT_INTPARM 0x0080 73#define __LC_PFAULT_INTPARM 0x0080
73#define __LC_CPU_TIMER_SAVE_AREA 0x00d8 74#define __LC_CPU_TIMER_SAVE_AREA 0x00d8
@@ -113,6 +114,7 @@
113#define __LC_INT_CLOCK 0x0340 114#define __LC_INT_CLOCK 0x0340
114#define __LC_VDSO_PER_CPU 0x0350 115#define __LC_VDSO_PER_CPU 0x0350
115#define __LC_MACHINE_FLAGS 0x0358 116#define __LC_MACHINE_FLAGS 0x0358
117#define __LC_FTRACE_FUNC 0x0360
116#define __LC_IRB 0x0380 118#define __LC_IRB 0x0380
117#define __LC_PASTE 0x03c0 119#define __LC_PASTE 0x03c0
118#define __LC_PFAULT_INTPARM 0x11b8 120#define __LC_PFAULT_INTPARM 0x11b8
@@ -281,7 +283,8 @@ struct _lowcore
281 __u64 int_clock; /* 0x02c8 */ 283 __u64 int_clock; /* 0x02c8 */
282 __u64 clock_comparator; /* 0x02d0 */ 284 __u64 clock_comparator; /* 0x02d0 */
283 __u32 machine_flags; /* 0x02d8 */ 285 __u32 machine_flags; /* 0x02d8 */
284 __u8 pad_0x02dc[0x0300-0x02dc]; /* 0x02dc */ 286 __u32 ftrace_func; /* 0x02dc */
287 __u8 pad_0x02f0[0x0300-0x02f0]; /* 0x02f0 */
285 288
286 /* Interrupt response block */ 289 /* Interrupt response block */
287 __u8 irb[64]; /* 0x0300 */ 290 __u8 irb[64]; /* 0x0300 */
@@ -386,7 +389,8 @@ struct _lowcore
386 __u64 clock_comparator; /* 0x0348 */ 389 __u64 clock_comparator; /* 0x0348 */
387 __u64 vdso_per_cpu_data; /* 0x0350 */ 390 __u64 vdso_per_cpu_data; /* 0x0350 */
388 __u64 machine_flags; /* 0x0358 */ 391 __u64 machine_flags; /* 0x0358 */
389 __u8 pad_0x0360[0x0380-0x0360]; /* 0x0360 */ 392 __u64 ftrace_func; /* 0x0360 */
393 __u8 pad_0x0368[0x0380-0x0368]; /* 0x0368 */
390 394
391 /* Interrupt response block. */ 395 /* Interrupt response block. */
392 __u8 irb[64]; /* 0x0380 */ 396 __u8 irb[64]; /* 0x0380 */