aboutsummaryrefslogtreecommitdiffstats
path: root/arch/tile/kernel
diff options
context:
space:
mode:
authorZhigang Lu <zlu@ezchip.com>2015-09-29 21:53:47 -0400
committerChris Metcalf <cmetcalf@ezchip.com>2016-01-04 15:09:31 -0500
commitf419e6f63c5afea00d7c17ebf54f2d265f5c4d7e (patch)
treec9c49f97a3a3abd0c55fce3f41fe71ef0125d3af /arch/tile/kernel
parent9f9499ae8e6415cefc4fe0a96ad0e27864353c89 (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.c2
-rw-r--r--arch/tile/kernel/kgdb.c2
-rw-r--r--arch/tile/kernel/kprobes.c4
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)))