Subject: [PATCH v3 0/6] KVM: arm64: Don't perform vgic-v2 lazy init on timer injection

From: Marc Zyngier <[email-masked]>
Date: Wed, 20 May 2026 11:01:54 +0100

This is the third version of this series aiming at fixing issues with
vgic-v2 being initialised from non-preemptible context.

* From v2 [2]:

  - Remove the PMU's irq level cache which was hidding in plain sight

  - Simplify the userspace notification of interrupt level update

  - Additional comment clarification in patch #1

  - Collected RB, with thanks

* From v1 [1]:

  - Repaint kvm_timer_irq_can_fire() to kvm_timer_enabled()

  - Drop duplicate kvm_timer_update_status() call

  - Force lazy init on the irqfd slow-path for SPIs

[1] https://lore.kernel.org/r/[email-masked]
[2] https://lore.kernel.org/r/[email-masked]

Marc Zyngier (6):
  KVM: arm64: timer: Repaint kvm_timer_{should,irq_can}_fire() to
    kvm_timer_{pending,enabled}()
  KVM: arm64: Simplify userspace notification of interrupt state
  KVM: arm64: timer: Kill the per-timer irq level cache
  KVM: arm64: pmu: Kill the PMU interrupt level cache
  KVM: arm64: vgic-v2: Force vgic init on injection outside the run loop
  KVM: arm64: vgic-v2: Don't init the vgic on in-kernel interrupt
    injection

 arch/arm64/kvm/arch_timer.c      | 106 ++++++++++++++-----------------
 arch/arm64/kvm/arm.c             |  39 ++++++++----
 arch/arm64/kvm/pmu-emul.c        |  31 +++------
 arch/arm64/kvm/vgic/vgic-irqfd.c |   6 ++
 arch/arm64/kvm/vgic/vgic.c       |   6 +-
 include/kvm/arm_arch_timer.h     |   7 +-
 include/kvm/arm_pmu.h            |   5 +-
 7 files changed, 94 insertions(+), 106 deletions(-)

-- 
2.47.3