From: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
To: Michael Ellerman <michael@ellerman.id.au>
Cc: linuxppc-dev@ozlabs.org, Paul Mackerras <paulus@samba.org>
Subject: Re: [PATCH 1/4] powerpc/perf: Convert mmcra_sipr/sihv() to regs_sipr/sihv()
Date: Thu, 25 Apr 2013 10:11:33 -0700 [thread overview]
Message-ID: <20130425171133.GB28848@us.ibm.com> (raw)
In-Reply-To: <1365582765-6939-1-git-send-email-michael@ellerman.id.au>
Michael Ellerman [michael@ellerman.id.au] wrote:
| From: Michael Ellerman <michaele@au1.ibm.com>
|
| On power8 the SIPR and SIHV are not in MMCRA, so convert the routines
| to take regs and change the names accordingly.
|
| Signed-off-by: Michael Ellerman <michaele@au1.ibm.com>
| ---
| arch/powerpc/perf/core-book3s.c | 20 +++++++++++---------
| 1 file changed, 11 insertions(+), 9 deletions(-)
|
| diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
| index fcfafa0..cb1618d 100644
| --- a/arch/powerpc/perf/core-book3s.c
| +++ b/arch/powerpc/perf/core-book3s.c
| @@ -112,24 +112,24 @@ static inline void perf_get_data_addr(struct pt_regs *regs, u64 *addrp)
| *addrp = mfspr(SPRN_SDAR);
| }
|
| -static bool mmcra_sihv(unsigned long mmcra)
| +static bool regs_sihv(struct pt_regs *regs)
| {
| unsigned long sihv = MMCRA_SIHV;
|
| if (ppmu->flags & PPMU_ALT_SIPR)
| sihv = POWER6_MMCRA_SIHV;
|
| - return !!(mmcra & sihv);
| + return !!(regs->dsisr & sihv);
| }
|
| -static bool mmcra_sipr(unsigned long mmcra)
| +static bool regs_sipr(struct pt_regs *regs)
| {
| unsigned long sipr = MMCRA_SIPR;
|
Would it make sense to add this here:
if (ppmu->flags & PPMU_NO_SIPR)
return 0;
so ....
| if (ppmu->flags & PPMU_ALT_SIPR)
| sipr = POWER6_MMCRA_SIPR;
|
| - return !!(mmcra & sipr);
| + return !!(regs->dsisr & sipr);
| }
|
| static inline u32 perf_flags_from_msr(struct pt_regs *regs)
| @@ -143,7 +143,6 @@ static inline u32 perf_flags_from_msr(struct pt_regs *regs)
|
| static inline u32 perf_get_misc_flags(struct pt_regs *regs)
| {
| - unsigned long mmcra = regs->dsisr;
| unsigned long use_siar = regs->result;
|
| if (!use_siar)
| @@ -163,10 +162,12 @@ static inline u32 perf_get_misc_flags(struct pt_regs *regs)
| }
|
| /* PR has priority over HV, so order below is important */
| - if (mmcra_sipr(mmcra))
| + if (regs_sipr(regs))
| return PERF_RECORD_MISC_USER;
| - if (mmcra_sihv(mmcra) && (freeze_events_kernel != MMCR0_FCHV))
| +
| + if (regs_sihv(regs) && (freeze_events_kernel != MMCR0_FCHV))
| return PERF_RECORD_MISC_HYPERVISOR;
| +
| return PERF_RECORD_MISC_KERNEL;
| }
|
| @@ -182,6 +183,8 @@ static inline void perf_read_regs(struct pt_regs *regs)
| int marked = mmcra & MMCRA_SAMPLE_ENABLE;
| int use_siar;
|
| + regs->dsisr = mmcra;
| +
| /*
| * If this isn't a PMU exception (eg a software event) the SIAR is
| * not valid. Use pt_regs.
| @@ -205,12 +208,11 @@ 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) && mmcra_sipr(mmcra))
| + else if (!(ppmu->flags & PPMU_NO_SIPR) && regs_sipr(regs))
... this becomes
else if (regs_sipr(regs))
mmcra_sipr() is used currently in two places and both places check
the NO_SIPR flag.
The reason is that this line gets modified in PATCH 3/4 to:
else if (!regs_no_sipr(regs) && regs_sipr(regs))
which is kind of hard to read. if (!not_X && X)
Sukadev
prev parent reply other threads:[~2013-04-25 17:11 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-10 8:32 [PATCH 1/4] powerpc/perf: Convert mmcra_sipr/sihv() to regs_sipr/sihv() Michael Ellerman
2013-04-10 8:32 ` [PATCH 2/4] powerpc/perf: Add an accessor for regs->result Michael Ellerman
2013-04-10 8:32 ` [PATCH 3/4] powerpc/perf: Add regs_no_sipr() Michael Ellerman
2013-04-10 8:32 ` [PATCH 4/4] powerpc/perf: Add support for SIER Michael Ellerman
2013-04-25 18:24 ` Sukadev Bhattiprolu
2013-04-25 17:11 ` Sukadev Bhattiprolu [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130425171133.GB28848@us.ibm.com \
--to=sukadev@linux.vnet.ibm.com \
--cc=linuxppc-dev@ozlabs.org \
--cc=michael@ellerman.id.au \
--cc=paulus@samba.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).