From: Oliver Upton <oupton@kernel.org>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: Marc Zyngier <maz@kernel.org>,
kvmarm@lists.linux.dev, kvm@vger.kernel.org
Subject: [GIT PULL] KVM/arm64 updates for 6.19
Date: Mon, 1 Dec 2025 12:10:55 -0800 [thread overview]
Message-ID: <aS32T_UxeEfbeJx6@kernel.org> (raw)
Hi Paolo,
Now that I'm back from the holiday, here's the bulk of the 6.19 content. The
MMU changes look a little newer than they actually are (have been sitting in -next
for more than a week) because I squashed a fixup to avoid introducing bisection
issues.
As always, details can be found in the tag. There's an extremely minor conflict with
fixes that Marc queued in 6.18, my resolution is included at the end. Sorry about the
wrinkle, will try to avoid next time.
Please pull.
Thanks,
Oliver
The following changes since commit dcb6fa37fd7bc9c3d2b066329b0d27dedf8becaa:
Linux 6.18-rc3 (2025-10-26 15:59:49 -0700)
are available in the Git repository at:
https://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm.git/ tags/kvmarm-6.19
for you to fetch changes up to 3eef0c83c3f3e58933e98e678ddf4e95457d4d14:
Merge branch 'kvm-arm64/nv-xnx-haf' into kvmarm/next (2025-12-01 00:47:41 -0800)
----------------------------------------------------------------
KVM/arm64 updates for 6.19
- Support for userspace handling of synchronous external aborts (SEAs),
allowing the VMM to potentially handle the abort in a non-fatal
manner.
- Large rework of the VGIC's list register handling with the goal of
supporting more active/pending IRQs than available list registers in
hardware. In addition, the VGIC now supports EOImode==1 style
deactivations for IRQs which may occur on a separate vCPU than the
one that acked the IRQ.
- Support for FEAT_XNX (user / privileged execute permissions) and
FEAT_HAF (hardware update to the Access Flag) in the software page
table walkers and shadow MMU.
- Allow page table destruction to reschedule, fixing long need_resched
latencies observed when destroying a large VM.
- Minor fixes to KVM and selftests
----------------------------------------------------------------
Alexandru Elisei (3):
KVM: arm64: Document KVM_PGTABLE_PROT_{UX,PX}
KVM: arm64: at: Use correct HA bit in TCR_EL2 when regime is EL2
KVM: arm64: at: Update AF on software walk only if VM has FEAT_HAFDBS
Colin Ian King (1):
KVM: arm64: Fix spelling mistake "Unexpeced" -> "Unexpected"
Jiaqi Yan (3):
KVM: arm64: VM exit to userspace to handle SEA
KVM: selftests: Test for KVM_EXIT_ARM_SEA
Documentation: kvm: new UAPI for handling SEA
Marc Zyngier (51):
irqchip/gic: Add missing GICH_HCR control bits
irqchip/gic: Expose CPU interface VA to KVM
irqchip/apple-aic: Spit out ICH_MISR_EL2 value on spurious vGIC MI
KVM: arm64: Turn vgic-v3 errata traps into a patched-in constant
KVM: arm64: vgic-v3: Fix GICv3 trapping in protected mode
KVM: arm64: GICv3: Detect and work around the lack of ICV_DIR_EL1 trapping
KVM: arm64: Repack struct vgic_irq fields
KVM: arm64: Add tracking of vgic_irq being present in a LR
KVM: arm64: Add LR overflow handling documentation
KVM: arm64: GICv3: Drop LPI active state when folding LRs
KVM: arm64: GICv3: Preserve EOIcount on exit
KVM: arm64: GICv3: Decouple ICH_HCR_EL2 programming from LRs
KVM: arm64: GICv3: Extract LR folding primitive
KVM: arm64: GICv3: Extract LR computing primitive
KVM: arm64: GICv2: Preserve EOIcount on exit
KVM: arm64: GICv2: Decouple GICH_HCR programming from LRs being loaded
KVM: arm64: GICv2: Extract LR folding primitive
KVM: arm64: GICv2: Extract LR computing primitive
KVM: arm64: Compute vgic state irrespective of the number of interrupts
KVM: arm64: Eagerly save VMCR on exit
KVM: arm64: Revamp vgic maintenance interrupt configuration
KVM: arm64: Turn kvm_vgic_vcpu_enable() into kvm_vgic_vcpu_reset()
KVM: arm64: Make vgic_target_oracle() globally available
KVM: arm64: Invert ap_list sorting to push active interrupts out
KVM: arm64: Move undeliverable interrupts to the end of ap_list
KVM: arm64: Use MI to detect groups being enabled/disabled
KVM: arm64: GICv3: Handle LR overflow when EOImode==0
KVM: arm64: GICv3: Handle deactivation via ICV_DIR_EL1 traps
KVM: arm64: GICv3: Add GICv2 SGI handling to deactivation primitive
KVM: arm64: GICv3: Set ICH_HCR_EL2.TDIR when interrupts overflow LR capacity
KVM: arm64: GICv3: Add SPI tracking to handle asymmetric deactivation
KVM: arm64: GICv3: Handle in-LR deactivation when possible
KVM: arm64: GICv3: Avoid broadcast kick on CPUs lacking TDIR
KVM: arm64: GICv3: nv: Resync LRs/VMCR/HCR early for better MI emulation
KVM: arm64: GICv3: nv: Plug L1 LR sync into deactivation primitive
KVM: arm64: GICv3: Force exit to sync ICH_HCR_EL2.En
KVM: arm64: GICv2: Handle LR overflow when EOImode==0
KVM: arm64: GICv2: Handle deactivation via GICV_DIR traps
KVM: arm64: GICv2: Always trap GICV_DIR register
KVM: arm64: selftests: gic_v3: Add irq group setting helper
KVM: arm64: selftests: gic_v3: Disable Group-0 interrupts by default
KVM: arm64: selftests: vgic_irq: Fix GUEST_ASSERT_IAR_EMPTY() helper
KVM: arm64: selftests: vgic_irq: Change configuration before enabling interrupt
KVM: arm64: selftests: vgic_irq: Exclude timer-controlled interrupts
KVM: arm64: selftests: vgic_irq: Remove LR-bound limitation
KVM: arm64: selftests: vgic_irq: Perform EOImode==1 deactivation in ack order
KVM: arm64: selftests: vgic_irq: Add asymmetric SPI deaectivation test
KVM: arm64: selftests: vgic_irq: Add Group-0 enable test
KVM: arm64: selftests: vgic_irq: Add timer deactivation test
KVM: arm64: Convert ICH_HCR_EL2_TDIR cap to EARLY_LOCAL_CPU_FEATURE
KVM: arm64: Add endian casting to kvm_swap_s[12]_desc()
Maximilian Dittgen (2):
KVM: selftests: Assert GICR_TYPER.Processor_Number matches selftest CPU number
KVM: selftests: SYNC after guest ITS setup in vgic_lpi_stress
Nathan Chancellor (1):
KVM: arm64: Add break to default case in kvm_pgtable_stage2_pte_prot()
Oliver Upton (23):
KVM: arm64: Drop useless __GFP_HIGHMEM from kvm struct allocation
KVM: arm64: Use kvzalloc() for kvm struct allocation
KVM: arm64: Only drop references on empty tables in stage2_free_walker
arm64: Detect FEAT_XNX
KVM: arm64: Add support for FEAT_XNX stage-2 permissions
KVM: arm64: nv: Forward FEAT_XNX permissions to the shadow stage-2
KVM: arm64: Teach ptdump about FEAT_XNX permissions
KVM: arm64: nv: Advertise support for FEAT_XNX
KVM: arm64: Call helper for reading descriptors directly
KVM: arm64: nv: Stop passing vCPU through void ptr in S2 PTW
KVM: arm64: Handle endianness in read helper for emulated PTW
KVM: arm64: nv: Use pgtable definitions in stage-2 walk
KVM: arm64: Add helper for swapping guest descriptor
KVM: arm64: Propagate PTW errors up to AT emulation
KVM: arm64: Implement HW access flag management in stage-1 SW PTW
KVM: arm64: nv: Implement HW access flag management in stage-2 SW PTW
KVM: arm64: nv: Expose hardware access flag management to NV guests
KVM: arm64: selftests: Add test for AT emulation
KVM: arm64: Fix compilation when CONFIG_ARM64_USE_LSE_ATOMICS=n
Merge branch 'kvm-arm64/misc' into kvmarm/next
Merge branch 'kvm-arm64/sea-user' into kvmarm/next
Merge branch 'kvm-arm64/vgic-lr-overflow' into kvmarm/next
Merge branch 'kvm-arm64/nv-xnx-haf' into kvmarm/next
Raghavendra Rao Ananta (2):
KVM: arm64: Split kvm_pgtable_stage2_destroy()
KVM: arm64: Reschedule as needed when destroying the stage-2 page-tables
Documentation/virt/kvm/api.rst | 47 +++
arch/arm64/include/asm/kvm_arm.h | 1 +
arch/arm64/include/asm/kvm_asm.h | 8 +-
arch/arm64/include/asm/kvm_host.h | 3 +
arch/arm64/include/asm/kvm_hyp.h | 3 +-
arch/arm64/include/asm/kvm_nested.h | 40 +-
arch/arm64/include/asm/kvm_pgtable.h | 49 ++-
arch/arm64/include/asm/kvm_pkvm.h | 4 +-
arch/arm64/include/asm/virt.h | 7 +-
arch/arm64/kernel/cpufeature.c | 59 +++
arch/arm64/kernel/hyp-stub.S | 5 +
arch/arm64/kernel/image-vars.h | 1 +
arch/arm64/kvm/arm.c | 14 +-
arch/arm64/kvm/at.c | 196 +++++++++-
arch/arm64/kvm/hyp/nvhe/hyp-main.c | 7 +-
arch/arm64/kvm/hyp/nvhe/pkvm.c | 3 +
arch/arm64/kvm/hyp/nvhe/sys_regs.c | 5 +
arch/arm64/kvm/hyp/pgtable.c | 122 +++++-
arch/arm64/kvm/hyp/vgic-v2-cpuif-proxy.c | 4 +
arch/arm64/kvm/hyp/vgic-v3-sr.c | 96 +++--
arch/arm64/kvm/mmu.c | 132 ++++++-
arch/arm64/kvm/nested.c | 123 ++++--
arch/arm64/kvm/pkvm.c | 11 +-
arch/arm64/kvm/ptdump.c | 35 +-
arch/arm64/kvm/sys_regs.c | 28 +-
arch/arm64/kvm/vgic/vgic-init.c | 9 +-
arch/arm64/kvm/vgic/vgic-mmio-v2.c | 24 ++
arch/arm64/kvm/vgic/vgic-mmio.h | 1 +
arch/arm64/kvm/vgic/vgic-v2.c | 291 ++++++++++----
arch/arm64/kvm/vgic/vgic-v3-nested.c | 104 ++---
arch/arm64/kvm/vgic/vgic-v3.c | 426 ++++++++++++++++-----
arch/arm64/kvm/vgic/vgic-v4.c | 5 +-
arch/arm64/kvm/vgic/vgic.c | 298 ++++++++------
arch/arm64/kvm/vgic/vgic.h | 43 ++-
arch/arm64/tools/cpucaps | 2 +
drivers/irqchip/irq-apple-aic.c | 7 +-
drivers/irqchip/irq-gic.c | 3 +
include/kvm/arm_vgic.h | 29 +-
include/linux/irqchip/arm-gic.h | 6 +
include/linux/irqchip/arm-vgic-info.h | 2 +
include/uapi/linux/kvm.h | 10 +
tools/arch/arm64/include/asm/esr.h | 2 +
tools/testing/selftests/kvm/Makefile.kvm | 2 +
tools/testing/selftests/kvm/arm64/at.c | 166 ++++++++
tools/testing/selftests/kvm/arm64/sea_to_user.c | 331 ++++++++++++++++
tools/testing/selftests/kvm/arm64/vgic_irq.c | 285 ++++++++++++--
.../testing/selftests/kvm/arm64/vgic_lpi_stress.c | 4 +
tools/testing/selftests/kvm/include/arm64/gic.h | 1 +
.../selftests/kvm/include/arm64/gic_v3_its.h | 1 +
tools/testing/selftests/kvm/include/kvm_util.h | 1 +
tools/testing/selftests/kvm/lib/arm64/gic.c | 6 +
.../testing/selftests/kvm/lib/arm64/gic_private.h | 1 +
tools/testing/selftests/kvm/lib/arm64/gic_v3.c | 22 ++
tools/testing/selftests/kvm/lib/arm64/gic_v3_its.c | 10 +
tools/testing/selftests/kvm/lib/kvm_util.c | 11 +
55 files changed, 2575 insertions(+), 531 deletions(-)
create mode 100644 tools/testing/selftests/kvm/arm64/at.c
create mode 100644 tools/testing/selftests/kvm/arm64/sea_to_user.ca
--
diff --cc arch/arm64/kvm/vgic/vgic-v3.c
index 968aa9d89be6,2f75ef14d339..1d6dd1b545bd
--- a/arch/arm64/kvm/vgic/vgic-v3.c
+++ b/arch/arm64/kvm/vgic/vgic-v3.c
@@@ -507,9 -301,21 +507,10 @@@ void vcpu_set_ich_hcr(struct kvm_vcpu *
return;
/* Hide GICv3 sysreg if necessary */
- if (vcpu->kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V2)
+ if (vcpu->kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V2 ||
- !irqchip_in_kernel(vcpu->kvm)) {
++ !irqchip_in_kernel(vcpu->kvm))
vgic_v3->vgic_hcr |= (ICH_HCR_EL2_TALL0 | ICH_HCR_EL2_TALL1 |
ICH_HCR_EL2_TC);
- return;
- }
-
- if (group0_trap)
- vgic_v3->vgic_hcr |= ICH_HCR_EL2_TALL0;
- if (group1_trap)
- vgic_v3->vgic_hcr |= ICH_HCR_EL2_TALL1;
- if (common_trap)
- vgic_v3->vgic_hcr |= ICH_HCR_EL2_TC;
- if (dir_trap)
- vgic_v3->vgic_hcr |= ICH_HCR_EL2_TDIR;
}
int vgic_v3_lpi_sync_pending_status(struct kvm *kvm, struct vgic_irq *irq)
next reply other threads:[~2025-12-01 20:10 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-01 20:10 Oliver Upton [this message]
2025-12-02 17:36 ` [GIT PULL] KVM/arm64 updates for 6.19 Paolo Bonzini
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=aS32T_UxeEfbeJx6@kernel.org \
--to=oupton@kernel.org \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.linux.dev \
--cc=maz@kernel.org \
--cc=pbonzini@redhat.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