linux-perf-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Anshuman Khandual <anshuman.khandual@arm.com>
To: Will Deacon <will@kernel.org>
Cc: linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, catalin.marinas@arm.com,
	mark.rutland@arm.com, Mark Brown <broonie@kernel.org>,
	James Clark <james.clark@arm.com>, Rob Herring <robh@kernel.org>,
	Marc Zyngier <maz@kernel.org>,
	Suzuki Poulose <suzuki.poulose@arm.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	linux-perf-users@vger.kernel.org
Subject: Re: [PATCH V13 - RESEND 00/10] arm64/perf: Enable branch stack sampling
Date: Mon, 21 Aug 2023 14:23:47 +0530	[thread overview]
Message-ID: <3cfaa5ae-924c-19ff-acb6-809e3f27c0fe@arm.com> (raw)
In-Reply-To: <20230818175623.GA16509@willie-the-truck>

Hello Will,

Separated this part out just to understand it better.

On 8/18/23 23:26, Will Deacon wrote:
>> These stubs are necessary to protect PMU drivers built on arm32 which share
>> basic branch record processing abstraction at ARMV8 PMU level. It compiles
>> successfully both on arm32 and arm64 platforms with these changes. Subject
>> line for this patch clearly mentions that as well.

> But they shouldn't be needed. When CONFIG_ARM64_BRBE is not selected, no
> branch record processing functions should be needed, empty or otherwise.

But that is not how the code is organized currently. CONFIG_ARM64_BRBE enables
the driver to bring in BRBE HW specific branch stack callback implementation
details. But these callbacks are always present at ARMV8 PMU level even without
BRBE implementation as well. Hence these call sites are present, regardless of
CONFIG_ARM64_BRBE.

> The callers should not exist in the first place (i.e. the empty definitions

But how to achieve that ? Branch stack needs to be driven along side normal PMU
events, which in turn get driven from 'struct arm_pmu' callbacks. Hence branch
stack callbacks too needs to be at ARMV8 PMU level, and closely tied to normal
PMU event handling callbacks. Let's examine from where all these new callbacks
are called from.

* armv8pmu_disable_event()	---> armv8pmu_branch_disable()
* armv8pmu_handle_irq()		---> armv8pmu_branch_read()
* armv8pmu_sched_task()		---> armv8pmu_branch_save()
* armv8pmu_sched_task()		---> armv8pmu_branch_reset()
* armv8pmu_reset()		---> armv8pmu_branch_reset()
* __armv8_pmuv3_map_event()	---> armv8pmu_branch_attr_valid()
* __armv8pmu_probe_pmu()	---> armv8pmu_branch_probe()
* armv8pmu_probe_pmu()		---> armv8pmu_task_ctx_cache_alloc()
* armv8pmu_probe_pmu()		---> branch_records_alloc()

Please note that, branch_records_alloc() being deferred allocation is only one
that is platform agnostic.

I did not intend to make any of the BRBE details visible at ARMV8 PMU level i.e
right inside armv8pmu_XXXX() definitions, as ARMV8 PMU is shared between arm32
and arm64 platforms.

Hence these new branch stack callbacks are added along with required fallback
stubs for build protection, so that the HW implementations can be hidden inside
a new driver wrapped in CONFIG_ARM64_BRBE. Please note that these new branch
stack functions are not 'struct arm_pmu' callbacks but instead normal helpers.

> should live in the core driver code, not in the arch header, or the calling

Driver code is compiled with CONFIG_ARM64_BRBE, hence the real definitions are
there. Instead default stubs are required only when armv8pmu_branch_XXX() call
backs are not defined. But are you suggesting that these stubs be moved inside
drivers/perf/arm_pmuv3.c (where all call sites reside), so that there will be
just one stub copy both for arm32 and arm64 platforms removing their duplicate
definitions from arch headers i.e arch/arm64/include/asm/perf_event.h and
arch/arm/include/asm/arm_pmuv3.h ?

> code should not be compiled at all).

