Re: [PATCH 6/6] perf tools: arm-spe: fix record hang after being terminated

From: James Clark
Date: Wed Jan 15 2020 - 07:02:34 EST


Hi Xiaojun,

I've tested this and it all seems to be working OK. I only have one final change to propose, that if we unset precise_ip, along with this change
http://lists.infradead.org/pipermail/linux-arm-kernel/2020-January/705720.html we will get feedback if an event is not supported in precise mode.

diff --git a/tools/perf/util/arm-spe.c b/tools/perf/util/arm-spe.c
index 0fcaefd386a6..a3c23d289482 100644
--- a/tools/perf/util/arm-spe.c
+++ b/tools/perf/util/arm-spe.c
@@ -937,6 +937,7 @@ void arm_spe_precise_ip_support(struct evlist *evlist, struct evsel *evsel)
evsel->core.attr.config = SPE_ATTR_TS_ENABLE
| SPE_ATTR_BRANCH_FILTER;
evsel->core.attr.config1 = SPE_ATTR_EV_BRANCH;
+ evsel->core.attr.precise_ip = 0;
}
}
}

Thanks
James

On 18/12/2019 07:54, Tan Xiaojun wrote:
> From: Wei Li <liwei391@xxxxxxxxxx>
>
> If the spe event is terminated, we don't enable it again here.
>
> Signed-off-by: Wei Li <liwei391@xxxxxxxxxx>
> Tested-by: Qi Liu <liuqi115@xxxxxxxxxxxxx>
> ---
> tools/perf/arch/arm64/util/arm-spe.c | 10 +++++++---
> 1 file changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/tools/perf/arch/arm64/util/arm-spe.c b/tools/perf/arch/arm64/util/arm-spe.c
> index eba6541ec0f1..629badda724d 100644
> --- a/tools/perf/arch/arm64/util/arm-spe.c
> +++ b/tools/perf/arch/arm64/util/arm-spe.c
> @@ -165,9 +165,13 @@ static int arm_spe_read_finish(struct auxtrace_record *itr, int idx)
> struct evsel *evsel;
>
> evlist__for_each_entry(sper->evlist, evsel) {
> - if (evsel->core.attr.type == sper->arm_spe_pmu->type)
> - return perf_evlist__enable_event_idx(sper->evlist,
> - evsel, idx);
> + if (evsel->core.attr.type == sper->arm_spe_pmu->type) {
> + if (evsel->terminated)
> + return 0;
> + else
> + return perf_evlist__enable_event_idx(
> + sper->evlist, evsel, idx);
> + }
> }
> return -EINVAL;
> }
>