]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
perf/core: Inherit event_caps
authorNamhyung Kim <namhyung@kernel.org>
Mon, 28 Mar 2022 20:01:12 +0000 (13:01 -0700)
committerStefan Bader <stefan.bader@canonical.com>
Fri, 20 May 2022 12:41:20 +0000 (14:41 +0200)
BugLink: https://bugs.launchpad.net/bugs/1969107
commit e3265a4386428d3d157d9565bb520aabff8b4bf0 upstream.

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: Namhyung Kim <namhyung@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: <stable@vger.kernel.org>
Link: https://lkml.kernel.org/r/20220328200112.457740-1-namhyung@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit fcf9ccf9d26a13d4a10ee6b167e429d96db97fe4)
Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>
kernel/events/core.c

index 69e4f46a70c0b5a032338992ca29225620f56997..637e277266c6c048a5a6510133c8cd81b9a96d08 100644 (file)
@@ -11601,6 +11601,9 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu,
 
        event->state            = PERF_EVENT_STATE_INACTIVE;
 
+       if (parent_event)
+               event->event_caps = parent_event->event_caps;
+
        if (event->attr.sigtrap)
                atomic_set(&event->event_limit, 1);