public inbox for linux-arm-kernel@lists.infradead.org
 help / color / mirror / Atom feed
From: Alexandru Elisei <alexandru.elisei@arm.com>
To: James Clark <james.clark@linaro.org>
Cc: mark.rutland@arm.com, james.morse@arm.com, maz@kernel.org,
	oliver.upton@linux.dev, joey.gouly@arm.com,
	suzuki.poulose@arm.com, yuzenghui@huawei.com, will@kernel.org,
	catalin.marinas@arm.com, linux-arm-kernel@lists.infradead.org,
	kvmarm@lists.linux.dev
Subject: Re: [RFC PATCH v6 03/35] KVM: arm64: Add CONFIG_KVM_ARM_SPE Kconfig option
Date: Mon, 12 Jan 2026 15:18:53 +0000	[thread overview]
Message-ID: <aWUQ3bYuxpMEWTUk@raptor> (raw)
In-Reply-To: <d7db9f17-012e-43d7-a0a5-58b254dd7e33@linaro.org>

Hi James,

On Mon, Jan 12, 2026 at 12:09:19PM +0000, James Clark wrote:
> 
> 
> On 12/01/2026 11:26 am, Alexandru Elisei wrote:
> > Hi James,
> > 
> > On Fri, Jan 09, 2026 at 04:29:50PM +0000, James Clark wrote:
> > > 
> > > 
> > > On 14/11/2025 4:06 pm, Alexandru Elisei wrote:
> > > > Add a new configuration option that will be used for KVM SPE emulation.
> > > > CONFIG_KVM_ARM_SPE depends on the SPE driver being builtin because:
> > > > 
> > > > 1. The SPE driver maintains a cpumask of physical CPUs that support SPE,
> > > >      and that will be used by KVM to emulate SPE on heterogeneous systems.
> > > > 
> > > > 2. KVM will rely on the SPE driver enabling the SPE interrupt at the GIC
> > > >      level.
> > > > 
> > > > Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com>
> > > > ---
> > > >    arch/arm64/kvm/Kconfig | 8 ++++++++
> > > >    1 file changed, 8 insertions(+)
> > > > 
> > > > diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig
> > > > index 4f803fd1c99a..31388b5b2655 100644
> > > > --- a/arch/arm64/kvm/Kconfig
> > > > +++ b/arch/arm64/kvm/Kconfig
> > > > @@ -83,4 +83,12 @@ config PTDUMP_STAGE2_DEBUGFS
> > > >    	  If in doubt, say N.
> > > > +config KVM_ARM_SPE
> > > > +	bool
> > > > +	depends on KVM && ARM_SPE_PMU=y
> > > 
> > > I think the most common configuration is module, so requiring built-in isn't
> > > great. If there's any way of avoiding it, even if it costs a little bit of
> > > pain, it would be good for adoption.
> > 
> > I'm not sure how that could be done. You need the buffer maintenance interrupt
> > to do a VM exit so KVM can inject the virtual interrupt back into the guest,
> > otherwise there's a possibility of a large blackout window when the buffer is
> > full.
> 
> Without expanding more I don't see how injecting an interrupt is strongly
> related to the way it's compiled.

It's the SPE driver that enables the hardware interrupt in the GIC.

> 
> > 
> > The code also relies on the SPE driver to probe all the SPUs in the system.
> > 
> 
> I don't think that's a hard requirement either, the KVM code could fairly
> easily do this itself. Inline the common code and put it in a shared header
> etc. I'm sure there are lots of creative ways to flip the dependencies that
> might not be "proper" software engineering. But like I said a bit of pain
> here might be beneficial overall.

Userspace gets the maximum buffer size and the SPE instance id from the sysfs
files.

So KVM would have to parse the DTB, read PMBIDR_EL1 and PMSIDR_EL1 on each
physical CPU in the system, create the sysfs files (at least 'type', 'cpumask'
and 'max_buffer_size' or whatever that ends up being named) and install a dummy
IRQ handler before the SPE driver is loaded.

Then when the SPE driver is loaded, the driver would have to remove the IRQ
handler and install its own, and create the rest of the sysfs files.

That's assuming that the SPE driver is loaded after KVM. I think it's possible
for the SPE driver to be loaded first. So both KVM and SPE would have be able to
communicate with one other in case the other probed first.

Is having to change the symbol ARM_SPE_PMU from 'm' to 'y' worth this? I am not
convinced and I don't see much use for going down this rabbit hole at this stage
of the series.

