Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp3541910pxb; Mon, 24 Jan 2022 11:48:48 -0800 (PST) X-Google-Smtp-Source: ABdhPJz+J1WvPfUIAv83r/wjhdtt9BbaCBcggkSzQM5+1ThI50YPHwEGOP/q+jnk7nCeoM6F98qq X-Received: by 2002:a17:90b:3648:: with SMTP id nh8mr3430562pjb.155.1643053728813; Mon, 24 Jan 2022 11:48:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643053728; cv=none; d=google.com; s=arc-20160816; b=jscUQetHFQgZivtKk3lV8klaIext8u/K/QvaiP8E7hRwt/e6W/e9/xTW0r+lt+HB/f w+zFtf9S2pjx/wCfD1qApNuhXgyxH6tYoQ4wnEo9y2CsE+gJaEpztDAfVav3727HAy+f 4ZQe4bC2Gz/GdEUPcMpIiYfxVrpjeFg8rjTNiABVzf9ky5CLjlBeK6HFjMUT1cpdsPU8 BiH3LLAn4f2ta/dndXyMqZxZ+AaAu/MzS/dmzbEJKhx6jkm/wi/ctgG0uI5WOqRhZ8mN cVUFtR2X8YpyWLidBoht/NE/KRsVfoeCyN1+MoNHT07pakesdZqRhRP3TDx/Lby9Xlmh bmcg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject; bh=e9bhBuU/2+Et1J1KktAca/7tQU7VigAKNZ5XEl/36l8=; b=o7ENUQ6/kLs44IeJ1pYNJ+LZ0duxK1bvpK8SoJ9qiPhBI5ZRUo7bNw8No0298aRoR0 /r8/RmtrKuMMJ31U1Eon+dHx31XcPxMvHH5aP7+GiLwdhVMADkDww2kGmjRjO3ftfaM1 LXEn7TGlQ6HdjFJQ1+46U5TmKHJY3qiz4+Q+o4pJTXn726sFJ7rs1cDnWNSweDbVquj2 mFzeQj7vE96xkm9I2/EeUxBWKtUBV/ooe9j4CA4RVrDWBOqleu/7PraXAlkkFzKf8/4V 2WpgBmxK1bOmStAg+c/0v9PNrI9J/DcEu98djg/rOy2kfoCH6/DXg6THT01HP2DGwgXd i2Ug== 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 e7si13760440pgg.78.2022.01.24.11.48.35; Mon, 24 Jan 2022 11:48: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 S235782AbiAXSCz (ORCPT + 99 others); Mon, 24 Jan 2022 13:02:55 -0500 Received: from foss.arm.com ([217.140.110.172]:42958 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235628AbiAXSCy (ORCPT ); Mon, 24 Jan 2022 13:02:54 -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 231BAD6E; Mon, 24 Jan 2022 10:02:54 -0800 (PST) Received: from [10.57.39.131] (unknown [10.57.39.131]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 7EFFA3F766; Mon, 24 Jan 2022 10:02:52 -0800 (PST) Subject: Re: [RFC V1 08/11] arm64/perf: Enable branch stack sampling To: Anshuman Khandual , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Cc: Catalin Marinas , Will Deacon , Mark Rutland , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , linux-perf-users@vger.kernel.org References: <1642998653-21377-1-git-send-email-anshuman.khandual@arm.com> <1642998653-21377-9-git-send-email-anshuman.khandual@arm.com> From: James Clark Message-ID: <741d159d-fce4-377e-8817-f8a6462f3a71@arm.com> Date: Mon, 24 Jan 2022 18:02:51 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.14.0 MIME-Version: 1.0 In-Reply-To: <1642998653-21377-9-git-send-email-anshuman.khandual@arm.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 24/01/2022 04:30, Anshuman Khandual wrote: > Now that all the required pieces are already in place, just enable the perf > branch stack sampling support on arm64 platform, by removing the gate which > blocks it in armpmu_event_init(). > > Cc: Mark Rutland > Cc: Will Deacon > Cc: Catalin Marinas > Cc: linux-kernel@vger.kernel.org > Cc: linux-arm-kernel@lists.infradead.org > Signed-off-by: Anshuman Khandual > --- > drivers/perf/arm_pmu.c | 25 ++++++++++++++++++++++--- > 1 file changed, 22 insertions(+), 3 deletions(-) > > diff --git a/drivers/perf/arm_pmu.c b/drivers/perf/arm_pmu.c > index 0800c8858ed8..2117bf5d3232 100644 > --- a/drivers/perf/arm_pmu.c > +++ b/drivers/perf/arm_pmu.c > @@ -537,9 +537,28 @@ static int armpmu_event_init(struct perf_event *event) > !cpumask_test_cpu(event->cpu, &armpmu->supported_cpus)) > return -ENOENT; > > - /* does not support taken branch sampling */ > - if (has_branch_stack(event)) > - return -EOPNOTSUPP; > + if (has_branch_stack(event)) { > + /* > + * BRBE support is absent. Select CONFIG_ARM_BRBE_PMU > + * in the config, before branch stack sampling events > + * can be requested. > + */ > + if (!IS_ENABLED(CONFIG_ARM_BRBE_PMU)) { > + pr_warn_once("BRBE is disabled, select CONFIG_ARM_BRBE_PMU\n"); > + return -EOPNOTSUPP; > + } > + > + /* > + * Branch stack sampling event can not be supported in > + * case either the required driver itself is absent or > + * BRBE buffer, is not supported. Besides checking for > + * the callback prevents a crash in case it's absent. > + */ > + if (!armpmu->brbe_supported || !armpmu->brbe_supported(event)) { > + pr_warn_once("BRBE is not supported\n"); > + return -EOPNOTSUPP; brbe_supported() returns false for one permission case, rather than a "not supported" case so EOPNOTSUPP is the wrong thing to return here for this case otherwise it makes perf print confusing error messages. The brbe_supported() function needs to be split into two, one that handles support and one that handles permissions and different errors need to be reported. Here is the permission bit from that function: + if (event->attr.branch_sample_type & PERF_SAMPLE_BRANCH_KERNEL) { + if (!perfmon_capable()) { + pr_warn_once("does not have permission for kernel branch filter\n"); + return false; + } + } > + } > + } > > if (armpmu->map_event(event) == -ENOENT) > return -ENOENT; >