diff options
author | Heiko Carstens <heiko.carstens@de.ibm.com> | 2009-06-12 04:26:44 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2009-06-12 04:27:38 -0400 |
commit | dfd9f7abc0fb67b5781f340d982384cea53b2884 (patch) | |
tree | 850baae88167699f45ba1dea1765b9156373db72 /arch/s390/include/asm | |
parent | a2b53673fae14601bb520acf6a6f154463994565 (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.h | 19 | ||||
-rw-r--r-- | arch/s390/include/asm/lowcore.h | 8 |
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 | |||
5 | extern void _mcount(void); | 6 | extern void _mcount(void); |
7 | extern unsigned long ftrace_dyn_func; | ||
8 | |||
9 | struct 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 | ||
21 | static 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 */ |