[PATCH v3 00/40] KVM: arm64: Add GICv5 IRS support
Sascha Bischoff
Sascha.Bischoff at arm.com
Fri Jul 24 03:28:18 PDT 2026
Hi Fuad,
On Wed, 2026-07-22 at 16:10 +0100, Fuad Tabba wrote:
> Hi Sascha,
>
> On Wed, 22 Jul 2026 at 15:40, Sascha Bischoff
> <Sascha.Bischoff at arm.com> wrote:
> ...
> > > I have started working through this series and will send per-
> > > patch
> > > comments as I go, starting with the userspace interface since
> > > that's
> > > trickier to change later. I am still coming up to speed on GICv5,
> > > so
> > > please take these with that in mind. A couple of series level
> > > things
> > > first, while v4 is still open.
> >
> > Thanks a lot for taking the time and for any and all comments.
>
> Thanks, that answers most of what I was after.
>
> ...
>
> > I have a set of tests that look at the various "components" that we
> > have in the GICv5 KVM implementation, including the IST
> > save/restore.
> > This latter test does also save/restore the IRS MMIO regs as part
> > of
> > testing the IST save/restore.
>
> Good that the round trip already exists, that was really the
> question.
> One thing I could not tell from the output: does the test compare the
> restored state against the saved state field by field, so that a
> dropped field fails it, rather than just a save and restore within
> one
> VM? That is what would give the confidence you asked for on omitted
> state. If it already does, worth a line in the cover letter.
The IST migration selftest restores state into a separate VM, re-saves
the SPI and LPI IST images before the destination runs, and compares
them byte-for-byte with the source images. It also validates restored
IST state through SPI/LPI delivery, priority, enable, and affinity
behavior. It doesn't re-read every MMIO register, however.
>
> > These do add a further ~2k lines to review across 9 commits, which
> > is
> > why I'd not included them in the series posting. The git diff --
> > stat
> > for the local series with these included is currently:
>
> I would still land them in tree rather than point at them: out-of-
> tree
> tests give reviewers nothing to run and no regression cover, which is
> where the ordering constraints most need it. The test code is not the
> expensive part of the review, the ~6000 lines of IRS and table code
> are, so the selftests help more than they cost. If nine commits is
> too
> much at once, the IST save/restore one is the piece I would most want
> alongside the save/restore code, the rest can follow.
I'm going to include them in the next posting of the series (coming
imminently). It makes much more sense to keep them together and to be
able to demonstrate that things have been tested, and how they are
tested. This will also highlight any gaps in what I have (hopefully not
many).
>
> ...
>
> > Noted - I should have been clearer here. The intent was that the
> > save/restore functionality was bundled together with the IRS, SPI,
> > and
> > LPI support. With this series it becomes possible to run something
> > real
> > with KVM on a GICv5 system. Prior to this series, we only had PPI
> > support which also meant a single VPE, and no ability to run
> > anything
> > particularly meaningful.
> >
> > Personally, I'm quite happy to do whatever is best for the
> > reviewers to
> > make things as easy to review as possible. I can either extend the
> > series with the set of selftests, or I can drop the save/restore
> > support for the time being. Happy to hear your thoughts. FWIW, I
> > believe that Marc preferred them to land together for the reason
> > above.
>
> Makes sense, no objection to keeping them together. Worth putting in
> the v4 cover letter so the next reader does not have to ask. One
> thing
> on the reasoning: "run something real" argues for SPI and LPI landing
> together, since a guest boots without save/restore. Bundling
> save/restore itself reads more like not shipping a feature userspace
> can create but not migrate, then retrofitting the ABI later. If that
> is the reason, worth saying so.
I'll make it clear in the next cover letter. Thanks again!
Sascha
>
> Cheers,
> /fuad
>
>
> >
> > Thanks again for your input.
> > Sascha
> >
> > >
> > > Cheers,
> > > /fuad
> > >
> > >
> > >
> > > >
> > > > Thanks,
> > > > Sascha
> > > >
> > > > [1]
> > > > https://lore.kernel.org/all/20260319154937.3619520-1-sascha.bischoff@arm.com/
> > > > [2] https://developer.arm.com/documentation/aes0070/latest
> > > > [3] https://developer.arm.com/documentation/108086/latest
> > > > [4] https://linaro.atlassian.net/wiki/x/CQAF-wY
> > > > [5]
> > > > https://lore.kernel.org/all/20260116182606.61856-1-sascha.bischoff@arm.com/
> > > > [6]
> > > > https://gitlab.arm.com/linux-arm/linux-sb/-/tree/gicv5_kvm_irs_support_v3
> > > > [7]
> > > > https://lore.kernel.org/all/20260427160547.3129448-1-sascha.bischoff@arm.com/
> > > > [8]
> > > > https://lore.kernel.org/all/20260521144846.1899475-1-sascha.bischoff@arm.com/
> > > >
> > > > Sascha Bischoff (40):
> > > > irqchip/gic-v5: Allow KVM setup without a maintenance IRQ
> > > > irqchip/gic-v5: Provide OF IRS config frame attrs to KVM
> > > > irqchip/gic-v5: Set up gic_kvm_info on ACPI hosts
> > > > KVM: arm64: gic-v5: Define remaining IRS MMIO registers
> > > > arm64/sysreg: Add GICv5 GIC VDPEND and VDRCFG encodings
> > > > arm64/sysreg: Update ICC_CR0_EL1 with LINK and LINK_IDLE
> > > > fields
> > > > KVM: arm64: gic-v5: Extract host IRS caps from IRS config
> > > > frame
> > > > KVM: arm64: gic-v5: Add VPE doorbell domain
> > > > KVM: arm64: gic-v5: Create and manage VM and VPE tables
> > > > KVM: arm64: gic-v5: Introduce guest IST alloc and management
> > > > KVM: arm64: gic-v5: Implement VMT/vIST IRS MMIO Ops
> > > > KVM: arm64: gic-v5: Keep GICv5 vCPU limit model-specific
> > > > KVM: arm64: gic-v5: Implement VPE IRS MMIO Ops
> > > > KVM: arm64: gic-v5: Set up VMTEs and VPE doorbells
> > > > KVM: arm64: gic-v5: Add resident/non-resident hyp calls
> > > > KVM: arm64: gic-v5: Request doorbells when VPEs enter WFI
> > > > KVM: arm64: gic-v5: Introduce struct vgic_v5_irs and IRS base
> > > > address
> > > > KVM: arm64: gic-v5: Add IRS IODEV support to MMIO handlers
> > > > KVM: arm64: gic-v5: Add KVM_VGIC_V5_ADDR_TYPE_IRS to UAPI
> > > > KVM: arm64: gic-v5: Add GICv5 IRS IODEV and MMIO emulation
> > > > KVM: arm64: gic-v5: Initialise per-VM IRS state
> > > > KVM: arm64: gic-v5: Register the IRS IODEV
> > > > KVM: arm64: gic-v5: Set IRICHPPIDIS based on IRS enable state
> > > > KVM: arm64: selftests: Update vGICv5 selftest to set IRS
> > > > address
> > > > KVM: arm64: gic-v5: Introduce SPI AP list
> > > > KVM: arm64: gic-v5: Add GIC VDPEND and GIC VDRCFG hyp calls
> > > > KVM: arm64: gic-v5: Track SPI state for in-flight SPIs
> > > > KVM: arm64: gic: Introduce set_pending_state() to irq_op
> > > > KVM: arm64: gic-v5: Support SPI injection
> > > > Documentation: KVM: Extend VGICv5 docs for
> > > > KVM_VGIC_V5_ADDR_TYPE_IRS
> > > > KVM: arm64: gic-v5: Add GICv5 SPI injection to irqfd
> > > > KVM: arm64: gic-v5: Mask per-vcpu PPI state in
> > > > vgic_v5_finalize_ppi_state()
> > > > KVM: arm64: gic-v5: Add GICv5 EL1 sysreg userspace accessors
> > > > KVM: arm64: gic-v5: Handle userspace accesses to IRS MMIO
> > > > region
> > > > KVM: arm64: gic-v5: Add CoreSight MMIO regs to IRS
> > > > KVM: arm64: gic-v5: Implement save/restore mechanisms for
> > > > ISTs
> > > > Documentation: KVM: Document KVM_DEV_ARM_VGIC_GRP_CPU_SYSREGS
> > > > for
> > > > VGICv5
> > > > Documentation: KVM: Add KVM_DEV_ARM_VGIC_GRP_IRS_REGS to
> > > > VGICv5
> > > > docs
> > > > Documentation: KVM: Add docs for KVM_DEV_ARM_VGIC_GRP_IST
> > > > Documentation: KVM: Add the VGICv5 IRS save/restore sequences
> > > >
> > > > .../virt/kvm/devices/arm-vgic-v5.rst | 237 ++-
> > > > arch/arm64/include/asm/kvm_asm.h | 4 +
> > > > arch/arm64/include/asm/kvm_hyp.h | 4 +
> > > > arch/arm64/include/asm/sysreg.h | 18 +-
> > > > arch/arm64/include/uapi/asm/kvm.h | 7 +
> > > > arch/arm64/kvm/Makefile | 3 +-
> > > > arch/arm64/kvm/arm.c | 2 +-
> > > > arch/arm64/kvm/hyp/nvhe/hyp-main.c | 34 +
> > > > arch/arm64/kvm/hyp/vgic-v5-sr.c | 55 +
> > > > arch/arm64/kvm/sys_regs.c | 6 +-
> > > > arch/arm64/kvm/vgic-sys-reg-v5.c | 519 +++++
> > > > arch/arm64/kvm/vgic/vgic-init.c | 111 +-
> > > > arch/arm64/kvm/vgic/vgic-irqfd.c | 17 +-
> > > > arch/arm64/kvm/vgic/vgic-irs-v5.c | 1138
> > > > ++++++++++
> > > > arch/arm64/kvm/vgic/vgic-kvm-device.c | 252 ++-
> > > > arch/arm64/kvm/vgic/vgic-mmio.c | 6 +
> > > > arch/arm64/kvm/vgic/vgic-mmio.h | 2 +
> > > > arch/arm64/kvm/vgic/vgic-v5-tables.c | 1855
> > > > +++++++++++++++++
> > > > arch/arm64/kvm/vgic/vgic-v5-tables.h | 112 +
> > > > arch/arm64/kvm/vgic/vgic-v5.c | 1220
> > > > ++++++++++-
> > > > arch/arm64/kvm/vgic/vgic.c | 39 +-
> > > > arch/arm64/kvm/vgic/vgic.h | 21 +-
> > > > arch/arm64/tools/sysreg | 4 +-
> > > > drivers/irqchip/irq-gic-v5-irs.c | 19 +-
> > > > drivers/irqchip/irq-gic-v5.c | 117 +-
> > > > include/kvm/arm_vgic.h | 165 +-
> > > > include/linux/irqchip/arm-gic-v5.h | 256 ++-
> > > > include/linux/irqchip/arm-vgic-info.h | 5 +
> > > > tools/arch/arm64/include/uapi/asm/kvm.h | 7 +
> > > > tools/testing/selftests/kvm/arm64/vgic_v5.c | 6 +
> > > > .../selftests/kvm/include/arm64/gic_v5.h | 3 +
> > > > 31 files changed, 6093 insertions(+), 151 deletions(-)
> > > > create mode 100644 arch/arm64/kvm/vgic-sys-reg-v5.c
> > > > create mode 100644 arch/arm64/kvm/vgic/vgic-irs-v5.c
> > > > create mode 100644 arch/arm64/kvm/vgic/vgic-v5-tables.c
> > > > create mode 100644 arch/arm64/kvm/vgic/vgic-v5-tables.h
> > > >
> > > > --
> > > > 2.34.1
> > > >
> >
More information about the linux-arm-kernel
mailing list