Commit d2137ba8 authored by Marc Zyngier's avatar Marc Zyngier
Browse files

KVM: arm64: Move GICv3 trap configuration to kvm_calculate_traps()



Follow the pattern introduced with vcpu_set_hcr(), and introduce
vcpu_set_ich_hcr(), which configures the GICv3 traps at the same
point.

This will allow future changes to introduce trap configuration on
a per-VM basis.

Reviewed-by: default avatarOliver Upton <oliver.upton@linux.dev>
Link: https://lore.kernel.org/r/20240827152517.3909653-2-maz@kernel.org


Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
parent 5be63fc1
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -4551,6 +4551,7 @@ void kvm_calculate_traps(struct kvm_vcpu *vcpu)

	mutex_lock(&kvm->arch.config_lock);
	vcpu_set_hcr(vcpu);
	vcpu_set_ich_hcr(vcpu);

	if (cpus_have_final_cap(ARM64_HAS_HCX)) {
		/*
+9 −0
Original line number Diff line number Diff line
@@ -292,6 +292,15 @@ void vgic_v3_enable(struct kvm_vcpu *vcpu)

	/* Get the show on the road... */
	vgic_v3->vgic_hcr = ICH_HCR_EN;
}

void vcpu_set_ich_hcr(struct kvm_vcpu *vcpu)
{
	struct vgic_v3_cpu_if *vgic_v3 = &vcpu->arch.vgic_cpu.vgic_v3;

	if (!kvm_has_gicv3(vcpu->kvm))
		return;

	if (group0_trap)
		vgic_v3->vgic_hcr |= ICH_HCR_TALL0;
	if (group1_trap)
+2 −0
Original line number Diff line number Diff line
@@ -346,6 +346,8 @@ void vgic_v4_configure_vsgis(struct kvm *kvm);
void vgic_v4_get_vlpi_state(struct vgic_irq *irq, bool *val);
int vgic_v4_request_vpe_irq(struct kvm_vcpu *vcpu, int irq);

void vcpu_set_ich_hcr(struct kvm_vcpu *vcpu);

static inline bool kvm_has_gicv3(struct kvm *kvm)
{
	return (static_branch_unlikely(&kvm_vgic_global_state.gicv3_cpuif) &&