diff options
Diffstat (limited to 'tools/perf/util/env.c')
| -rw-r--r-- | tools/perf/util/env.c | 56 | 
1 files changed, 56 insertions, 0 deletions
diff --git a/tools/perf/util/env.c b/tools/perf/util/env.c index 3baca06786fb..6242a9215df7 100644 --- a/tools/perf/util/env.c +++ b/tools/perf/util/env.c @@ -2,6 +2,7 @@  #include "cpumap.h"  #include "debug.h"  #include "env.h" +#include "util/header.h"  #include <linux/ctype.h>  #include <linux/zalloc.h>  #include "bpf-event.h" @@ -179,6 +180,7 @@ void perf_env__exit(struct perf_env *env)  	zfree(&env->sibling_threads);  	zfree(&env->pmu_mappings);  	zfree(&env->cpu); +	zfree(&env->numa_map);  	for (i = 0; i < env->nr_numa_nodes; i++)  		perf_cpu_map__put(env->numa_nodes[i].map); @@ -256,6 +258,21 @@ int perf_env__read_cpu_topology_map(struct perf_env *env)  	return 0;  } +int perf_env__read_cpuid(struct perf_env *env) +{ +	char cpuid[128]; +	int err = get_cpuid(cpuid, sizeof(cpuid)); + +	if (err) +		return err; + +	free(env->cpuid); +	env->cpuid = strdup(cpuid); +	if (env->cpuid == NULL) +		return ENOMEM; +	return 0; +} +  static int perf_env__read_arch(struct perf_env *env)  {  	struct utsname uts; @@ -338,3 +355,42 @@ const char *perf_env__arch(struct perf_env *env)  	return normalize_arch(arch_name);  } + + +int perf_env__numa_node(struct perf_env *env, int cpu) +{ +	if (!env->nr_numa_map) { +		struct numa_node *nn; +		int i, nr = 0; + +		for (i = 0; i < env->nr_numa_nodes; i++) { +			nn = &env->numa_nodes[i]; +			nr = max(nr, perf_cpu_map__max(nn->map)); +		} + +		nr++; + +		/* +		 * We initialize the numa_map array to prepare +		 * it for missing cpus, which return node -1 +		 */ +		env->numa_map = malloc(nr * sizeof(int)); +		if (!env->numa_map) +			return -1; + +		for (i = 0; i < nr; i++) +			env->numa_map[i] = -1; + +		env->nr_numa_map = nr; + +		for (i = 0; i < env->nr_numa_nodes; i++) { +			int tmp, j; + +			nn = &env->numa_nodes[i]; +			perf_cpu_map__for_each_cpu(j, tmp, nn->map) +				env->numa_map[j] = i; +		} +	} + +	return cpu >= 0 && cpu < env->nr_numa_map ? env->numa_map[cpu] : -1; +}  |