linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Namhyung Kim <namhyung@kernel.org>
To: Kim Phillips <kim.phillips@arm.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>,
	Jiri Olsa <jolsa@redhat.com>, Jiri Olsa <jolsa@kernel.org>,
	lkml <linux-kernel@vger.kernel.org>,
	Ingo Molnar <mingo@kernel.org>, David Ahern <dsahern@gmail.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	kernel-team@lge.com
Subject: Re: [PATCH] Revert "perf machine: Fix paranoid check in machine__set_kernel_mmap()"
Date: Fri, 13 Apr 2018 16:36:20 +0900	[thread overview]
Message-ID: <20180413073620.GA21386@danjae.aot.lge.com> (raw)
In-Reply-To: <20180412190954.4c76039100b990675ec390bd@arm.com>

On Thu, Apr 12, 2018 at 07:09:54PM -0500, Kim Phillips wrote:
> On Thu, 12 Apr 2018 10:57:56 +0900
> Namhyung Kim <namhyung@kernel.org> wrote:
> 
> > On Wed, Apr 11, 2018 at 07:29:40PM -0500, Kim Phillips wrote:
> > > On Thu, 12 Apr 2018 08:31:09 +0900
> > > Namhyung Kim <namhyung@kernel.org> wrote:
> > > > overflow can create it..  could you please show me the mmap event?
> > > > 
> > > >   $ perf script --show-mmap-events
> > > 
> > > Here you go:
> > > 
> > >          swapper     0 [000]     0.000000: PERF_RECORD_MMAP -1/0: [0xffff200008080000(0xdffff7f7ffff) @ 0xffff200008080000]: x [kernel.kallsyms]_text
> > 
> >    0xffff200008080000
> >  +     0xdffff7f7ffff
> >  --------------------
> >    0xffffffffffffffff
> > 
> > So it should have ~0ULL of the 'end' already.  I don't know why it
> > caused the problem..  Was it from the `perf.good`?
> 
> There's no difference between the output of perf.good and perf.bad (the
> difference between them is this reversion patch, .good being the one
> that includes it).

Strange.. I have no idea what's the problem if the end is already
~0ULL then.


> 
> > >          swapper     0 [000]     0.000000: PERF_RECORD_MMAP -1/0: [0xffff2000021e0000(0x18000) @ 0]: x /lib/modules/4.16.0+/kernel/drivers/bus/arm-ccn.ko
> > 
> > Hmm.. also it seems arm64 loads modules under the kernel.  Then the
> > fixup logic in machine__create_kernel_maps() won't work.  Also as we
> 
> you mean this:
> 
> void __map_groups__fixup_end(struct map_groups *mg, enum map_type type)
> ...
>                 if (!curr->end)
>                         curr->end = next->start;
> 
> ?

Right.  For the fixup routine to work, a map should have 0 end.


> Module symbol resolution is working, however.  Maybe because this
> 'paranoid' check was setting all the end addresses to ~0ULL?

Only if the end was 0.  Modules should have non-zero end.


> Does the
> design assume what maps__first() returns always has the lowest address,
> and they're in sorted order?  If so, what's the fix, to re-sort
> map_groups afterwards?

I think it's another problem but agree with you to fix it sorted.


> 
> > don't use the map_groups__fixup_end() anymore 
> 
> ?  I see map_groups__fixup_end() still being called.

Oops, sorry.  I looked a wrong branch (which I removed it but never
sent to the LKML).


> 
> > I think it's ok just checking the end address.
> 
> Where?  In machine__set_kernel_mmap(), like this reversion does?

Yes, the reason is all other maps (i.e. modules) are already have
non-zero end and we can fixup the end of kernel manually.


> 
> The original commit says:
> 
>     The machine__set_kernel_mmap() is to setup addresses of the kernel map
>     using external info.  But it has a check when the address is given from
>     an incorrect input which should have the start and end address of 0
>     (i.e. machine__process_kernel_mmap_event).
>     
>     But we also use the end address of 0 for a valid input so change it to
>     check both start and end addresses.
> 
> yet the comment above the code says:
> 
>                  * Be a bit paranoid here, some perf.data file came with
>                  * a zero sized synthesized MMAP event for the kernel.
> 
> I tracked the first comment insertion down to this commit:
> 
> commit 10fe12ef631a7e85022ed26304a37f033a6a95b8
> Author: Arnaldo Carvalho de Melo <acme@redhat.com>
> Date:   Sat Feb 20 19:53:13 2010 -0200
> 
>     perf symbols: Fix up map end too on modular kernels with no modules installed
>     
>     In 2161db9 we stopped failing when not finding modules when
>     asked too, but then the kernel maps (just one, for vmlinux)
>     wasn't having its ->end field correctly set up, so symbols were
>     not being found for the vmlinux map because its range was 0-0.
> 
> which, when reading that last part, one would assume start == end == 0,
> therefore size also == 0, the comment only talks about a zero *sized*
> event...so did the original commit 1d12cec6ce99 "perf machine: Fix
> paranoid check in machine__set_kernel_mmap()" really fix that case?
> Because it checks start == 0, not necessarily the size...

