From: Marc Zyngier <maz@kernel.org>
To: Sascha Bischoff <Sascha.Bischoff@arm.com>
Cc: "linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"kvmarm@lists.linux.dev" <kvmarm@lists.linux.dev>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>, nd <nd@arm.com>,
"oliver.upton@linux.dev" <oliver.upton@linux.dev>,
Joey Gouly <Joey.Gouly@arm.com>,
Suzuki Poulose <Suzuki.Poulose@arm.com>,
"yuzenghui@huawei.com" <yuzenghui@huawei.com>,
"peter.maydell@linaro.org" <peter.maydell@linaro.org>,
"lpieralisi@kernel.org" <lpieralisi@kernel.org>,
Timothy Hayes <Timothy.Hayes@arm.com>,
"jonathan.cameron@huawei.com" <jonathan.cameron@huawei.com>
Subject: Re: [PATCH v4 10/36] KVM: arm64: gic-v5: Detect implemented PPIs on boot
Date: Fri, 30 Jan 2026 11:03:43 +0000 [thread overview]
Message-ID: <864io3bbw0.wl-maz@kernel.org> (raw)
In-Reply-To: <20260128175919.3828384-11-sascha.bischoff@arm.com>
On Wed, 28 Jan 2026 18:01:54 +0000,
Sascha Bischoff <Sascha.Bischoff@arm.com> wrote:
>
> As part of booting the system and initialising KVM, create and
> populate a mask of the implemented PPIs. This mask allows future PPI
> operations (such as save/restore or state, or syncing back into the
> shadow state) to only consider PPIs that are actually implemented on
> the host.
>
> The set of implemented virtual PPIs matches the set of implemented
> physical PPIs for a GICv5 host. Therefore, this mask represents all
> PPIs that could ever by used by a GICv5-based guest on a specific
> host.
>
> Only architected PPIs are currently supported in KVM with
> GICv5. Moreover, as KVM only supports a subset of all possible PPIS
> (Timers, PMU, GICv5 SW_PPI) the PPI mask only includes these PPIs, if
> present. The timers are always assumed to be present; if we have KVM
> we have EL2, which means that we have the EL1 & EL2 Timer PPIs. If we
> have a PMU (v3), then the PMUIRQ is present. The GICv5 SW_PPI is
> always assumed to be present.
>
> Signed-off-by: Sascha Bischoff <sascha.bischoff@arm.com>
> ---
> arch/arm64/kvm/vgic/vgic-init.c | 4 ++++
> arch/arm64/kvm/vgic/vgic-v5.c | 33 ++++++++++++++++++++++++++++++
> arch/arm64/kvm/vgic/vgic.h | 1 +
> include/kvm/arm_vgic.h | 5 +++++
> include/linux/irqchip/arm-gic-v5.h | 10 +++++++++
> 5 files changed, 53 insertions(+)
>
> diff --git a/arch/arm64/kvm/vgic/vgic-init.c b/arch/arm64/kvm/vgic/vgic-init.c
> index 86c149537493..653364299154 100644
> --- a/arch/arm64/kvm/vgic/vgic-init.c
> +++ b/arch/arm64/kvm/vgic/vgic-init.c
> @@ -750,5 +750,9 @@ int kvm_vgic_hyp_init(void)
> }
>
> kvm_info("vgic interrupt IRQ%d\n", kvm_vgic_global_state.maint_irq);
> +
> + /* Always safe to call */
> + vgic_v5_get_implemented_ppis();
What is the reason for calling this from the generic code, while it is
v5-specific? I'd have expected this to be entirely contained in the v5
subsystem.
> +
> return 0;
> }
> diff --git a/arch/arm64/kvm/vgic/vgic-v5.c b/arch/arm64/kvm/vgic/vgic-v5.c
> index 23d0a495d855..9bd5a85ba203 100644
> --- a/arch/arm64/kvm/vgic/vgic-v5.c
> +++ b/arch/arm64/kvm/vgic/vgic-v5.c
> @@ -8,6 +8,8 @@
>
> #include "vgic.h"
>
> +static struct vgic_v5_ppi_caps *ppi_caps;
> +
> /*
> * Probe for a vGICv5 compatible interrupt controller, returning 0 on success.
> * Currently only supports GICv3-based VMs on a GICv5 host, and hence only
> @@ -53,3 +55,34 @@ int vgic_v5_probe(const struct gic_kvm_info *info)
>
> return 0;
> }
> +
> +/*
> + * Not all PPIs are guaranteed to be implemented for GICv5. Deterermine which
> + * ones are, and generate a mask.
> + */
> +void vgic_v5_get_implemented_ppis(void)
> +{
> + if (!cpus_have_final_cap(ARM64_HAS_GICV5_CPUIF))
> + return;
> +
> + /* Never freed again */
> + ppi_caps = kzalloc(sizeof(*ppi_caps), GFP_KERNEL);
> + if (!ppi_caps)
> + return;
Maybe we can spare the call by statically allocating the PPI
structure? Just the code calling kzalloc() costs us more than the 128
bits required by the structure.
Thanks,
M.
--
Without deviation from the norm, progress is not possible.
next prev parent reply other threads:[~2026-01-30 11:03 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-28 17:59 [PATCH v4 00/36] KVM: arm64: Introduce vGIC-v5 with PPI support Sascha Bischoff
2026-01-28 17:59 ` [PATCH v4 01/36] KVM: arm64: Account for RES1 bits in DECLARE_FEAT_MAP() and co Sascha Bischoff
2026-01-28 17:59 ` [PATCH v4 02/36] KVM: arm64: gic-v3: Switch vGIC-v3 to use generated ICH_VMCR_EL2 Sascha Bischoff
2026-01-28 18:00 ` [PATCH v4 03/36] arm64/sysreg: Drop ICH_HFGRTR_EL2.ICC_HAPR_EL1 and make RES1 Sascha Bischoff
2026-01-28 18:00 ` [PATCH v4 04/36] arm64/sysreg: Add remaining GICv5 ICC_ & ICH_ sysregs for KVM support Sascha Bischoff
2026-01-28 18:00 ` [PATCH v4 05/36] arm64/sysreg: Add GICR CDNMIA encoding Sascha Bischoff
2026-01-28 18:00 ` [PATCH v4 06/36] KVM: arm64: gic: Set vgic_model before initing private IRQs Sascha Bischoff
2026-01-28 18:01 ` [PATCH v4 07/36] KVM: arm64: gic-v5: Add ARM_VGIC_V5 device to KVM headers Sascha Bischoff
2026-01-28 18:01 ` [PATCH v4 08/36] KVM: arm64: gic: Introduce interrupt type helpers Sascha Bischoff
2026-01-28 18:01 ` [PATCH v4 09/36] KVM: arm64: gic-v5: Add Arm copyright header Sascha Bischoff
2026-01-28 18:01 ` [PATCH v4 10/36] KVM: arm64: gic-v5: Detect implemented PPIs on boot Sascha Bischoff
2026-01-29 12:15 ` Jonathan Cameron
2026-01-30 11:03 ` Marc Zyngier [this message]
2026-01-30 12:33 ` Sascha Bischoff
2026-01-28 18:02 ` [PATCH v4 11/36] KVM: arm64: gic-v5: Sanitize ID_AA64PFR2_EL1.GCIE Sascha Bischoff
2026-01-30 11:38 ` Marc Zyngier
2026-01-30 17:13 ` Sascha Bischoff
2026-01-30 17:26 ` Marc Zyngier
2026-01-28 18:02 ` [PATCH v4 12/36] KVM: arm64: gic-v5: Support GICv5 FGTs & FGUs Sascha Bischoff
2026-01-28 18:02 ` [PATCH v4 13/36] KVM: arm64: gic-v5: Add emulation for ICC_IAFFIDR_EL1 accesses Sascha Bischoff
2026-01-28 18:02 ` [PATCH v4 14/36] KVM: arm64: gic-v5: Add vgic-v5 save/restore hyp interface Sascha Bischoff
2026-01-28 18:03 ` [PATCH v4 15/36] KVM: arm64: gic-v5: Implement GICv5 load/put and save/restore Sascha Bischoff
2026-01-28 18:03 ` [PATCH v4 16/36] KVM: arm64: gic-v5: Implement direct injection of PPIs Sascha Bischoff
2026-01-28 18:03 ` [PATCH v4 17/36] KVM: arm64: gic-v5: Finalize GICv5 PPIs and generate mask Sascha Bischoff
2026-01-28 18:03 ` [PATCH v4 18/36] KVM: arm64: gic: Introduce queue_irq_unlock to irq_ops Sascha Bischoff
2026-01-28 18:04 ` [PATCH v4 19/36] KVM: arm64: gic-v5: Implement PPI interrupt injection Sascha Bischoff
2026-01-28 18:04 ` [PATCH v4 20/36] KVM: arm64: gic-v5: Init Private IRQs (PPIs) for GICv5 Sascha Bischoff
2026-01-28 18:04 ` [PATCH v4 21/36] KVM: arm64: gic-v5: Check for pending PPIs Sascha Bischoff
2026-01-29 12:21 ` Jonathan Cameron
2026-01-28 18:04 ` [PATCH v4 22/36] KVM: arm64: gic-v5: Trap and mask guest ICC_PPI_ENABLERx_EL1 writes Sascha Bischoff
2026-01-28 18:05 ` [PATCH v4 23/36] KVM: arm64: gic-v5: Support GICv5 interrupts with KVM_IRQ_LINE Sascha Bischoff
2026-01-28 18:05 ` [PATCH v4 24/36] KVM: arm64: gic-v5: Create and initialise vgic_v5 Sascha Bischoff
2026-01-28 18:05 ` [PATCH v4 25/36] KVM: arm64: gic-v5: Reset vcpu state Sascha Bischoff
2026-01-28 18:06 ` [PATCH v4 26/36] KVM: arm64: gic-v5: Bump arch timer for GICv5 Sascha Bischoff
2026-01-28 18:06 ` [PATCH v4 27/36] KVM: arm64: gic-v5: Mandate architected PPI for PMU emulation on GICv5 Sascha Bischoff
2026-01-28 18:06 ` [PATCH v4 28/36] KVM: arm64: gic: Hide GICv5 for protected guests Sascha Bischoff
2026-01-28 18:06 ` [PATCH v4 29/36] KVM: arm64: gic-v5: Hide FEAT_GCIE from NV GICv5 guests Sascha Bischoff
2026-01-28 18:07 ` [PATCH v4 30/36] KVM: arm64: gic-v5: Introduce kvm_arm_vgic_v5_ops and register them Sascha Bischoff
2026-01-28 18:07 ` [PATCH v4 31/36] KVM: arm64: gic-v5: Set ICH_VCTLR_EL2.En on boot Sascha Bischoff
2026-01-28 18:07 ` [PATCH v4 32/36] irqchip/gic-v5: Check if impl is virt capable Sascha Bischoff
2026-01-30 11:14 ` Marc Zyngier
2026-01-30 13:58 ` Sascha Bischoff
2026-01-28 18:07 ` [PATCH v4 33/36] KVM: arm64: gic-v5: Probe for GICv5 device Sascha Bischoff
2026-01-28 18:08 ` [PATCH v4 34/36] Documentation: KVM: Introduce documentation for VGICv5 Sascha Bischoff
2026-01-28 18:08 ` [PATCH v4 35/36] KVM: arm64: selftests: Introduce a minimal GICv5 PPI selftest Sascha Bischoff
2026-01-29 11:29 ` kernel test robot
2026-01-28 18:08 ` [PATCH v4 36/36] KVM: arm64: gic-v5: Communicate userspace-driveable PPIs via a UAPI Sascha Bischoff
2026-01-29 12:25 ` Jonathan Cameron
2026-01-30 11:18 ` (subset) [PATCH v4 00/36] KVM: arm64: Introduce vGIC-v5 with PPI support Marc Zyngier
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=864io3bbw0.wl-maz@kernel.org \
--to=maz@kernel.org \
--cc=Joey.Gouly@arm.com \
--cc=Sascha.Bischoff@arm.com \
--cc=Suzuki.Poulose@arm.com \
--cc=Timothy.Hayes@arm.com \
--cc=jonathan.cameron@huawei.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=lpieralisi@kernel.org \
--cc=nd@arm.com \
--cc=oliver.upton@linux.dev \
--cc=peter.maydell@linaro.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.