perf stat: Check PMU cpumask file
If user doesn't explicitly specify CPU list, perf-stat only collects events on CPUs listed in the PMU cpumask file. Signed-off-by: "Yah, Zheng" <zheng.z.yan@intel.com> Cc: Andi Kleen <andi@firstfloor.org> Cc: Ingo Molnar <mingo@elte.hu> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/r/1347263631-23175-3-git-send-email-zheng.z.yan@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:

committed by
Arnaldo Carvalho de Melo

parent
314d9f63f3
commit
7ae92e744e
@@ -9,6 +9,7 @@
|
||||
#include "util.h"
|
||||
#include "pmu.h"
|
||||
#include "parse-events.h"
|
||||
#include "cpumap.h"
|
||||
|
||||
#define EVENT_SOURCE_DEVICE_PATH "/bus/event_source/devices/"
|
||||
|
||||
@@ -253,6 +254,33 @@ static void pmu_read_sysfs(void)
|
||||
closedir(dir);
|
||||
}
|
||||
|
||||
static struct cpu_map *pmu_cpumask(char *name)
|
||||
{
|
||||
struct stat st;
|
||||
char path[PATH_MAX];
|
||||
const char *sysfs;
|
||||
FILE *file;
|
||||
struct cpu_map *cpus;
|
||||
|
||||
sysfs = sysfs_find_mountpoint();
|
||||
if (!sysfs)
|
||||
return NULL;
|
||||
|
||||
snprintf(path, PATH_MAX,
|
||||
"%s/bus/event_source/devices/%s/cpumask", sysfs, name);
|
||||
|
||||
if (stat(path, &st) < 0)
|
||||
return NULL;
|
||||
|
||||
file = fopen(path, "r");
|
||||
if (!file)
|
||||
return NULL;
|
||||
|
||||
cpus = cpu_map__read(file);
|
||||
fclose(file);
|
||||
return cpus;
|
||||
}
|
||||
|
||||
static struct perf_pmu *pmu_lookup(char *name)
|
||||
{
|
||||
struct perf_pmu *pmu;
|
||||
@@ -275,6 +303,8 @@ static struct perf_pmu *pmu_lookup(char *name)
|
||||
if (!pmu)
|
||||
return NULL;
|
||||
|
||||
pmu->cpus = pmu_cpumask(name);
|
||||
|
||||
pmu_aliases(name, &aliases);
|
||||
|
||||
INIT_LIST_HEAD(&pmu->format);
|
||||
|
Reference in New Issue
Block a user