As I said I thought it only cares the start == end == 0 case and now
the problem is fixed.  So I added the start check for the fixup
routine to take care of the end address.  Otherwise kernel might have
an overlap with some module(s).

> 
> If not, can it be reverted until we figure out what's going on with
> arm64?  It's causing a regression in the meantime...

I think the right solution would be

1. sort map groups
2. set kernel end to ~0ULL in machine__create_kernel_maps()
3. fix the kernel end to the start of next module (if any) manually
   instead of calling map_groups__fixup_end()

Thanks,
Namhyung

  reply	other threads:[~2018-04-13  7:40 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-15 12:26 [PATCHv3 0/9] perf tool: Assorted fixes Jiri Olsa
2018-02-15 12:26 ` [PATCH 1/9] tools lib symbol: Skip non-address kallsyms line Jiri Olsa
2018-02-17 11:24   ` [tip:perf/core] " tip-bot for Jiri Olsa
2018-02-15 12:26 ` [PATCH 2/9] perf tools: Check if we read regular file in dso__load Jiri Olsa
2018-02-17 11:24   ` [tip:perf/core] perf symbols: Check if we read regular file in dso__load() tip-bot for Jiri Olsa
2018-02-15 12:26 ` [PATCH 3/9] perf tools: Free root_dir in machine__init error path Jiri Olsa
2018-02-17 11:25   ` [tip:perf/core] perf machine: Free root_dir in machine__init() " tip-bot for Jiri Olsa
2018-02-15 12:26 ` [PATCH 4/9] perf tools: Move kernel mmap name into struct machine Jiri Olsa
2018-02-17 11:25   ` [tip:perf/core] perf machine: " tip-bot for Jiri Olsa
2018-02-15 12:26 ` [PATCH 5/9] perf tools: Generalize machine__set_kernel_mmap function Jiri Olsa
2018-02-17 11:26   ` [tip:perf/core] perf machine: Generalize machine__set_kernel_mmap() tip-bot for Jiri Olsa
2018-02-15 12:26 ` [PATCH 6/9] perf tools: Don't search for active kernel start in __machine__create_kernel_maps Jiri Olsa
2018-02-17 11:26   ` [tip:perf/core] perf machine: " tip-bot for Jiri Olsa
2018-02-19  2:20   ` [PATCH 6/9] perf tools: " Namhyung Kim
2018-02-19 10:01     ` Jiri Olsa
2018-02-19 10:19       ` Namhyung Kim
2018-02-19 10:49         ` Jiri Olsa
2018-02-19 12:18           ` Arnaldo Carvalho de Melo
2018-04-11 23:07             ` [PATCH] Revert "perf machine: Fix paranoid check in machine__set_kernel_mmap()" Kim Phillips
2018-04-11 23:31               ` Namhyung Kim
2018-04-12  0:29                 ` Kim Phillips
2018-04-12  1:57                   ` Namhyung Kim
2018-04-13  0:09                     ` Kim Phillips
2018-04-13  7:36                       ` Namhyung Kim [this message]
2018-02-21 10:25         ` [tip:perf/core] perf machine: Fix paranoid check in machine__set_kernel_mmap() tip-bot for Namhyung Kim
2018-02-19 12:21     ` [PATCH 6/9] perf tools: Don't search for active kernel start in __machine__create_kernel_maps Arnaldo Carvalho de Melo
2018-02-19 14:05       ` Namhyung Kim
2018-02-15 12:26 ` [PATCH 7/9] perf tools: Remove machine__load_kallsyms function Jiri Olsa
2018-02-17 11:27   ` [tip:perf/core] perf machine: Remove machine__load_kallsyms() tip-bot for Jiri Olsa
2018-02-15 12:26 ` [PATCH 8/9] perf tools: Do not create kernel maps in sample__resolve Jiri Olsa
2018-02-17 11:27   ` [tip:perf/core] perf tools: Do not create kernel maps in sample__resolve() tip-bot for Jiri Olsa
2018-02-15 12:26 ` [PATCH 9/9] perf tests: Use arch__compare_symbol_names to compare symbols Jiri Olsa
2018-02-15 14:27   ` Arnaldo Carvalho de Melo
2018-02-15 14:48     ` Naveen N. Rao
2018-02-15 15:10       ` Arnaldo Carvalho de Melo
2018-02-17 11:28   ` [tip:perf/core] " tip-bot for 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=20180413073620.GA21386@danjae.aot.lge.com \
    --to=namhyung@kernel.org \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@kernel.org \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=dsahern@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=jolsa@redhat.com \
    --cc=kernel-team@lge.com \
    --cc=kim.phillips@arm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.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).