aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/oprofile/op_model_power4.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/arch/powerpc/oprofile/op_model_power4.c b/arch/powerpc/oprofile/op_model_power4.c
index 3e3d91f536e0..80774092db77 100644
--- a/arch/powerpc/oprofile/op_model_power4.c
+++ b/arch/powerpc/oprofile/op_model_power4.c
@@ -26,6 +26,7 @@
26static unsigned long reset_value[OP_MAX_COUNTER]; 26static unsigned long reset_value[OP_MAX_COUNTER];
27 27
28static int oprofile_running; 28static int oprofile_running;
29static int use_slot_nums;
29 30
30/* mmcr values are set in power4_reg_setup, used in power4_cpu_setup */ 31/* mmcr values are set in power4_reg_setup, used in power4_cpu_setup */
31static u32 mmcr0_val; 32static u32 mmcr0_val;
@@ -61,6 +62,12 @@ static int power4_reg_setup(struct op_counter_config *ctr,
61 else 62 else
62 mmcr0_val |= MMCR0_PROBLEM_DISABLE; 63 mmcr0_val |= MMCR0_PROBLEM_DISABLE;
63 64
65 if (__is_processor(PV_POWER4) || __is_processor(PV_POWER4p) ||
66 __is_processor(PV_970) || __is_processor(PV_970FX) ||
67 __is_processor(PV_970MP) || __is_processor(PV_970GX) ||
68 __is_processor(PV_POWER5) || __is_processor(PV_POWER5p))
69 use_slot_nums = 1;
70
64 return 0; 71 return 0;
65} 72}
66 73
@@ -206,7 +213,7 @@ static unsigned long get_pc(struct pt_regs *regs)
206 213
207 mmcra = mfspr(SPRN_MMCRA); 214 mmcra = mfspr(SPRN_MMCRA);
208 215
209 if (mmcra & MMCRA_SAMPLE_ENABLE) { 216 if (use_slot_nums && (mmcra & MMCRA_SAMPLE_ENABLE)) {
210 slot = ((mmcra & MMCRA_SLOT) >> MMCRA_SLOT_SHIFT); 217 slot = ((mmcra & MMCRA_SLOT) >> MMCRA_SLOT_SHIFT);
211 if (slot > 1) 218 if (slot > 1)
212 pc += 4 * (slot - 1); 219 pc += 4 * (slot - 1);