Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp5863785imu; Mon, 26 Nov 2018 06:14:20 -0800 (PST) X-Google-Smtp-Source: AFSGD/UHQwftYCnm3E6HOCpQqcPrPD+y2+Hv9bZ+AqSAh3wgxsQB9K2bvoAq8Bm8+1+9BxRhhxFZ X-Received: by 2002:a63:561b:: with SMTP id k27mr25135213pgb.271.1543241660493; Mon, 26 Nov 2018 06:14:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543241660; cv=none; d=google.com; s=arc-20160816; b=sN+cU6mAHifF0DvltE73ZO4XPhySsGtyj+5WHesH02bv7OKCivq8VzfXX1OiuDHCFc GIYwoKNk8YEFtUHG3OzpmejMSGTcCuzveKvSgCi/+ghRnd/ZwBuHbtc5AB9wxhuabqKP ucccYlOhIbVDJX7HXDC5F/F+EQhK4MebnRHfmWCQRwAbbSHSAdOzObq7/D4eqGK+yb3H WbXxbtuO+6DqhwXJohCmlngOIa5GmMRl0t3hMSTDWdRGkj31SF5EO0b/GCgOM0eWTamF HLv8CPl/HUtPiVeOb/LhbnodJ0lrx0OA8XTO/Ov1HxBP2FWFDSDGS2AGHpHuU5rQiPBL cQhQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject; bh=4G6gPkI7+RBYVQagmG+G0lWhMLk4UwLZHzzT9rz8IeI=; b=0IYhbvfM8jtd6vCewhSFxlai6D5Nv1OAW7uJfIGih9IHnA6+rwCbSVuefUzsL7dkuX rN742H3onMojM882Eunr275qg9WUJ9QRa1LYjEIoX1BkCmnUHLee7rBM9dcYLx3DrzGH ueAA66bk0TZvR2+W3wSi1mr0fwyxXm1uNbyU1aJvAJfmCCg3kVr2HB8fXMnMmOR8CGH4 vMmff78KRzXUX2ZXFxQ/YAsN2Yqrt0DP+VUJ38Q+NEovLESJudzlPnouEOaZQ1CNlXDJ VUjGzbRjVbQIgOrOv+1V/fMla17NKHO+/N1HOL7l0BuxT98o0dty+cbNuf6rPR6Q2eaU MJMg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q18si386551pls.30.2018.11.26.06.14.05; Mon, 26 Nov 2018 06:14:20 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726766AbeK0BEq (ORCPT + 99 others); Mon, 26 Nov 2018 20:04:46 -0500 Received: from foss.arm.com ([217.140.101.70]:38440 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726202AbeK0BEq (ORCPT ); Mon, 26 Nov 2018 20:04:46 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 08D4222C7; Mon, 26 Nov 2018 06:10:30 -0800 (PST) Received: from [10.1.196.75] (e110467-lin.cambridge.arm.com [10.1.196.75]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id F24DD3F5A0; Mon, 26 Nov 2018 06:10:25 -0800 (PST) Subject: Re: [PATCH v2 03/20] perf/core: add PERF_PMU_CAP_EXCLUDE for exclusion capable PMUs To: Andrew Murray , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Shawn Guo , Sascha Hauer , Will Deacon , Mark Rutland , Benjamin Herrenschmidt , Thomas Gleixner , Borislav Petkov , x86@kernel.org, Ralf Baechle , Paul Burton , James Hogan , Martin Schwidefsky , Heiko Carstens , "David S . Miller" , sparclinux@vger.kernel.org, Michael Ellerman Cc: linux-s390@vger.kernel.org, linux-mips@linux-mips.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org References: <1543230756-15319-1-git-send-email-andrew.murray@arm.com> <1543230756-15319-4-git-send-email-andrew.murray@arm.com> From: Robin Murphy Message-ID: <8c9003c3-ccbf-c342-024f-772d697a911b@arm.com> Date: Mon, 26 Nov 2018 14:10:24 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.2.1 MIME-Version: 1.0 In-Reply-To: <1543230756-15319-4-git-send-email-andrew.murray@arm.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-GB Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Andrew, On 26/11/2018 11:12, Andrew Murray wrote: > Many PMU drivers do not have the capability to exclude counting events > that occur in specific contexts such as idle, kernel, guest, etc. These > drivers indicate this by returning an error in their event_init upon > testing the events attribute flags. This approach is error prone and > often inconsistent. > > Let's instead allow PMU drivers to advertise their ability to exclude > based on context via a new capability: PERF_PMU_CAP_EXCLUDE. This > allows the perf core to reject requests for exclusion events where > there is no support in the PMU. > > Signed-off-by: Andrew Murray > --- > include/linux/perf_event.h | 1 + > kernel/events/core.c | 9 +++++++++ > 2 files changed, 10 insertions(+) > > diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h > index b2e806f..69b3d65 100644 > --- a/include/linux/perf_event.h > +++ b/include/linux/perf_event.h > @@ -244,6 +244,7 @@ struct perf_event; > #define PERF_PMU_CAP_EXCLUSIVE 0x10 > #define PERF_PMU_CAP_ITRACE 0x20 > #define PERF_PMU_CAP_HETEROGENEOUS_CPUS 0x40 > +#define PERF_PMU_CAP_EXCLUDE 0x80 > > /** > * struct pmu - generic performance monitoring unit > diff --git a/kernel/events/core.c b/kernel/events/core.c > index 5a97f34..9afb33c 100644 > --- a/kernel/events/core.c > +++ b/kernel/events/core.c > @@ -9743,6 +9743,15 @@ static int perf_try_init_event(struct pmu *pmu, struct perf_event *event) > if (ctx) > perf_event_ctx_unlock(event->group_leader, ctx); > > + if (!ret) { > + if (!(pmu->capabilities & PERF_PMU_CAP_EXCLUDE) && > + event_has_any_exclude_flag(event)) { Technically this is a bisection-breaker, since no driver has this capability yet - ideally, this patch should come after all the ones introducing it to the relevant drivers (with the removal of the now-redundant code from the other drivers at the end). Alternatively, since we already have several other negative capabilities, unless there's a strong feeling against adding any more then it might work out simpler to flip it to PERF_PMU_CAP_NO_EXCLUDE, such that we only need to introduce the core check then directly replace the open-coded event checks with the capability in the appropriate drivers, and need not touch the exclusion-supporting ones at all. Robin. > + if (event->destroy) > + event->destroy(event); > + ret = -EINVAL; > + } > + } > + > if (ret) > module_put(pmu->module); > >