From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753140AbcD2EuV (ORCPT ); Fri, 29 Apr 2016 00:50:21 -0400 Received: from mail-pa0-f48.google.com ([209.85.220.48]:35708 "EHLO mail-pa0-f48.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753041AbcD2Eqh (ORCPT ); Fri, 29 Apr 2016 00:46:37 -0400 From: David Carrillo-Cisneros To: Peter Zijlstra , Alexander Shishkin , Arnaldo Carvalho de Melo , Ingo Molnar Cc: Vikas Shivappa , Matt Fleming , Tony Luck , Stephane Eranian , Paul Turner , David Carrillo-Cisneros , x86@kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 18/32] perf/x86/intel/cqm: use pmu::event_terminate Date: Thu, 28 Apr 2016 21:43:24 -0700 Message-Id: <1461905018-86355-19-git-send-email-davidcc@google.com> X-Mailer: git-send-email 2.8.0.rc3.226.g39d4020 In-Reply-To: <1461905018-86355-1-git-send-email-davidcc@google.com> References: <1461905018-86355-1-git-send-email-davidcc@google.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Utilized to detach a monr from a cgroup before the event's reference to the cgroup is removed. Reviewed-by: Stephane Eranian Signed-off-by: David Carrillo-Cisneros --- arch/x86/events/intel/cqm.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/arch/x86/events/intel/cqm.c b/arch/x86/events/intel/cqm.c index f000fd0..dcf7f4a 100644 --- a/arch/x86/events/intel/cqm.c +++ b/arch/x86/events/intel/cqm.c @@ -2391,7 +2391,7 @@ static int intel_cqm_event_add(struct perf_event *event, int mode) return prmid_summary__is_istate(summary) ? -1 : 0; } -static void intel_cqm_event_destroy(struct perf_event *event) +static void intel_cqm_event_terminate(struct perf_event *event) { struct perf_event *group_other = NULL; struct monr *monr; @@ -2438,6 +2438,17 @@ static void intel_cqm_event_destroy(struct perf_event *event) if (monr__is_root(monr)) goto exit; + /* Handle cgroup event. */ + if (event->cgrp) { + monr->mon_event_group = NULL; + if ((event->cgrp->css.flags & CSS_ONLINE) && + !cgrp_to_cqm_info(event->cgrp)->cont_monitoring) + __css_stop_monitoring(&monr__get_mon_cgrp(monr)->css); + + goto exit; + } + WARN_ON_ONCE(!monr_is_event_type(monr)); + /* Transition all pmonrs to (U)state. */ monr_hrchy_acquire_locks(flags, i); @@ -2478,8 +2489,6 @@ static int intel_cqm_event_init(struct perf_event *event) INIT_LIST_HEAD(&event->hw.cqm_event_groups_entry); INIT_LIST_HEAD(&event->hw.cqm_event_group_entry); - event->destroy = intel_cqm_event_destroy; - mutex_lock(&cqm_mutex); @@ -2595,6 +2604,7 @@ static struct pmu intel_cqm_pmu = { .attr_groups = intel_cqm_attr_groups, .task_ctx_nr = perf_sw_context, .event_init = intel_cqm_event_init, + .event_terminate = intel_cqm_event_terminate, .add = intel_cqm_event_add, .del = intel_cqm_event_stop, .start = intel_cqm_event_start, -- 2.8.0.rc3.226.g39d4020