From: Michael Ellerman <mpe@ellerman.id.au>
To: Peter Zijlstra <peterz@infradead.org>,
Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>,
Ingo Molnar <mingo@redhat.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Wang Nan <wangnan0@huawei.com>,
Alexei Starovoitov <ast@kernel.org>,
Stephane Eranian <eranian@google.com>
Subject: Re: [PATCH v2 1/6] powerpc/perf: Define big-endian version of perf_mem_data_src
Date: Wed, 15 Mar 2017 17:20:15 +1100 [thread overview]
Message-ID: <8737efukm8.fsf@concordia.ellerman.id.au> (raw)
In-Reply-To: <20170314125626.GE3328@twins.programming.kicks-ass.net>
Hi Peter,
Peter Zijlstra <peterz@infradead.org> writes:
> On Tue, Mar 14, 2017 at 02:31:51PM +0530, Madhavan Srinivasan wrote:
>
>> >Huh? PPC hasn't yet implemented this? Then why are you fixing it?
>>
>> yes, PPC hasn't implemented this (until now).
>
> until now where?
On powerpc there is currently no kernel support for filling the data_src
value with anything meaningful.
A user can still request PERF_SAMPLE_DATA_SRC (perf report -d), but they
just get the default value from perf_sample_data_init(), which is
PERF_MEM_NA.
Though even that is currently broken with a big endian perf tool.
>> And did not understand "Then why are you fixing it?"
>
> I see no implementation; so why are you poking at it.
Maddy has posted an implementation of the kernel part for powerpc in
patch 2 of this series, but maybe you're not on Cc?
Regardless of us wanting to do the kernel side on powerpc, the current
API is broken on big endian.
That's because in the kernel the PERF_MEM_NA value is constructed using
shifts:
/* TLB access */
#define PERF_MEM_TLB_NA 0x01 /* not available */
...
#define PERF_MEM_TLB_SHIFT 26
#define PERF_MEM_S(a, s) \
(((__u64)PERF_MEM_##a##_##s) << PERF_MEM_##a##_SHIFT)
#define PERF_MEM_NA (PERF_MEM_S(OP, NA) |\
PERF_MEM_S(LVL, NA) |\
PERF_MEM_S(SNOOP, NA) |\
PERF_MEM_S(LOCK, NA) |\
PERF_MEM_S(TLB, NA))
Which works out as:
((0x01 << 0) | (0x01 << 5) | (0x01 << 19) | (0x01 << 24) | (0x01 << 26))
Which means the PERF_MEM_NA value comes out of the kernel as 0x5080021
in CPU endian.
But then in the perf tool, the code uses the bitfields to inspect the
value, and currently the bitfields are defined using little endian
ordering.
So eg. in perf_mem__tlb_scnprintf() we see:
data_src->val = 0x5080021
op = 0x0
lvl = 0x0
snoop = 0x0
lock = 0x0
dtlb = 0x0
rsvd = 0x5080021
So this patch does what I think is the minimal fix, of changing the
definition of the bitfields to match the values that are already
exported by the kernel on big endian. And it makes no change on little
endian.
cheers
next prev parent reply other threads:[~2017-03-15 6:20 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-06 10:43 [PATCH v2 0/6] powerpc/perf: Export memory hierarchy level Madhavan Srinivasan
2017-03-06 10:43 ` [PATCH v2 1/6] powerpc/perf: Define big-endian version of perf_mem_data_src Madhavan Srinivasan
2017-03-06 11:22 ` Peter Zijlstra
2017-03-06 14:59 ` David Laight
2017-03-06 15:28 ` Peter Zijlstra
2017-03-07 9:58 ` Madhavan Srinivasan
2017-03-07 10:23 ` Peter Zijlstra
2017-03-13 11:15 ` Madhavan Srinivasan
2017-03-13 12:50 ` Peter Zijlstra
2017-03-14 9:01 ` Madhavan Srinivasan
2017-03-14 12:56 ` Peter Zijlstra
2017-03-15 6:20 ` Michael Ellerman [this message]
2017-03-15 12:23 ` Peter Zijlstra
2017-03-16 5:53 ` Madhavan Srinivasan
2017-03-16 5:47 ` Madhavan Srinivasan
2017-03-06 10:43 ` [PATCH v2 2/6] powerpc/perf: Export memory hierarchy info to user space Madhavan Srinivasan
2017-03-13 19:21 ` Sukadev Bhattiprolu
2017-03-06 10:43 ` [PATCH v2 3/6] powerpc/perf: Support to export MMCRA[TEC*] field to userspace Madhavan Srinivasan
2017-03-06 10:43 ` [PATCH v2 4/6] powerpc/perf: Support to export SIERs bit in Power8 Madhavan Srinivasan
2017-03-06 10:43 ` [PATCH v2 5/6] powerpc/perf: Support to export SIERs bit in Power9 Madhavan Srinivasan
2017-03-06 10:43 ` [PATCH v2 6/6] powerpc/perf: Add Power8 mem_access event to sysfs Madhavan Srinivasan
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=8737efukm8.fsf@concordia.ellerman.id.au \
--to=mpe@ellerman.id.au \
--cc=acme@kernel.org \
--cc=alexander.shishkin@linux.intel.com \
--cc=ast@kernel.org \
--cc=eranian@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=maddy@linux.vnet.ibm.com \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=sukadev@linux.vnet.ibm.com \
--cc=wangnan0@huawei.com \
/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