Branch stack sampling is always enabled from core perf perspective without any
config option to wrap around, hence calling code cannot be selectively enabled
or disabled.

- Anshuman

  reply	other threads:[~2023-08-21  8:53 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-11  8:24 [PATCH V13 - RESEND 00/10] arm64/perf: Enable branch stack sampling Anshuman Khandual
2023-07-11  8:24 ` [PATCH V13 - RESEND 01/10] drivers: perf: arm_pmu: Add new sched_task() callback Anshuman Khandual
2023-08-10  5:05   ` Anshuman Khandual
2023-08-10  9:41     ` Will Deacon
2023-08-10 11:49       ` Anshuman Khandual
2023-07-11  8:24 ` [PATCH V13 - RESEND 02/10] arm64/perf: Add BRBE registers and fields Anshuman Khandual
2023-07-28 16:20   ` Will Deacon
2023-07-28 16:52     ` James Clark
2023-07-31  2:33       ` Anshuman Khandual
2023-07-31  8:07         ` James Clark
2023-07-31  9:06         ` Mark Rutland
2023-07-31 12:19           ` Anshuman Khandual
2023-08-15 10:17           ` James Clark
2023-08-15 13:05             ` Mark Rutland
2023-08-15 20:35               ` Peter Zijlstra
2023-07-11  8:24 ` [PATCH V13 - RESEND 03/10] arm64/perf: Add branch stack support in struct arm_pmu Anshuman Khandual
2023-07-11  8:24 ` [PATCH V13 - RESEND 04/10] arm64/perf: Add branch stack support in struct pmu_hw_events Anshuman Khandual
2023-07-11  8:24 ` [PATCH V13 - RESEND 05/10] arm64/perf: Add branch stack support in ARMV8 PMU Anshuman Khandual
2023-07-11  8:24 ` [PATCH V13 - RESEND 06/10] arm64/perf: Enable branch stack events via FEAT_BRBE Anshuman Khandual
2023-07-11 19:26   ` Randy Dunlap
2023-07-12  2:42     ` Anshuman Khandual
2023-07-25  7:12   ` Yang Shen
2023-07-25 11:42     ` Anshuman Khandual
2023-07-25 13:29       ` Suzuki K Poulose
2023-07-26  5:32         ` Anshuman Khandual
2023-08-02 12:40           ` Suzuki K Poulose
2023-08-03  2:39             ` Anshuman Khandual
2023-07-26  6:26   ` Anshuman Khandual
2023-07-11  8:24 ` [PATCH V13 - RESEND 07/10] arm64/perf: Add PERF_ATTACH_TASK_DATA to events with has_branch_stack() Anshuman Khandual
2023-07-11  8:24 ` [PATCH V13 - RESEND 08/10] arm64/perf: Add struct brbe_regset helper functions Anshuman Khandual
2023-07-11  8:24 ` [PATCH V13 - RESEND 09/10] arm64/perf: Implement branch records save on task sched out Anshuman Khandual
2023-08-02 11:59   ` Rajnesh Kanwal
2023-08-02 19:16     ` Marc Zyngier
2023-07-11  8:24 ` [PATCH V13 - RESEND 10/10] arm64/perf: Implement branch records save on PMU IRQ Anshuman Khandual
2023-07-31 13:05 ` [PATCH V13 - RESEND 00/10] arm64/perf: Enable branch stack sampling Will Deacon
2023-08-18  3:12   ` Anshuman Khandual
2023-08-18 17:56     ` Will Deacon
2023-08-21  8:53       ` Anshuman Khandual [this message]
2023-09-27  8:37 ` Anshuman Khandual

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3cfaa5ae-924c-19ff-acb6-809e3f27c0fe@arm.com \
    --to=anshuman.khandual@arm.com \
    --cc=acme@kernel.org \
    --cc=broonie@kernel.org \
    --cc=catalin.marinas@arm.com \
    --cc=james.clark@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=maz@kernel.org \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=robh@kernel.org \
    --cc=suzuki.poulose@arm.com \
    --cc=will@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).