• Mark Rutland's avatar
    perf evlist: Only open events on CPUs an evsel permits · 9f21b815
    Mark Rutland authored
    In systems with heterogeneous CPU PMUs, it's possible for each evsel to
    cover a distinct set of CPUs, and hence the cpu_map associated with each
    evsel may have a distinct idx<->id mapping. Any of these may be distinct
    from the evlist's cpu map.
    
    Events can be tied to the same fd so long as they use the same per-cpu
    ringbuffer (i.e. so long as they are on the same CPU). To acquire the
    correct FDs, we must compare the Linux logical IDs rather than the evsel
    or evlist indices.
    
    This path adds logic to perf_evlist__mmap_per_evsel to handle this,
    translating IDs as required. As PMUs may cover a subset of CPUs from the
    evlist, we skip the CPUs a PMU cannot handle.
    
    Without this patch, perf record may try to mmap erroneous FDs on
    heterogeneous systems, and will bail out early rather than running the
    workload.
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Will Deacon <will.deacon@arm.com>
    Link: http://lkml.kernel.org/r/1473330112-28528-7-git-send-email-mark.rutland@arm.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    9f21b815
evlist.c 46 KB