diff options
-rw-r--r-- | arch/powerpc/oprofile/op_model_power4.c | 9 |
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 @@ | |||
26 | static unsigned long reset_value[OP_MAX_COUNTER]; | 26 | static unsigned long reset_value[OP_MAX_COUNTER]; |
27 | 27 | ||
28 | static int oprofile_running; | 28 | static int oprofile_running; |
29 | static 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 */ |
31 | static u32 mmcr0_val; | 32 | static 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); |