From: Jiri Olsa <jolsa@redhat.com>
To: "Wangnan (F)" <wangnan0@huawei.com>
Cc: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>,
linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
Yury Norov <ynorov@caviumnetworks.com>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Jiri Olsa <jolsa@kernel.org>,
Adrian Hunter <adrian.hunter@intel.com>,
Kan Liang <kan.liang@intel.com>,
Michael Ellerman <mpe@ellerman.id.au>
Subject: Re: [PATCH v2] tools/perf: Fix the mask in regs_dump__printf and
Date: Mon, 20 Jun 2016 11:40:03 +0200 [thread overview]
Message-ID: <20160620094003.GA32172@krava> (raw)
In-Reply-To: <5767B6FD.4080708@huawei.com>
On Mon, Jun 20, 2016 at 05:27:25PM +0800, Wangnan (F) wrote:
>
>
> On 2016/6/20 17:18, Jiri Olsa wrote:
> > On Mon, Jun 20, 2016 at 02:14:01PM +0530, Madhavan Srinivasan wrote:
> > > When decoding the perf_regs mask in regs_dump__printf(),
> > > we loop through the mask using find_first_bit and find_next_bit functions.
> > > "mask" is of type "u64", but sent as a "unsigned long *" to
> > > lib functions along with sizeof(). While the exisitng code works fine in
> > > most of the case, the logic is broken when using a 32bit perf on a
> > > 64bit kernel (Big Endian). We end up reading the wrong word of the u64
> > > first in the lib functions.
> > hum, I still don't see why this happens.. why do we read the
> > wrong word in this case?
>
> If you read a u64 using (u32 *)(&val)[0] and (u32 *)(&val)[1]
> you can get wrong value. This is what _find_next_bit() is doing.
>
> In a big endian environment where 'unsigned long' is 32 bits
> long, "(u32 *)(&val)[0]" gets upper 32 bits, but without this patch
> perf assumes it gets lower 32 bits. The root cause is wrongly convert
> u64 value to bitmap.
i see, could you please put this into comment in the code?
also we could have common function for that, to keep it on
one place only, like bitmap_from_u64 or so
thanks,
jirka
next prev parent reply other threads:[~2016-06-20 9:40 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-20 8:44 [PATCH v2] tools/perf: Fix the mask in regs_dump__printf and Madhavan Srinivasan
2016-06-20 9:18 ` Jiri Olsa
2016-06-20 9:27 ` Wangnan (F)
2016-06-20 9:40 ` Jiri Olsa [this message]
2016-06-20 9:52 ` Madhavan Srinivasan
2016-06-20 9:19 ` Jiri Olsa
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=20160620094003.GA32172@krava \
--to=jolsa@redhat.com \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=jolsa@kernel.org \
--cc=kan.liang@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=maddy@linux.vnet.ibm.com \
--cc=mingo@redhat.com \
--cc=mpe@ellerman.id.au \
--cc=peterz@infradead.org \
--cc=wangnan0@huawei.com \
--cc=ynorov@caviumnetworks.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;
as well as URLs for NNTP newsgroup(s).