Skip to content

Commit

Permalink
KVM: arm64: Restructure the point where has_run_once is advertised
Browse files Browse the repository at this point in the history
Restructure kvm_vcpu_first_run_init() to set the has_run_once
flag after having completed all the "run once" activities.

This includes moving the flip of the userspace irqchip static key
to a point where nothing can fail.

Reviewed-by: Andrew Jones <drjones@redhat.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
  • Loading branch information
Marc Zyngier committed Dec 1, 2021
1 parent 052f064 commit 1408e73
Showing 1 changed file with 12 additions and 8 deletions.
20 changes: 12 additions & 8 deletions arch/arm64/kvm/arm.c
Original file line number Diff line number Diff line change
Expand Up @@ -600,8 +600,6 @@ static int kvm_vcpu_first_run_init(struct kvm_vcpu *vcpu)
if (!kvm_arm_vcpu_is_finalized(vcpu))
return -EPERM;

vcpu->arch.has_run_once = true;

kvm_arm_vcpu_init_debug(vcpu);

if (likely(irqchip_in_kernel(kvm))) {
Expand All @@ -612,19 +610,25 @@ static int kvm_vcpu_first_run_init(struct kvm_vcpu *vcpu)
ret = kvm_vgic_map_resources(kvm);
if (ret)
return ret;
} else {
/*
* Tell the rest of the code that there are userspace irqchip
* VMs in the wild.
*/
static_branch_inc(&userspace_irqchip_in_use);
}

ret = kvm_timer_enable(vcpu);
if (ret)
return ret;

ret = kvm_arm_pmu_v3_enable(vcpu);
if (ret)
return ret;

if (!irqchip_in_kernel(kvm)) {
/*
* Tell the rest of the code that there are userspace irqchip
* VMs in the wild.
*/
static_branch_inc(&userspace_irqchip_in_use);
}

vcpu->arch.has_run_once = true;

/*
* Initialize traps for protected VMs.
Expand Down

0 comments on commit 1408e73

Please sign in to comment.