From 8f4af9861c865ef55ec6f7cf6810270231c9db66 Mon Sep 17 00:00:00 2001 From: Michael Ellerman Date: Thu, 25 Apr 2013 19:28:26 +0000 Subject: [PATCH] --- yaml --- r: 370816 b: refs/heads/master c: 860aad71fc7022e5a3907afe50fd96a11e546802 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/powerpc/perf/core-book3s.c | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 150c3a916f44..41145a2da035 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 33904054b40832908dfaeeece282f2f0ff636f14 +refs/heads/master: 860aad71fc7022e5a3907afe50fd96a11e546802 diff --git a/trunk/arch/powerpc/perf/core-book3s.c b/trunk/arch/powerpc/perf/core-book3s.c index 5d3000178736..1c13c3d899a6 100644 --- a/trunk/arch/powerpc/perf/core-book3s.c +++ b/trunk/arch/powerpc/perf/core-book3s.c @@ -156,6 +156,11 @@ static bool regs_sipr(struct pt_regs *regs) return !!(regs->dsisr & sipr); } +static bool regs_no_sipr(struct pt_regs *regs) +{ + return !!(regs->result & 2); +} + static inline u32 perf_flags_from_msr(struct pt_regs *regs) { if (regs->msr & MSR_PR) @@ -178,7 +183,7 @@ static inline u32 perf_get_misc_flags(struct pt_regs *regs) * SIAR which should give slightly more reliable * results */ - if (ppmu->flags & PPMU_NO_SIPR) { + if (regs_no_sipr(regs)) { unsigned long siar = mfspr(SPRN_SIAR); if (siar >= PAGE_OFFSET) return PERF_RECORD_MISC_KERNEL; @@ -208,6 +213,10 @@ static inline void perf_read_regs(struct pt_regs *regs) int use_siar; regs->dsisr = mmcra; + regs->result = 0; + + if (ppmu->flags & PPMU_NO_SIPR) + regs->result |= 2; /* * If this isn't a PMU exception (eg a software event) the SIAR is @@ -232,12 +241,12 @@ static inline void perf_read_regs(struct pt_regs *regs) use_siar = 1; else if ((ppmu->flags & PPMU_NO_CONT_SAMPLING)) use_siar = 0; - else if (!(ppmu->flags & PPMU_NO_SIPR) && regs_sipr(regs)) + else if (!regs_no_sipr(regs) && regs_sipr(regs)) use_siar = 0; else use_siar = 1; - regs->result = use_siar; + regs->result |= use_siar; } /*