]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
KVM: arm64: Use MI to detect groups being enabled/disabled
authorMarc Zyngier <maz@kernel.org>
Thu, 20 Nov 2025 17:25:16 +0000 (17:25 +0000)
committerOliver Upton <oupton@kernel.org>
Mon, 24 Nov 2025 22:29:13 +0000 (14:29 -0800)
Add the maintenance interrupt to force an exit when the guest
enables/disables individual groups, so that we can resort the
ap_list accordingly.

Tested-by: Fuad Tabba <tabba@google.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Tested-by: Mark Brown <broonie@kernel.org>
Link: https://msgid.link/20251120172540.2267180-27-maz@kernel.org
Signed-off-by: Oliver Upton <oupton@kernel.org>
arch/arm64/kvm/vgic/vgic-v2.c
arch/arm64/kvm/vgic/vgic-v3.c

index 18856186be7bef11e252cfeb4eba03a063cb9a5e..9a2de03f74c3003359ccf69ba028b39c8731e1cb 100644 (file)
@@ -39,6 +39,11 @@ void vgic_v2_configure_hcr(struct kvm_vcpu *vcpu,
                cpuif->vgic_hcr |= GICH_HCR_LRENPIE;
        if (irqs_outside_lrs(als))
                cpuif->vgic_hcr |= GICH_HCR_UIE;
+
+       cpuif->vgic_hcr |= (cpuif->vgic_vmcr & GICH_VMCR_ENABLE_GRP0_MASK) ?
+               GICH_HCR_VGrp0DIE : GICH_HCR_VGrp0EIE;
+       cpuif->vgic_hcr |= (cpuif->vgic_vmcr & GICH_VMCR_ENABLE_GRP1_MASK) ?
+               GICH_HCR_VGrp1DIE : GICH_HCR_VGrp1EIE;
 }
 
 static bool lr_signals_eoi_mi(u32 lr_val)
index 780cc92c79e044f9be11d3fe3d34414d0fdee8a9..312226cc2565df1bb477001c1cdd5d5246658cd4 100644 (file)
@@ -39,6 +39,11 @@ void vgic_v3_configure_hcr(struct kvm_vcpu *vcpu,
 
        if (!als->nr_sgi)
                cpuif->vgic_hcr |= ICH_HCR_EL2_vSGIEOICount;
+
+       cpuif->vgic_hcr |= (cpuif->vgic_vmcr & ICH_VMCR_ENG0_MASK) ?
+               ICH_HCR_EL2_VGrp0DIE : ICH_HCR_EL2_VGrp0EIE;
+       cpuif->vgic_hcr |= (cpuif->vgic_vmcr & ICH_VMCR_ENG1_MASK) ?
+               ICH_HCR_EL2_VGrp1DIE : ICH_HCR_EL2_VGrp1EIE;
 }
 
 static bool lr_signals_eoi_mi(u64 lr_val)