• Ravi Bangoria's avatar
    perf/ibs: Fix interface via core pmu events · 2fad201f
    Ravi Bangoria authored
    Although, IBS pmus can be invoked via their own interface, indirect
    IBS invocation via core pmu events is also supported with fixed set
    of events: cpu-cycles:p, r076:p (same as cpu-cycles:p) and r0C1:p
    (micro-ops) for user convenience.
    
    This indirect IBS invocation is broken since commit 66d258c5
    ("perf/core: Optimize perf_init_event()"), which added RAW pmu under
    'pmu_idr' list and thus if event_init() fails with RAW pmu, it started
    returning error instead of trying other pmus.
    
    Forward precise events from core pmu to IBS by overwriting 'type' and
    'config' in the kernel copy of perf_event_attr. Overwriting will cause
    perf_init_event() to retry with updated 'type' and 'config', which will
    automatically forward event to IBS pmu.
    
    Without patch:
      $ sudo ./perf record -C 0 -e r076:p -- sleep 1
      Error:
      The r076:p event is not supported.
    
    With patch:
      $ sudo ./perf record -C 0 -e r076:p -- sleep 1
      [ perf record: Woken up 1 times to write data ]
      [ perf record: Captured and wrote 0.341 MB perf.data (37 samples) ]
    
    Fixes: 66d258c5 ("perf/core: Optimize perf_init_event()")
    Reported-by: default avatarStephane Eranian <eranian@google.com>
    Signed-off-by: default avatarRavi Bangoria <ravi.bangoria@amd.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lkml.kernel.org/r/20230504110003.2548-3-ravi.bangoria@amd.com
    2fad201f
core.c 38.6 KB