diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2012-03-26 16:47:34 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2012-03-27 20:33:24 -0400 |
commit | 1ce447b90f3e71c81ae59e0062bc305ef267668b (patch) | |
tree | 516f26debf251a7aa1538f72710f956b95a2f05c /arch/powerpc/include/asm/perf_event_server.h | |
parent | cb52d8970eee65bf2c47d9a91bd4f58b17f595f4 (diff) |
powerpc/perf: Fix instruction address sampling on 970 and Power4
970 and Power4 don't support "continuous sampling" which means that
when we aren't in marked instruction sampling mode (marked events),
SIAR isn't updated with the last instruction sampled before the
perf interrupt. On those processors, we must thus use the exception
SRR0 value as the sampled instruction pointer.
Those processors also don't support the SIPR and SIHV bits in MMCRA
which means we need some kind of heuristic to decide if SIAR values
represent kernel or user addresses.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/include/asm/perf_event_server.h')
-rw-r--r-- | arch/powerpc/include/asm/perf_event_server.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/perf_event_server.h b/arch/powerpc/include/asm/perf_event_server.h index 1a8093fa8f71..078019b5b353 100644 --- a/arch/powerpc/include/asm/perf_event_server.h +++ b/arch/powerpc/include/asm/perf_event_server.h | |||
@@ -47,6 +47,8 @@ struct power_pmu { | |||
47 | */ | 47 | */ |
48 | #define PPMU_LIMITED_PMC5_6 1 /* PMC5/6 have limited function */ | 48 | #define PPMU_LIMITED_PMC5_6 1 /* PMC5/6 have limited function */ |
49 | #define PPMU_ALT_SIPR 2 /* uses alternate posn for SIPR/HV */ | 49 | #define PPMU_ALT_SIPR 2 /* uses alternate posn for SIPR/HV */ |
50 | #define PPMU_NO_SIPR 4 /* no SIPR/HV in MMCRA at all */ | ||
51 | #define PPMU_NO_CONT_SAMPLING 8 /* no continuous sampling */ | ||
50 | 52 | ||
51 | /* | 53 | /* |
52 | * Values for flags to get_alternatives() | 54 | * Values for flags to get_alternatives() |