diff options
-rw-r--r-- | kernel/events/core.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/kernel/events/core.c b/kernel/events/core.c index b0cd86501c30..310ec19d968a 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c | |||
@@ -251,7 +251,22 @@ perf_cgroup_match(struct perf_event *event) | |||
251 | struct perf_event_context *ctx = event->ctx; | 251 | struct perf_event_context *ctx = event->ctx; |
252 | struct perf_cpu_context *cpuctx = __get_cpu_context(ctx); | 252 | struct perf_cpu_context *cpuctx = __get_cpu_context(ctx); |
253 | 253 | ||
254 | return !event->cgrp || event->cgrp == cpuctx->cgrp; | 254 | /* @event doesn't care about cgroup */ |
255 | if (!event->cgrp) | ||
256 | return true; | ||
257 | |||
258 | /* wants specific cgroup scope but @cpuctx isn't associated with any */ | ||
259 | if (!cpuctx->cgrp) | ||
260 | return false; | ||
261 | |||
262 | /* | ||
263 | * Cgroup scoping is recursive. An event enabled for a cgroup is | ||
264 | * also enabled for all its descendant cgroups. If @cpuctx's | ||
265 | * cgroup is a descendant of @event's (the test covers identity | ||
266 | * case), it's a match. | ||
267 | */ | ||
268 | return cgroup_is_descendant(cpuctx->cgrp->css.cgroup, | ||
269 | event->cgrp->css.cgroup); | ||
255 | } | 270 | } |
256 | 271 | ||
257 | static inline bool perf_tryget_cgroup(struct perf_event *event) | 272 | static inline bool perf_tryget_cgroup(struct perf_event *event) |
@@ -7509,12 +7524,5 @@ struct cgroup_subsys perf_subsys = { | |||
7509 | .css_free = perf_cgroup_css_free, | 7524 | .css_free = perf_cgroup_css_free, |
7510 | .exit = perf_cgroup_exit, | 7525 | .exit = perf_cgroup_exit, |
7511 | .attach = perf_cgroup_attach, | 7526 | .attach = perf_cgroup_attach, |
7512 | |||
7513 | /* | ||
7514 | * perf_event cgroup doesn't handle nesting correctly. | ||
7515 | * ctx->nr_cgroups adjustments should be propagated through the | ||
7516 | * cgroup hierarchy. Fix it and remove the following. | ||
7517 | */ | ||
7518 | .broken_hierarchy = true, | ||
7519 | }; | 7527 | }; |
7520 | #endif /* CONFIG_CGROUP_PERF */ | 7528 | #endif /* CONFIG_CGROUP_PERF */ |