diff options
author | Zhigang Lu <zlu@ezchip.com> | 2015-09-29 21:53:47 -0400 |
---|---|---|
committer | Chris Metcalf <cmetcalf@ezchip.com> | 2016-01-04 15:09:31 -0500 |
commit | f419e6f63c5afea00d7c17ebf54f2d265f5c4d7e (patch) | |
tree | c9c49f97a3a3abd0c55fce3f41fe71ef0125d3af /arch/tile/kernel | |
parent | 9f9499ae8e6415cefc4fe0a96ad0e27864353c89 (diff) |
tile: define a macro ktext_writable_addr to get writable kernel text address
It is used by kgdb, ftrace, kprobe and jump label, so we factor
this out into a helper routine.
Reviewed-by: Chris Metcalf <cmetcalf@ezchip.com>
Signed-off-by: Zhigang Lu <zlu@ezchip.com>
Signed-off-by: Chris Metcalf <cmetcalf@ezchip.com>
Diffstat (limited to 'arch/tile/kernel')
-rw-r--r-- | arch/tile/kernel/ftrace.c | 2 | ||||
-rw-r--r-- | arch/tile/kernel/kgdb.c | 2 | ||||
-rw-r--r-- | arch/tile/kernel/kprobes.c | 4 |
3 files changed, 4 insertions, 4 deletions
diff --git a/arch/tile/kernel/ftrace.c b/arch/tile/kernel/ftrace.c index 0c0996175b1e..4180ccdf9cd0 100644 --- a/arch/tile/kernel/ftrace.c +++ b/arch/tile/kernel/ftrace.c | |||
@@ -117,7 +117,7 @@ static int ftrace_modify_code(unsigned long pc, unsigned long old, | |||
117 | return -EINVAL; | 117 | return -EINVAL; |
118 | 118 | ||
119 | /* Operate on writable kernel text mapping. */ | 119 | /* Operate on writable kernel text mapping. */ |
120 | pc_wr = pc - MEM_SV_START + PAGE_OFFSET; | 120 | pc_wr = ktext_writable_addr(pc); |
121 | 121 | ||
122 | if (probe_kernel_write((void *)pc_wr, &new, MCOUNT_INSN_SIZE)) | 122 | if (probe_kernel_write((void *)pc_wr, &new, MCOUNT_INSN_SIZE)) |
123 | return -EPERM; | 123 | return -EPERM; |
diff --git a/arch/tile/kernel/kgdb.c b/arch/tile/kernel/kgdb.c index ff5335ae050d..a506c2c28943 100644 --- a/arch/tile/kernel/kgdb.c +++ b/arch/tile/kernel/kgdb.c | |||
@@ -164,7 +164,7 @@ static unsigned long writable_address(unsigned long addr) | |||
164 | unsigned long ret = 0; | 164 | unsigned long ret = 0; |
165 | 165 | ||
166 | if (core_kernel_text(addr)) | 166 | if (core_kernel_text(addr)) |
167 | ret = addr - MEM_SV_START + PAGE_OFFSET; | 167 | ret = ktext_writable_addr(addr); |
168 | else if (is_module_text_address(addr)) | 168 | else if (is_module_text_address(addr)) |
169 | ret = addr; | 169 | ret = addr; |
170 | else | 170 | else |
diff --git a/arch/tile/kernel/kprobes.c b/arch/tile/kernel/kprobes.c index f8a45c51e9e4..c68694bb1ad2 100644 --- a/arch/tile/kernel/kprobes.c +++ b/arch/tile/kernel/kprobes.c | |||
@@ -116,7 +116,7 @@ void __kprobes arch_arm_kprobe(struct kprobe *p) | |||
116 | unsigned long addr_wr; | 116 | unsigned long addr_wr; |
117 | 117 | ||
118 | /* Operate on writable kernel text mapping. */ | 118 | /* Operate on writable kernel text mapping. */ |
119 | addr_wr = (unsigned long)p->addr - MEM_SV_START + PAGE_OFFSET; | 119 | addr_wr = ktext_writable_addr(p->addr); |
120 | 120 | ||
121 | if (probe_kernel_write((void *)addr_wr, &breakpoint_insn, | 121 | if (probe_kernel_write((void *)addr_wr, &breakpoint_insn, |
122 | sizeof(breakpoint_insn))) | 122 | sizeof(breakpoint_insn))) |
@@ -131,7 +131,7 @@ void __kprobes arch_disarm_kprobe(struct kprobe *kp) | |||
131 | unsigned long addr_wr; | 131 | unsigned long addr_wr; |
132 | 132 | ||
133 | /* Operate on writable kernel text mapping. */ | 133 | /* Operate on writable kernel text mapping. */ |
134 | addr_wr = (unsigned long)kp->addr - MEM_SV_START + PAGE_OFFSET; | 134 | addr_wr = ktext_writable_addr(kp->addr); |
135 | 135 | ||
136 | if (probe_kernel_write((void *)addr_wr, &kp->opcode, | 136 | if (probe_kernel_write((void *)addr_wr, &kp->opcode, |
137 | sizeof(kp->opcode))) | 137 | sizeof(kp->opcode))) |