• Mark Rutland's avatar
    perf stat: Balance opening and reading events · 00e727bb
    Mark Rutland authored
    In create_perf_stat_counter, when a target CPU has not been provided, we
    call __perf_evsel__open with empty_cpu_map, and open a single FD per
    thread. However, in read_counter we assume that we opened events for the
    product of threads and CPUs described in the evsel's cpu_map.
    
    Thus, if an evsel has a cpu_map with more than one entry, we will
    attempt to access FDs that we didn't open. This could result in a number
    of problems (e.g. blocking while reading from STDIN if the fd memory
    happened to be initialised to zero).
    
    This is problematic for systems were a logical CPU PMU covers some
    arbitrary subset of CPUs. The cpu_map of any evsel for that PMU will be
    initialised based on the cpumask exposed through sysfs, even if the user
    requests per-thread events.
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: He Kuang <hekuang@huawei.com>
    Cc: Kan Liang <kan.liang@intel.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Wang Nan <wangnan0@huawei.com>
    Link: http://lkml.kernel.org/r/1468577293-19667-2-git-send-email-mark.rutland@arm.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    00e727bb
builtin-stat.c 62.7 KB