Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp369765rwb; Mon, 28 Nov 2022 22:47:00 -0800 (PST) X-Google-Smtp-Source: AA0mqf7V3fZK9ctoKb04xUZh+9ZcfF6DLotgzaEm35/rohQiAZLbbocpQ08pcUZc99lndAin9BLc X-Received: by 2002:a05:6a00:450b:b0:574:c544:3b5e with SMTP id cw11-20020a056a00450b00b00574c5443b5emr19254561pfb.66.1669704420757; Mon, 28 Nov 2022 22:47:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669704420; cv=none; d=google.com; s=arc-20160816; b=MBp2mHS14dfUyA28GqOESBBDOh6gZwWxGJHGTEAmjAZHK4hJch12dLAqryl1t8gz1E EKXjEHT6S8wzkNxTwS0CziH9UZdaVPui90ZbQCs4UchZ3oo9GAGHwEjq+Mr97hK7dykB z1ZUJWt4xAEFugm/BbIJZOqrnSLC3gkwwVXHsCik4Y0eKxuGfoYB25yP6R4GmHFnOGuu nCRSsfpS87gxwjJGJQeVMsBxbn+2zgnj5UMaLeM55ic0uyc7COq3LXeet1z6Y7ako9/+ M3G5knvu0PvJ+dVMMyQAeGfeuFOorRqzaBozyUDxcyopG44wSv2xfoJ2Wy6sRuMaMZBR VMbQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :references:cc:to:content-language:subject:user-agent:mime-version :date:message-id; bh=ykZNGbPdMrUv5+35dmSpgQOJn/zxcHtK/m5T6dWy4fA=; b=jEvixWBRZEHXjtzo+DdQLsaRny3khJ+5AigDp8ZQVOIidyszp9QnJ/gdjkayXi9igT /pU/1NMVfBVq/eOBbq5tOPrlWwfQc8fxjFHkdArBVjMLWwdoHep4jjTyXgzCraS9izWQ bQf2Wcv+fctjssizIC20ngm2fz8BletdpJvzldo8GBCKX0pFHjVJo/JXIHAKYiexmX+X 0Cu6yOBxET8agb+WtD8XMYDqPlZGpxmlAH26mZYwAHAbZMTDtCwn5GkiCfoUVmuP/F5X Y8ti7f2mQ216jFBZz/hHeEP3Z/XwTkzqMeolw3EqOd4xp1x+u5ZfsPwneFPHY1mB4Jm7 6I4g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id a21-20020a17090ad81500b002190eb641d3si905767pjv.88.2022.11.28.22.46.50; Mon, 28 Nov 2022 22:47:00 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 S235660AbiK2GGS (ORCPT + 82 others); Tue, 29 Nov 2022 01:06:18 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41376 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235310AbiK2GGQ (ORCPT ); Tue, 29 Nov 2022 01:06:16 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 64FAD4FF89; Mon, 28 Nov 2022 22:06:15 -0800 (PST) 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 6F6D6D6E; Mon, 28 Nov 2022 22:06:21 -0800 (PST) Received: from [10.162.41.67] (unknown [10.162.41.67]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 82F323F67D; Mon, 28 Nov 2022 22:06:10 -0800 (PST) Message-ID: <06666fe7-d17c-24c9-98b7-65f5642dfb2b@arm.com> Date: Tue, 29 Nov 2022 11:36:07 +0530 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.2.2 Subject: Re: [PATCH V5 2/7] arm64/perf: Update struct arm_pmu for BRBE Content-Language: en-US To: Mark Rutland Cc: Suzuki K Poulose , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-arm-kernel@lists.infradead.org, peterz@infradead.org, acme@kernel.org, will@kernel.org, catalin.marinas@arm.com, Mark Brown , James Clark , Rob Herring , Marc Zyngier , Ingo Molnar References: <20221107062514.2851047-1-anshuman.khandual@arm.com> <20221107062514.2851047-3-anshuman.khandual@arm.com> <8f6d3424-2650-8e8b-61f7-1431aec4633b@arm.com> <4efc0ae1-564e-dd05-842a-46fb1aeb4ad8@arm.com> From: Anshuman Khandual In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-4.5 required=5.0 tests=BAYES_00,NICE_REPLY_A, RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 11/18/22 23:17, Mark Rutland wrote: > > Hi Anshuman, > > Apologies for the delayi n reviewing this. > > On Fri, Nov 18, 2022 at 12:09:07PM +0530, Anshuman Khandual wrote: >> On 11/9/22 17:00, Suzuki K Poulose wrote: >>> On 07/11/2022 06:25, Anshuman Khandual wrote: >>>> Although BRBE is an armv8 speciifc HW feature, abstracting out its various >>>> function callbacks at the struct arm_pmu level is preferred, as it cleaner >>>> , easier to follow and maintain. >>>> >>>> Besides some helpers i.e brbe_supported(), brbe_probe() and brbe_reset() >>>> might not fit seamlessly, when tried to be embedded via existing arm_pmu >>>> helpers in the armv8 implementation. >>>> >>>> Updates the struct arm_pmu to include all required helpers that will drive >>>> BRBE functionality for a given PMU implementation. These are the following. >>>> >>>> - brbe_filter    : Convert perf event filters into BRBE HW filters >>>> - brbe_probe    : Probe BRBE HW and capture its attributes >>>> - brbe_enable    : Enable BRBE HW with a given config >>>> - brbe_disable    : Disable BRBE HW >>>> - brbe_read    : Read BRBE buffer for captured branch records >>>> - brbe_reset    : Reset BRBE buffer >>>> - brbe_supported: Whether BRBE is supported or not >>>> >>>> A BRBE driver implementation needs to provide these functionalities. >>> >>> Could these not be hidden from the generic arm_pmu and kept in the >>> arm64 pmu backend  ? It looks like they are quite easy to simply >>> move these to the corresponding hooks in arm64 pmu. >> >> We have had this discussion multiple times in the past [1], but I still >> believe, keeping BRBE implementation hooks at the PMU level rather than >> embedding them with other PMU events handling, is a much better logical >> abstraction. >> >> [1] https://lore.kernel.org/all/c3804290-bdb1-d1eb-3526-9b0ce4c8e8b1@arm.com/ >> >> -------------------------------------------------------------------------- >>> >>> One thing to answer in the commit msg is why we need the hooks here. >>> Have we concluded that adding BRBE hooks to struct arm_pmu for what is >>> an armv8 specific feature is the right approach? I don't recall >>> reaching that conclusion. >> >> Although it might be possible to have this implementation embedded in >> the existing armv8 PMU implementation, I still believe that the BRBE >> functionalities abstracted out at the arm_pmu level with a separate >> config option is cleaner, easier to follow and to maintain as well. >> >> Besides some helpers i.e brbe_supported(), brbe_probe() and brbe_reset() >> might not fit seamlessly, when tried to be embedded via existing arm_pmu >> helpers in the armv8 implementation. >> >> Nonetheless if arm_pmu based additional BRBE helpers is absolutely a no >> go for folks here in general, will explore arm64 based implementation. >> ---------------------------------------------------------------------------- >> >> I am still waiting for maintainer's take on this issue. I will be happy to >> rework this series to move all these implementation inside arm64 callbacks >> instead, if that is required or preferred by the maintainers. But according >> to me, this current abstraction layout is much better. > > To be honest, I'm not sure what's best right now; but at the moment it's not > clear to me why this couldn't fit within the existing hooks. > > Above you say brbe_supported() / brbe_probe() / brbe_reset() didn't fit > seamlessly; can you give an example of problem? I think I'm missing something > obvious. I tried to move them inside armv8 implementation callbacks. arm64_pmu_brbe_supported() can be moved inside __armv8_pmuv3_map_event(), so that event viability can be validated during armpmu_event_init(). arm64_pmu_brbe_probe() can be moved inside __armv8pmu_probe_pmu() as you have suggested earlier on another thread. arm64_pmu_brbe_reset() can also be moved inside armv8pmu_enable_event(), and also armv8pmu_reset(). The only problem being armpmu_sched_task() where earlier we had BRBE reset, but I guess it can be replaced with entire PMU reset which does the BRBE reset as well ? static void armpmu_sched_task(struct perf_event_context *ctx, bool sched_in) { struct arm_pmu *armpmu = to_arm_pmu(ctx->pmu); if (sched_in) armpmu->reset(armpmu); }