From: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
To: kan.liang@linux.intel.com
Cc: jolsa@redhat.com, peterz@infradead.org, mingo@redhat.com,
linux-kernel@vger.kernel.org, namhyung@kernel.org,
adrian.hunter@intel.com, mathieu.poirier@linaro.org,
ravi.bangoria@linux.ibm.com, alexey.budankov@linux.intel.com,
vitaly.slobodskoy@intel.com, pavel.gerasimov@intel.com,
mpe@ellerman.id.au, eranian@google.com, ak@linux.intel.com
Subject: Re: [PATCH V3 05/17] perf machine: Remove the indent in resolve_lbr_callchain_sample
Date: Wed, 18 Mar 2020 16:50:45 -0300 [thread overview]
Message-ID: <20200318195045.GT11531@kernel.org> (raw)
In-Reply-To: <20200313183319.17739-6-kan.liang@linux.intel.com>
Em Fri, Mar 13, 2020 at 11:33:07AM -0700, kan.liang@linux.intel.com escreveu:
> From: Kan Liang <kan.liang@linux.intel.com>
>
> The indent is unnecessary in resolve_lbr_callchain_sample.
> Removing it will make the following patch simpler.
>
> Current code path for resolve_lbr_callchain_sample()
>
> /* LBR only affects the user callchain */
> if (i != chain_nr) {
> body of the function
> ....
> return 1;
> }
>
> return 0;
>
> With the patch,
>
> /* LBR only affects the user callchain */
> if (i == chain_nr)
> return 0;
>
> body of the function
> ...
> return 1;
>
> No functional changes.
Thanks for doing this,
- Arnaldo
> Reviewed-by: Andi Kleen <ak@linux.intel.com>
> Signed-off-by: Kan Liang <kan.liang@linux.intel.com>
> ---
> tools/perf/util/machine.c | 123 +++++++++++++++++++-------------------
> 1 file changed, 63 insertions(+), 60 deletions(-)
>
> diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c
> index fd14f1489802..9021e5b6a2a9 100644
> --- a/tools/perf/util/machine.c
> +++ b/tools/perf/util/machine.c
> @@ -2177,6 +2177,12 @@ static int resolve_lbr_callchain_sample(struct thread *thread,
> int chain_nr = min(max_stack, (int)chain->nr), i;
> u8 cpumode = PERF_RECORD_MISC_USER;
> u64 ip, branch_from = 0;
> + struct branch_stack *lbr_stack;
> + struct branch_entry *entries;
> + int lbr_nr, j, k;
> + bool branch;
> + struct branch_flags *flags;
> + int mix_chain_nr;
>
> for (i = 0; i < chain_nr; i++) {
> if (chain->ips[i] == PERF_CONTEXT_USER)
> @@ -2184,71 +2190,68 @@ static int resolve_lbr_callchain_sample(struct thread *thread,
> }
>
> /* LBR only affects the user callchain */
> - if (i != chain_nr) {
> - struct branch_stack *lbr_stack = sample->branch_stack;
> - struct branch_entry *entries = perf_sample__branch_entries(sample);
> - int lbr_nr = lbr_stack->nr, j, k;
> - bool branch;
> - struct branch_flags *flags;
> - /*
> - * LBR callstack can only get user call chain.
> - * The mix_chain_nr is kernel call chain
> - * number plus LBR user call chain number.
> - * i is kernel call chain number,
> - * 1 is PERF_CONTEXT_USER,
> - * lbr_nr + 1 is the user call chain number.
> - * For details, please refer to the comments
> - * in callchain__printf
> - */
> - int mix_chain_nr = i + 1 + lbr_nr + 1;
> -
> - for (j = 0; j < mix_chain_nr; j++) {
> - int err;
> - branch = false;
> - flags = NULL;
> + if (i == chain_nr)
> + return 0;
>
> - if (callchain_param.order == ORDER_CALLEE) {
> - if (j < i + 1)
> - ip = chain->ips[j];
> - else if (j > i + 1) {
> - k = j - i - 2;
> - ip = entries[k].from;
> - branch = true;
> - flags = &entries[k].flags;
> - } else {
> - ip = entries[0].to;
> - branch = true;
> - flags = &entries[0].flags;
> - branch_from = entries[0].from;
> - }
> + lbr_stack = sample->branch_stack;
> + entries = perf_sample__branch_entries(sample);
> + lbr_nr = lbr_stack->nr;
> + /*
> + * LBR callstack can only get user call chain.
> + * The mix_chain_nr is kernel call chain
> + * number plus LBR user call chain number.
> + * i is kernel call chain number,
> + * 1 is PERF_CONTEXT_USER,
> + * lbr_nr + 1 is the user call chain number.
> + * For details, please refer to the comments
> + * in callchain__printf
> + */
> + mix_chain_nr = i + 1 + lbr_nr + 1;
> +
> + for (j = 0; j < mix_chain_nr; j++) {
> + int err;
> +
> + branch = false;
> + flags = NULL;
> +
> + if (callchain_param.order == ORDER_CALLEE) {
> + if (j < i + 1)
> + ip = chain->ips[j];
> + else if (j > i + 1) {
> + k = j - i - 2;
> + ip = entries[k].from;
> + branch = true;
> + flags = &entries[k].flags;
> } else {
> - if (j < lbr_nr) {
> - k = lbr_nr - j - 1;
> - ip = entries[k].from;
> - branch = true;
> - flags = &entries[k].flags;
> - }
> - else if (j > lbr_nr)
> - ip = chain->ips[i + 1 - (j - lbr_nr)];
> - else {
> - ip = entries[0].to;
> - branch = true;
> - flags = &entries[0].flags;
> - branch_from = entries[0].from;
> - }
> + ip = entries[0].to;
> + branch = true;
> + flags = &entries[0].flags;
> + branch_from = entries[0].from;
> + }
> + } else {
> + if (j < lbr_nr) {
> + k = lbr_nr - j - 1;
> + ip = entries[k].from;
> + branch = true;
> + flags = &entries[k].flags;
> + } else if (j > lbr_nr)
> + ip = chain->ips[i + 1 - (j - lbr_nr)];
> + else {
> + ip = entries[0].to;
> + branch = true;
> + flags = &entries[0].flags;
> + branch_from = entries[0].from;
> }
> -
> - err = add_callchain_ip(thread, cursor, parent,
> - root_al, &cpumode, ip,
> - branch, flags, NULL,
> - branch_from);
> - if (err)
> - return (err < 0) ? err : 0;
> }
> - return 1;
> - }
>
> - return 0;
> + err = add_callchain_ip(thread, cursor, parent,
> + root_al, &cpumode, ip,
> + branch, flags, NULL,
> + branch_from);
> + if (err)
> + return (err < 0) ? err : 0;
> + }
> + return 1;
> }
>
> static int find_prev_cpumode(struct ip_callchain *chain, struct thread *thread,
> --
> 2.17.1
>
--
- Arnaldo
next prev parent reply other threads:[~2020-03-18 19:50 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-13 18:33 [PATCH V3 00/17] Stitch LBR call stack (Perf Tools) kan.liang
2020-03-13 18:33 ` [PATCH V3 01/17] perf pmu: Add support for PMU capabilities kan.liang
2020-03-18 19:47 ` Arnaldo Carvalho de Melo
2020-03-19 13:07 ` Liang, Kan
2020-03-13 18:33 ` [PATCH V3 02/17] perf header: Support CPU " kan.liang
2020-03-18 19:49 ` Arnaldo Carvalho de Melo
2020-03-13 18:33 ` [PATCH V3 03/17] perf record: Clear HEADER_CPU_PMU_CAPS for non LBR call stack mode kan.liang
2020-03-13 18:33 ` [PATCH V3 04/17] perf stat: Clear HEADER_CPU_PMU_CAPS kan.liang
2020-03-13 18:33 ` [PATCH V3 05/17] perf machine: Remove the indent in resolve_lbr_callchain_sample kan.liang
2020-03-18 19:50 ` Arnaldo Carvalho de Melo [this message]
2020-03-13 18:33 ` [PATCH V3 06/17] perf machine: Refine the function for LBR call stack reconstruction kan.liang
2020-03-13 18:33 ` [PATCH V3 07/17] perf machine: Factor out lbr_callchain_add_kernel_ip() kan.liang
2020-03-13 18:33 ` [PATCH V3 08/17] perf machine: Factor out lbr_callchain_add_lbr_ip() kan.liang
2020-03-13 18:33 ` [PATCH V3 09/17] perf thread: Add a knob for LBR stitch approach kan.liang
2020-03-13 18:33 ` [PATCH V3 10/17] perf tools: Save previous sample for LBR stitching approach kan.liang
2020-03-18 12:14 ` Jiri Olsa
2020-03-18 14:20 ` Liang, Kan
2020-03-13 18:33 ` [PATCH V3 11/17] perf tools: Save previous cursor nodes " kan.liang
2020-03-13 18:33 ` [PATCH V3 12/17] perf tools: Stitch LBR call stack kan.liang
2020-03-13 18:33 ` [PATCH V3 13/17] perf report: Add option to enable the LBR stitching approach kan.liang
2020-03-13 18:33 ` [PATCH V3 14/17] perf script: " kan.liang
2020-03-13 18:33 ` [PATCH V3 15/17] perf top: " kan.liang
2020-03-18 12:14 ` Jiri Olsa
2020-03-18 14:19 ` Liang, Kan
2020-03-13 18:33 ` [PATCH V3 16/17] perf c2c: " kan.liang
2020-03-13 18:33 ` [PATCH V3 17/17] perf hist: Add fast path for duplicate entries check kan.liang
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=20200318195045.GT11531@kernel.org \
--to=arnaldo.melo@gmail.com \
--cc=adrian.hunter@intel.com \
--cc=ak@linux.intel.com \
--cc=alexey.budankov@linux.intel.com \
--cc=eranian@google.com \
--cc=jolsa@redhat.com \
--cc=kan.liang@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.poirier@linaro.org \
--cc=mingo@redhat.com \
--cc=mpe@ellerman.id.au \
--cc=namhyung@kernel.org \
--cc=pavel.gerasimov@intel.com \
--cc=peterz@infradead.org \
--cc=ravi.bangoria@linux.ibm.com \
--cc=vitaly.slobodskoy@intel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.