• Namhyung Kim's avatar
    perf/core: Inherit event_caps · e3265a43
    Namhyung Kim authored
    It was reported that some perf event setup can make fork failed on
    ARM64.  It was the case of a group of mixed hw and sw events and it
    failed in perf_event_init_task() due to armpmu_event_init().
    
    The ARM PMU code checks if all the events in a group belong to the
    same PMU except for software events.  But it didn't set the event_caps
    of inherited events and no longer identify them as software events.
    Therefore the test failed in a child process.
    
    A simple reproducer is:
    
      $ perf stat -e '{cycles,cs,instructions}' perf bench sched messaging
      # Running 'sched/messaging' benchmark:
      perf: fork(): Invalid argument
    
    The perf stat was fine but the perf bench failed in fork().  Let's
    inherit the event caps from the parent.
    Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: <stable@vger.kernel.org>
    Link: https://lkml.kernel.org/r/20220328200112.457740-1-namhyung@kernel.org
    e3265a43
core.c 324 KB