summaryrefslogtreecommitdiffstats
path: root/kernel/events/core.c
diff options
context:
space:
mode:
authorDave Airlie2017-11-02 03:40:41 +0100
committerDave Airlie2017-11-02 03:40:41 +0100
commit7a88cbd8d65d622c00bd76ba4ae1d893b292c91c (patch)
tree826df7ac42ca13c33828d0142046186b91df686b /kernel/events/core.c
parentMerge tag 'drm-hisilicon-next-2017-11-01' of github.com:xin3liang/linux into ... (diff)
parentLinux 4.14-rc7 (diff)
downloadkernel-qcow2-linux-7a88cbd8d65d622c00bd76ba4ae1d893b292c91c.tar.gz
kernel-qcow2-linux-7a88cbd8d65d622c00bd76ba4ae1d893b292c91c.tar.xz
kernel-qcow2-linux-7a88cbd8d65d622c00bd76ba4ae1d893b292c91c.zip
Backmerge tag 'v4.14-rc7' into drm-next
Linux 4.14-rc7 Requested by Ben Skeggs for nouveau to avoid major conflicts, and things were getting a bit conflicty already, esp around amdgpu reverts.
Diffstat (limited to 'kernel/events/core.c')
-rw-r--r--kernel/events/core.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 6bc21e202ae4..9d93db81fa36 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -662,7 +662,7 @@ static inline void update_cgrp_time_from_event(struct perf_event *event)
/*
* Do not update time when cgroup is not active
*/
- if (cgrp == event->cgrp)
+ if (cgroup_is_descendant(cgrp->css.cgroup, event->cgrp->css.cgroup))
__update_cgrp_time(event->cgrp);
}
@@ -8955,6 +8955,14 @@ static struct perf_cpu_context __percpu *find_pmu_context(int ctxn)
static void free_pmu_context(struct pmu *pmu)
{
+ /*
+ * Static contexts such as perf_sw_context have a global lifetime
+ * and may be shared between different PMUs. Avoid freeing them
+ * when a single PMU is going away.
+ */
+ if (pmu->task_ctx_nr > perf_invalid_context)
+ return;
+
mutex_lock(&pmus_lock);
free_percpu(pmu->pmu_cpu_context);
mutex_unlock(&pmus_lock);