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: Tue, 13 Jan 2026 10:25:37 +0000	[thread overview]
Message-ID: <aWYdob5IfyOQcu6I@raptor> (raw)
In-Reply-To: <aWUQ3bYuxpMEWTUk@raptor>

Hi James,

On Mon, Jan 12, 2026 at 03:18:53PM +0000, Alexandru Elisei wrote:
> 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?

Coming back to this, I do understand and agree with your concerns, so after
talking in private I came up with exporting the symbol kvm_host_spe_init() -
that's the function which adds the SPE instance to the list of SPUs.

With this change the SPE driver can be built as a module, but SPE for a VM is
available only as long as the driver is loaded.

I hope that improves the adoption story :)

Thanks,
Alex


  reply	other threads:[~2026-01-13 10:26 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
2026-01-13 10:25           ` Alexandru Elisei [this message]
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=aWYdob5IfyOQcu6I@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