Skip to content

Commit be96b31

Browse files
htejunIngo Molnar
authored andcommitted
perf/cgroup: Fix perf cgroup hierarchy support
The following commit: 864c235 ("perf/core: Do not set cpuctx->cgrp for unscheduled cgroups") made list_update_cgroup_event() skip setting cpuctx->cgrp if no cgroup event targets %current's cgroup. This breaks perf_event's hierarchical support because events which target one of the ancestors get ignored. Fix it by using cgroup_is_descendant() test instead of equality. Signed-off-by: Tejun Heo <[email protected]> Acked-by: Thomas Gleixner <[email protected]> Cc: Arnaldo Carvalho de Melo <[email protected]> Cc: David Carrillo-Cisneros <[email protected]> Cc: Linus Torvalds <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: [email protected] Cc: [email protected] # v4.9+ Fixes: 864c235 ("perf/core: Do not set cpuctx->cgrp for unscheduled cgroups") Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Ingo Molnar <[email protected]>
1 parent 4139433 commit be96b31

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

kernel/events/core.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -901,9 +901,11 @@ list_update_cgroup_event(struct perf_event *event,
901901
cpuctx_entry = &cpuctx->cgrp_cpuctx_entry;
902902
/* cpuctx->cgrp is NULL unless a cgroup event is active in this CPU .*/
903903
if (add) {
904+
struct perf_cgroup *cgrp = perf_cgroup_from_task(current, ctx);
905+
904906
list_add(cpuctx_entry, this_cpu_ptr(&cgrp_cpuctx_list));
905-
if (perf_cgroup_from_task(current, ctx) == event->cgrp)
906-
cpuctx->cgrp = event->cgrp;
907+
if (cgroup_is_descendant(cgrp->css.cgroup, event->cgrp->css.cgroup))
908+
cpuctx->cgrp = cgrp;
907909
} else {
908910
list_del(cpuctx_entry);
909911
cpuctx->cgrp = NULL;

0 commit comments

Comments
 (0)