diff options
author | Anton Blanchard <anton@samba.org> | 2006-03-26 20:03:17 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-03-28 21:44:16 -0500 |
commit | fa465f8c7008c6cab32b05f3f1af57f7c86e8873 (patch) | |
tree | d517abb9447600283359fb181a955bcd66b9633a /arch/powerpc/oprofile | |
parent | 6c6bd754bf43d59756f094de144ecac239629dda (diff) |
[PATCH] powerpc: Add oprofile calltrace support to all powerpc cpus
Add calltrace support for other powerpc cpus. Tested on 7450.
Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/oprofile')
-rw-r--r-- | arch/powerpc/oprofile/op_model_7450.c | 4 | ||||
-rw-r--r-- | arch/powerpc/oprofile/op_model_fsl_booke.c | 4 | ||||
-rw-r--r-- | arch/powerpc/oprofile/op_model_rs64.c | 5 |
3 files changed, 8 insertions, 5 deletions
diff --git a/arch/powerpc/oprofile/op_model_7450.c b/arch/powerpc/oprofile/op_model_7450.c index 32abfdbb0eb1..e0491c3c71f1 100644 --- a/arch/powerpc/oprofile/op_model_7450.c +++ b/arch/powerpc/oprofile/op_model_7450.c | |||
@@ -176,13 +176,13 @@ static void fsl7450_handle_interrupt(struct pt_regs *regs, | |||
176 | mtmsr(mfmsr() | MSR_PMM); | 176 | mtmsr(mfmsr() | MSR_PMM); |
177 | 177 | ||
178 | pc = mfspr(SPRN_SIAR); | 178 | pc = mfspr(SPRN_SIAR); |
179 | is_kernel = (pc >= KERNELBASE); | 179 | is_kernel = is_kernel_addr(pc); |
180 | 180 | ||
181 | for (i = 0; i < NUM_CTRS; ++i) { | 181 | for (i = 0; i < NUM_CTRS; ++i) { |
182 | val = ctr_read(i); | 182 | val = ctr_read(i); |
183 | if (val < 0) { | 183 | if (val < 0) { |
184 | if (oprofile_running && ctr[i].enabled) { | 184 | if (oprofile_running && ctr[i].enabled) { |
185 | oprofile_add_pc(pc, is_kernel, i); | 185 | oprofile_add_ext_sample(pc, regs, i, is_kernel); |
186 | ctr_write(i, reset_value[i]); | 186 | ctr_write(i, reset_value[i]); |
187 | } else { | 187 | } else { |
188 | ctr_write(i, 0); | 188 | ctr_write(i, 0); |
diff --git a/arch/powerpc/oprofile/op_model_fsl_booke.c b/arch/powerpc/oprofile/op_model_fsl_booke.c index 26539cda6023..93d63e62662f 100644 --- a/arch/powerpc/oprofile/op_model_fsl_booke.c +++ b/arch/powerpc/oprofile/op_model_fsl_booke.c | |||
@@ -154,13 +154,13 @@ static void fsl_booke_handle_interrupt(struct pt_regs *regs, | |||
154 | mtmsr(mfmsr() | MSR_PMM); | 154 | mtmsr(mfmsr() | MSR_PMM); |
155 | 155 | ||
156 | pc = regs->nip; | 156 | pc = regs->nip; |
157 | is_kernel = (pc >= KERNELBASE); | 157 | is_kernel = is_kernel_addr(pc); |
158 | 158 | ||
159 | for (i = 0; i < num_counters; ++i) { | 159 | for (i = 0; i < num_counters; ++i) { |
160 | val = ctr_read(i); | 160 | val = ctr_read(i); |
161 | if (val < 0) { | 161 | if (val < 0) { |
162 | if (oprofile_running && ctr[i].enabled) { | 162 | if (oprofile_running && ctr[i].enabled) { |
163 | oprofile_add_pc(pc, is_kernel, i); | 163 | oprofile_add_ext_sample(pc, regs, i, is_kernel); |
164 | ctr_write(i, reset_value[i]); | 164 | ctr_write(i, reset_value[i]); |
165 | } else { | 165 | } else { |
166 | ctr_write(i, 0); | 166 | ctr_write(i, 0); |
diff --git a/arch/powerpc/oprofile/op_model_rs64.c b/arch/powerpc/oprofile/op_model_rs64.c index 5c909ee609fe..042f8f4867ad 100644 --- a/arch/powerpc/oprofile/op_model_rs64.c +++ b/arch/powerpc/oprofile/op_model_rs64.c | |||
@@ -175,10 +175,13 @@ static void rs64_handle_interrupt(struct pt_regs *regs, | |||
175 | struct op_counter_config *ctr) | 175 | struct op_counter_config *ctr) |
176 | { | 176 | { |
177 | unsigned int mmcr0; | 177 | unsigned int mmcr0; |
178 | int is_kernel; | ||
178 | int val; | 179 | int val; |
179 | int i; | 180 | int i; |
180 | unsigned long pc = mfspr(SPRN_SIAR); | 181 | unsigned long pc = mfspr(SPRN_SIAR); |
181 | 182 | ||
183 | is_kernel = is_kernel_addr(pc); | ||
184 | |||
182 | /* set the PMM bit (see comment below) */ | 185 | /* set the PMM bit (see comment below) */ |
183 | mtmsrd(mfmsr() | MSR_PMM); | 186 | mtmsrd(mfmsr() | MSR_PMM); |
184 | 187 | ||
@@ -186,7 +189,7 @@ static void rs64_handle_interrupt(struct pt_regs *regs, | |||
186 | val = ctr_read(i); | 189 | val = ctr_read(i); |
187 | if (val < 0) { | 190 | if (val < 0) { |
188 | if (ctr[i].enabled) { | 191 | if (ctr[i].enabled) { |
189 | oprofile_add_pc(pc, is_kernel_addr(pc), i); | 192 | oprofile_add_ext_sample(pc, regs, i, is_kernel); |
190 | ctr_write(i, reset_value[i]); | 193 | ctr_write(i, reset_value[i]); |
191 | } else { | 194 | } else { |
192 | ctr_write(i, 0); | 195 | ctr_write(i, 0); |