Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp3416276pxb; Mon, 24 Jan 2022 09:06:49 -0800 (PST) X-Google-Smtp-Source: ABdhPJzR+NcAFdFT0g9ikLLTunJAGMJAxXyPgXfTXr2CF1O8zViZEcg+QQjLxTEvBHkw3RMoWpFp X-Received: by 2002:a17:902:b196:b0:14a:43d3:9e76 with SMTP id s22-20020a170902b19600b0014a43d39e76mr14713153plr.100.1643044008840; Mon, 24 Jan 2022 09:06:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643044008; cv=none; d=google.com; s=arc-20160816; b=zcnTU2gAqzUrInOQEM6A0AeNvGRsQfpDRdL65oM6fUX5bhuXP9xRPQruhHtZYZHncQ SRfsGjWcU0DSe1RkcOgl8VVug3hQdq1DmhVGm38fSiO/+gcjWeyX5r5sDjRf2ZjtdWg0 jQ8ESEOH4WKQm4OvszvvkVmaXLLH6T1Dm6Ob2QEc0ayLvpfw7NonBPEEHbWbvhpCwW5J gdfI142eIzEF30Gn7zOQkZSLUwJl618EffPNlHe8wqq4BrTJsQKHlrV7VJwnG2N3dZzF v5hMoSGJSvUEVMToLPtwcJjmoVv/DYK2X6EztHvY9kUnSJwymr7CLUAi4YfZOGZ8ovyd TJag== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from; bh=c04Hn8Uj52IOlLTzF0wMPe/TwO7mel6Iq9Xf/xCxzt4=; b=pN1i0SnXDap+XI8NybTFMtV5krgLxCnZ5CbaSeK9sDcuW9yylfvwVQMGZyIm1NxRfO IhXHBzrrqPqvHHitU+okQUrFNrRHgBbpCaCBzsnKJd417v5lCPOZgpXF9uk5JcFpd7wz Mu6NBpDoqt9YgPyUXuMgQzweTAPgDEusdJjXScafmlPFbfYlDqZls4x0gBMviv5LtNmr OTtD5Oe83OkSV7nRTa73FP4Ncd/CXlgrDw6Ssew2mUrdnxl9pUc2xn+/vgOvHbTMx+OZ 5+CBPcRVRs/6SLPP1FeX05gbEmm6yclk1XH0FoxgcCyPzv4SdpmaKZJStnZQlgfFD7e2 7Fnw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id p23si14989249plr.190.2022.01.24.09.06.34; Mon, 24 Jan 2022 09:06:48 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241410AbiAXEbo (ORCPT + 99 others); Sun, 23 Jan 2022 23:31:44 -0500 Received: from foss.arm.com ([217.140.110.172]:47130 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241400AbiAXEbn (ORCPT ); Sun, 23 Jan 2022 23:31:43 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 274B3ED1; Sun, 23 Jan 2022 20:31:43 -0800 (PST) Received: from p8cg001049571a15.arm.com (unknown [10.119.34.209]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 70F933F73B; Sun, 23 Jan 2022 20:31:28 -0800 (PST) From: Anshuman Khandual To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Cc: Anshuman Khandual , Catalin Marinas , Will Deacon , Mark Rutland , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , linux-perf-users@vger.kernel.org Subject: [RFC V1 01/11] perf: Consolidate branch sample filter helpers Date: Mon, 24 Jan 2022 10:00:43 +0530 Message-Id: <1642998653-21377-2-git-send-email-anshuman.khandual@arm.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1642998653-21377-1-git-send-email-anshuman.khandual@arm.com> References: <1642998653-21377-1-git-send-email-anshuman.khandual@arm.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Besides the branch type filtering requests, 'event.attr.branch_sample_type' also contains various flags indicating which additional information should be captured, along with the base branch record. These flags help configure the underlying hardware, and capture the branch records appropriately when required e.g after PMU interrupt. But first, this moves an existing helper perf_sample_save_hw_index() into the header before adding some more helpers for other branch sample filter flags. Cc: Peter Zijlstra Cc: Ingo Molnar Cc: Arnaldo Carvalho de Melo Cc: linux-perf-users@vger.kernel.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Anshuman Khandual --- include/linux/perf_event.h | 19 +++++++++++++++++++ kernel/events/core.c | 9 ++------- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index 117f230bcdfd..916ce5102b33 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h @@ -1669,4 +1669,23 @@ typedef int (perf_snapshot_branch_stack_t)(struct perf_branch_entry *entries, unsigned int cnt); DECLARE_STATIC_CALL(perf_snapshot_branch_stack, perf_snapshot_branch_stack_t); +static inline bool branch_sample_no_flags(const struct perf_event *event) +{ + return event->attr.branch_sample_type & PERF_SAMPLE_BRANCH_NO_FLAGS; +} + +static inline bool branch_sample_no_cycles(const struct perf_event *event) +{ + return event->attr.branch_sample_type & PERF_SAMPLE_BRANCH_NO_CYCLES; +} + +static inline bool branch_sample_type(const struct perf_event *event) +{ + return event->attr.branch_sample_type & PERF_SAMPLE_BRANCH_TYPE_SAVE; +} + +static inline bool branch_sample_hw_index(const struct perf_event *event) +{ + return event->attr.branch_sample_type & PERF_SAMPLE_BRANCH_HW_INDEX; +} #endif /* _LINUX_PERF_EVENT_H */ diff --git a/kernel/events/core.c b/kernel/events/core.c index fc18664f49b0..740d0d829b24 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -6984,11 +6984,6 @@ static void perf_output_read(struct perf_output_handle *handle, perf_output_read_one(handle, event, enabled, running); } -static inline bool perf_sample_save_hw_index(struct perf_event *event) -{ - return event->attr.branch_sample_type & PERF_SAMPLE_BRANCH_HW_INDEX; -} - void perf_output_sample(struct perf_output_handle *handle, struct perf_event_header *header, struct perf_sample_data *data, @@ -7077,7 +7072,7 @@ void perf_output_sample(struct perf_output_handle *handle, * sizeof(struct perf_branch_entry); perf_output_put(handle, data->br_stack->nr); - if (perf_sample_save_hw_index(event)) + if (branch_sample_hw_index(event)) perf_output_put(handle, data->br_stack->hw_idx); perf_output_copy(handle, data->br_stack->entries, size); } else { @@ -7371,7 +7366,7 @@ void perf_prepare_sample(struct perf_event_header *header, if (sample_type & PERF_SAMPLE_BRANCH_STACK) { int size = sizeof(u64); /* nr */ if (data->br_stack) { - if (perf_sample_save_hw_index(event)) + if (branch_sample_hw_index(event)) size += sizeof(u64); size += data->br_stack->nr -- 2.25.1