Message ID | 20231014074159.1667880-2-leo.yan@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | perf cs-etm: Improve timestamp tracing | expand |
On 14/10/2023 08:41, Leo Yan wrote: > So far, it's impossible to validate timestamp trace in Arm CoreSight when > the perf is in the per-thread mode. E.g. for the command: > > perf record -e cs_etm/timestamp/ --per-thread -- ls > > The command enables config 'timestamp' for 'cs_etm' event in the > per-thread mode. In this case, the function cs_etm_validate_config() > directly bails out and skips validation. > > Given profiled process can be scheduled on any CPUs in the per-thread > mode, this patch validates timestamp tracing for all CPUs when detect > the CPU map is empty. > > Signed-off-by: Leo Yan <leo.yan@linaro.org> > Reviewed-by: James Clark <james.clark@arm.com> > --- > tools/perf/arch/arm/util/cs-etm.c | 13 +++++++++++-- > 1 file changed, 11 insertions(+), 2 deletions(-) > > diff --git a/tools/perf/arch/arm/util/cs-etm.c b/tools/perf/arch/arm/util/cs-etm.c > index b8d6a953fd74..cf9ef9ba800b 100644 > --- a/tools/perf/arch/arm/util/cs-etm.c > +++ b/tools/perf/arch/arm/util/cs-etm.c > @@ -205,8 +205,17 @@ static int cs_etm_validate_config(struct auxtrace_record *itr, > for (i = 0; i < cpu__max_cpu().cpu; i++) { > struct perf_cpu cpu = { .cpu = i, }; > > - if (!perf_cpu_map__has(event_cpus, cpu) || > - !perf_cpu_map__has(online_cpus, cpu)) > + /* > + * In per-cpu case, do the validation for CPUs to work with. > + * In per-thread case, the CPU map is empty. Since the traced > + * program can run on any CPUs in this case, thus don't skip > + * validation. > + */ > + if (!perf_cpu_map__empty(event_cpus) && > + !perf_cpu_map__has(event_cpus, cpu)) > + continue; > + > + if (!perf_cpu_map__has(online_cpus, cpu)) > continue; > Acked-by: Suzuki K Poulose <suzuki.poulose@arm.com>
diff --git a/tools/perf/arch/arm/util/cs-etm.c b/tools/perf/arch/arm/util/cs-etm.c index b8d6a953fd74..cf9ef9ba800b 100644 --- a/tools/perf/arch/arm/util/cs-etm.c +++ b/tools/perf/arch/arm/util/cs-etm.c @@ -205,8 +205,17 @@ static int cs_etm_validate_config(struct auxtrace_record *itr, for (i = 0; i < cpu__max_cpu().cpu; i++) { struct perf_cpu cpu = { .cpu = i, }; - if (!perf_cpu_map__has(event_cpus, cpu) || - !perf_cpu_map__has(online_cpus, cpu)) + /* + * In per-cpu case, do the validation for CPUs to work with. + * In per-thread case, the CPU map is empty. Since the traced + * program can run on any CPUs in this case, thus don't skip + * validation. + */ + if (!perf_cpu_map__empty(event_cpus) && + !perf_cpu_map__has(event_cpus, cpu)) + continue; + + if (!perf_cpu_map__has(online_cpus, cpu)) continue; err = cs_etm_validate_context_id(itr, evsel, i);