OSDN Git Service

perf/cgroup: Reorder perf_cgroup_connect()
authorPeter Zijlstra <peterz@infradead.org>
Fri, 14 Feb 2020 07:51:28 +0000 (23:51 -0800)
committerIngo Molnar <mingo@kernel.org>
Fri, 6 Mar 2020 10:56:58 +0000 (11:56 +0100)
Move perf_cgroup_connect() after perf_event_alloc(), such that we can
find/use the PMU's cpu context.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Ian Rogers <irogers@google.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Link: https://lkml.kernel.org/r/20200214075133.181299-2-irogers@google.com
kernel/events/core.c

index b7eaaba..dceeeb1 100644 (file)
@@ -10774,12 +10774,6 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu,
        if (!has_branch_stack(event))
                event->attr.branch_sample_type = 0;
 
-       if (cgroup_fd != -1) {
-               err = perf_cgroup_connect(cgroup_fd, event, attr, group_leader);
-               if (err)
-                       goto err_ns;
-       }
-
        pmu = perf_init_event(event);
        if (IS_ERR(pmu)) {
                err = PTR_ERR(pmu);
@@ -10801,6 +10795,12 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu,
                goto err_pmu;
        }
 
+       if (cgroup_fd != -1) {
+               err = perf_cgroup_connect(cgroup_fd, event, attr, group_leader);
+               if (err)
+                       goto err_pmu;
+       }
+
        err = exclusive_event_init(event);
        if (err)
                goto err_pmu;
@@ -10861,12 +10861,12 @@ err_per_task:
        exclusive_event_destroy(event);
 
 err_pmu:
+       if (is_cgroup_event(event))
+               perf_detach_cgroup(event);
        if (event->destroy)
                event->destroy(event);
        module_put(pmu->module);
 err_ns:
-       if (is_cgroup_event(event))
-               perf_detach_cgroup(event);
        if (event->ns)
                put_pid_ns(event->ns);
        if (event->hw.target)