Also, since KVM would partially populate the sysfs directory for each SPE
instance, would it be reasonable for software to assume that the SPE driver is
loaded based on this and start using it? For example, how does perf detect the
presence of the arm_spe event?

Thanks,
Alex


  parent reply	other threads:[~2026-01-12 15:19 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-14 16:06 [RFC PATCH v6 00/35] KVM: arm64: Add Statistical Profiling Extension (SPE) support Alexandru Elisei
2025-11-14 16:06 ` [RFC PATCH v6 01/35] arm64/sysreg: Add new SPE fields Alexandru Elisei
2025-12-10 18:38   ` Leo Yan
2025-12-12  9:39     ` Alexandru Elisei
2025-12-15 21:42   ` Suzuki K Poulose
2025-11-14 16:06 ` [RFC PATCH v6 02/35] arm64/sysreg: Define MDCR_EL2.E2PB values Alexandru Elisei
2025-12-15 21:33   ` Suzuki K Poulose
2025-11-14 16:06 ` [RFC PATCH v6 03/35] KVM: arm64: Add CONFIG_KVM_ARM_SPE Kconfig option Alexandru Elisei
2026-01-09 16:29   ` James Clark
2026-01-12 11:26     ` Alexandru Elisei
2026-01-12 12:09       ` James Clark
2026-01-12 12:14         ` James Clark
2026-01-12 15:18         ` Alexandru Elisei [this message]
2026-01-13 10:25           ` Alexandru Elisei
2026-01-13 15:00             ` James Clark
2026-01-13 17:03               ` Alexandru Elisei
2025-11-14 16:06 ` [RFC PATCH v6 04/35] perf: arm_spe_pmu: Move struct arm_spe_pmu to a separate header file Alexandru Elisei
2025-11-14 16:06 ` [RFC PATCH v6 05/35] KVM: arm64: Add KVM_CAP_ARM_SPE capability Alexandru Elisei
2025-12-14 12:18   ` Leo Yan
2025-12-15 11:46     ` Alexandru Elisei
2025-11-14 16:06 ` [RFC PATCH v6 06/35] KVM: arm64: Add KVM_ARM_VCPU_SPE VCPU feature Alexandru Elisei
2025-11-14 16:06 ` [RFC PATCH v6 07/35] HACK! KVM: arm64: Disable SPE virtualization if protected KVM is enabled Alexandru Elisei
2025-11-14 16:06 ` [RFC PATCH v6 08/35] HACK! KVM: arm64: Enable SPE virtualization only in VHE mode Alexandru Elisei
2025-12-15 17:49   ` Leo Yan
2025-11-14 16:06 ` [RFC PATCH v6 09/35] HACK! KVM: arm64: Disable SPE virtualization if nested virt is enabled Alexandru Elisei
2025-11-14 16:06 ` [RFC PATCH v6 10/35] KVM: arm64: Add a new VCPU device control group for SPE Alexandru Elisei
2025-11-14 16:06 ` [RFC PATCH v6 11/35] KVM: arm64: Add SPE VCPU device attribute to set the interrupt number Alexandru Elisei
2025-11-14 16:06 ` [RFC PATCH v6 12/35] KVM: arm64: Add SPE VCPU device attribute to set the SPU device Alexandru Elisei
2025-11-14 16:06 ` [RFC PATCH v6 13/35] perf: arm_spe_pmu: Add PMBIDR_EL1 to struct arm_spe_pmu Alexandru Elisei
2025-11-14 16:06 ` [RFC PATCH v6 14/35] KVM: arm64: Add SPE VCPU device attribute to set the max buffer size Alexandru Elisei
2026-01-09 16:29   ` James Clark
2026-01-12 11:28     ` Alexandru Elisei
2026-01-12 11:50       ` James Clark
2026-01-12 14:03         ` Alexandru Elisei
2025-11-14 16:06 ` [RFC PATCH v6 15/35] KVM: arm64: Add SPE VCPU device attribute to initialize SPE Alexandru Elisei
2025-11-14 16:06 ` [RFC PATCH v6 16/35] KVM: arm64: Advertise SPE version in ID_AA64DFR0_EL1.PMSver Alexandru Elisei
2025-12-16 11:40   ` Suzuki K Poulose
2026-01-05 16:42     ` Alexandru Elisei
2025-11-14 16:06 ` [RFC PATCH v6 17/35] KVM: arm64: Add writable SPE system registers to VCPU context Alexandru Elisei
2025-12-16 11:54   ` Suzuki K Poulose
2026-01-05 16:42     ` Alexandru Elisei
2025-11-14 16:06 ` [RFC PATCH v6 18/35] perf: arm_spe_pmu: Add PMSIDR_EL1 to struct arm_spe_pmu Alexandru Elisei
2025-11-14 16:07 ` [RFC PATCH v6 19/35] KVM: arm64: Trap PMBIDR_EL1 and PMSIDR_EL1 Alexandru Elisei
2026-01-09 16:29   ` James Clark
2026-01-12 11:28     ` Alexandru Elisei
2026-01-12 11:54       ` James Clark
2026-01-13 12:48         ` Alexandru Elisei
2026-01-13 14:22           ` James Clark
2025-11-14 16:07 ` [RFC PATCH v6 20/35] KVM: arm64: config: Use functions from spe.c to test FEAT_SPE_{FnE,FDS} Alexandru Elisei
2025-11-14 16:07 ` [RFC PATCH v6 21/35] KVM: arm64: Check for unsupported CPU early in kvm_arch_vcpu_load() Alexandru Elisei
2025-11-14 16:07 ` [RFC PATCH v6 22/35] KVM: arm64: VHE: Context switch SPE state Alexandru Elisei
2025-11-14 16:07 ` [RFC PATCH v6 23/35] KVM: arm64: Allow guest SPE physical timestamps only if perfmon_capable() Alexandru Elisei
2025-11-14 16:07 ` [RFC PATCH v6 24/35] KVM: arm64: Handle SPE hardware maintenance interrupts Alexandru Elisei
2025-11-14 16:07 ` [RFC PATCH v6 25/35] KVM: arm64: Add basic handling of SPE buffer control registers writes Alexandru Elisei
2025-11-14 16:07 ` [RFC PATCH v6 26/35] KVM: arm64: Add comment to explain how trapped SPE registers are handled Alexandru Elisei
2025-11-14 16:07 ` [RFC PATCH v6 27/35] KVM: arm64: Make MTE functions public Alexandru Elisei
2025-11-14 16:07 ` [RFC PATCH v6 28/35] KVM: arm64: at: Use callback for reading descriptor Alexandru Elisei
2025-11-14 16:07 ` [RFC PATCH v6 29/35] KVM: arm64: Pin the SPE buffer in the host and map it at stage 2 Alexandru Elisei
2026-01-09 16:29   ` James Clark
2026-01-09 16:35     ` James Clark
2026-01-12 12:01     ` Alexandru Elisei
2026-01-13 14:18       ` James Clark
2025-11-14 16:07 ` [RFC PATCH v6 30/35] KVM: Propagate MMU event to the MMU notifier handlers Alexandru Elisei
2025-11-14 16:07 ` [RFC PATCH v6 31/35] KVM: arm64: Handle MMU notifiers for the SPE buffer Alexandru Elisei
2025-11-14 16:07 ` [RFC PATCH v6 32/35] KVM: Add KVM_EXIT_RLIMIT exit_reason Alexandru Elisei
2025-11-14 16:07 ` [RFC PATCH v6 33/35] KVM: arm64: Implement locked memory accounting for the SPE buffer Alexandru Elisei
2025-11-14 16:07 ` [RFC PATCH v6 34/35] KVM: arm64: Add hugetlb support for SPE Alexandru Elisei
2025-11-14 16:07 ` [RFC PATCH v6 35/35] KVM: arm64: Allow the creation of a SPE enabled VM Alexandru Elisei
2025-12-11 16:34 ` [RFC PATCH v6 00/35] KVM: arm64: Add Statistical Profiling Extension (SPE) support Leo Yan
2025-12-12 10:18   ` Alexandru Elisei
2025-12-12 11:15     ` Leo Yan
2025-12-12 11:54       ` Alexandru Elisei

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=aWUQ3bYuxpMEWTUk@raptor \
    --to=alexandru.elisei@arm.com \
    --cc=catalin.marinas@arm.com \
    --cc=james.clark@linaro.org \
    --cc=james.morse@arm.com \
    --cc=joey.gouly@arm.com \
    --cc=kvmarm@lists.linux.dev \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=mark.rutland@arm.com \
    --cc=maz@kernel.org \
    --cc=oliver.upton@linux.dev \
    --cc=suzuki.poulose@arm.com \
    --cc=will@kernel.org \
    --cc=yuzenghui@huawei.com \
    /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