mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-02 09:51:21 -04:00
perf arm-spe: Introduce arm_spe__is_homogeneous()
Introduce the arm_spe__is_homogeneous() function, it uses to check if Arm SPE is homogeneous cross all CPUs. Signed-off-by: Leo Yan <leo.yan@arm.com> Reviewed-by: James Clark <james.clark@linaro.org> Link: https://lore.kernel.org/r/20241003185322.192357-4-leo.yan@arm.com Signed-off-by: Namhyung Kim <namhyung@kernel.org>
This commit is contained in:
@@ -82,6 +82,7 @@ struct arm_spe {
|
||||
u64 **metadata;
|
||||
u64 metadata_ver;
|
||||
u64 metadata_nr_cpu;
|
||||
bool is_homogeneous;
|
||||
};
|
||||
|
||||
struct arm_spe_queue {
|
||||
@@ -1374,6 +1375,30 @@ arm_spe_synth_events(struct arm_spe *spe, struct perf_session *session)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool arm_spe__is_homogeneous(u64 **metadata, int nr_cpu)
|
||||
{
|
||||
u64 midr;
|
||||
int i;
|
||||
|
||||
if (!nr_cpu)
|
||||
return false;
|
||||
|
||||
for (i = 0; i < nr_cpu; i++) {
|
||||
if (!metadata[i])
|
||||
return false;
|
||||
|
||||
if (i == 0) {
|
||||
midr = metadata[i][ARM_SPE_CPU_MIDR];
|
||||
continue;
|
||||
}
|
||||
|
||||
if (midr != metadata[i][ARM_SPE_CPU_MIDR])
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int arm_spe_process_auxtrace_info(union perf_event *event,
|
||||
struct perf_session *session)
|
||||
{
|
||||
@@ -1419,6 +1444,7 @@ int arm_spe_process_auxtrace_info(union perf_event *event,
|
||||
spe->metadata = metadata;
|
||||
spe->metadata_ver = metadata_ver;
|
||||
spe->metadata_nr_cpu = nr_cpu;
|
||||
spe->is_homogeneous = arm_spe__is_homogeneous(metadata, nr_cpu);
|
||||
|
||||
spe->timeless_decoding = arm_spe__is_timeless_decoding(spe);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user