diff options
-rw-r--r-- | arch/powerpc/include/asm/perf_event_server.h | 1 | ||||
-rw-r--r-- | arch/powerpc/perf/core-book3s.c | 3 | ||||
-rw-r--r-- | arch/powerpc/perf/power5+-pmu.c | 2 | ||||
-rw-r--r-- | arch/powerpc/perf/power5-pmu.c | 1 |
4 files changed, 5 insertions, 2 deletions
diff --git a/arch/powerpc/include/asm/perf_event_server.h b/arch/powerpc/include/asm/perf_event_server.h index d0aec72722e9..7074aeccb9f9 100644 --- a/arch/powerpc/include/asm/perf_event_server.h +++ b/arch/powerpc/include/asm/perf_event_server.h | |||
@@ -52,6 +52,7 @@ struct power_pmu { | |||
52 | #define PPMU_NO_SIPR 0x00000004 /* no SIPR/HV in MMCRA at all */ | 52 | #define PPMU_NO_SIPR 0x00000004 /* no SIPR/HV in MMCRA at all */ |
53 | #define PPMU_NO_CONT_SAMPLING 0x00000008 /* no continuous sampling */ | 53 | #define PPMU_NO_CONT_SAMPLING 0x00000008 /* no continuous sampling */ |
54 | #define PPMU_SIAR_VALID 0x00000010 /* Processor has SIAR Valid bit */ | 54 | #define PPMU_SIAR_VALID 0x00000010 /* Processor has SIAR Valid bit */ |
55 | #define PPMU_HAS_SSLOT 0x00000020 /* Has sampled slot in MMCRA */ | ||
55 | 56 | ||
56 | /* | 57 | /* |
57 | * Values for flags to get_alternatives() | 58 | * Values for flags to get_alternatives() |
diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c index 65362e98eb26..eb644806f00e 100644 --- a/arch/powerpc/perf/core-book3s.c +++ b/arch/powerpc/perf/core-book3s.c | |||
@@ -98,11 +98,12 @@ static inline unsigned long perf_ip_adjust(struct pt_regs *regs) | |||
98 | { | 98 | { |
99 | unsigned long mmcra = regs->dsisr; | 99 | unsigned long mmcra = regs->dsisr; |
100 | 100 | ||
101 | if ((mmcra & MMCRA_SAMPLE_ENABLE) && !(ppmu->flags & PPMU_ALT_SIPR)) { | 101 | if ((ppmu->flags & PPMU_HAS_SSLOT) && (mmcra & MMCRA_SAMPLE_ENABLE)) { |
102 | unsigned long slot = (mmcra & MMCRA_SLOT) >> MMCRA_SLOT_SHIFT; | 102 | unsigned long slot = (mmcra & MMCRA_SLOT) >> MMCRA_SLOT_SHIFT; |
103 | if (slot > 1) | 103 | if (slot > 1) |
104 | return 4 * (slot - 1); | 104 | return 4 * (slot - 1); |
105 | } | 105 | } |
106 | |||
106 | return 0; | 107 | return 0; |
107 | } | 108 | } |
108 | 109 | ||
diff --git a/arch/powerpc/perf/power5+-pmu.c b/arch/powerpc/perf/power5+-pmu.c index a8757baa28f3..b03b6dc0172d 100644 --- a/arch/powerpc/perf/power5+-pmu.c +++ b/arch/powerpc/perf/power5+-pmu.c | |||
@@ -671,7 +671,7 @@ static struct power_pmu power5p_pmu = { | |||
671 | .get_alternatives = power5p_get_alternatives, | 671 | .get_alternatives = power5p_get_alternatives, |
672 | .disable_pmc = power5p_disable_pmc, | 672 | .disable_pmc = power5p_disable_pmc, |
673 | .limited_pmc_event = power5p_limited_pmc_event, | 673 | .limited_pmc_event = power5p_limited_pmc_event, |
674 | .flags = PPMU_LIMITED_PMC5_6, | 674 | .flags = PPMU_LIMITED_PMC5_6 | PPMU_HAS_SSLOT, |
675 | .n_generic = ARRAY_SIZE(power5p_generic_events), | 675 | .n_generic = ARRAY_SIZE(power5p_generic_events), |
676 | .generic_events = power5p_generic_events, | 676 | .generic_events = power5p_generic_events, |
677 | .cache_events = &power5p_cache_events, | 677 | .cache_events = &power5p_cache_events, |
diff --git a/arch/powerpc/perf/power5-pmu.c b/arch/powerpc/perf/power5-pmu.c index e7f06eb7a861..1e8ce423c3af 100644 --- a/arch/powerpc/perf/power5-pmu.c +++ b/arch/powerpc/perf/power5-pmu.c | |||
@@ -615,6 +615,7 @@ static struct power_pmu power5_pmu = { | |||
615 | .n_generic = ARRAY_SIZE(power5_generic_events), | 615 | .n_generic = ARRAY_SIZE(power5_generic_events), |
616 | .generic_events = power5_generic_events, | 616 | .generic_events = power5_generic_events, |
617 | .cache_events = &power5_cache_events, | 617 | .cache_events = &power5_cache_events, |
618 | .flags = PPMU_HAS_SSLOT, | ||
618 | }; | 619 | }; |
619 | 620 | ||
620 | static int __init init_power5_pmu(void) | 621 | static int __init init_power5_pmu(void) |