Skip to content

Commit

Permalink
arm/arm64: KVM: Add (new) vgic_initialized macro
Browse files Browse the repository at this point in the history
Some code paths will need to check to see if the internal state of the
vgic has been initialized (such as when creating new VCPUs), so
introduce such a macro that checks the nr_cpus field which is set when
the vgic has been initialized.

Also set nr_cpus = 0 in kvm_vgic_destroy, because the error path in
vgic_init() will call this function, and code should never errornously
assume the vgic to be properly initialized after an error.

Acked-by: Marc Zyngier <[email protected]>
Reviewed-by: Eric Auger <[email protected]>
Signed-off-by: Christoffer Dall <[email protected]>
  • Loading branch information
chazy committed Dec 13, 2014
1 parent c52edf5 commit 1f57be2
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 1 deletion.
6 changes: 6 additions & 0 deletions include/kvm/arm_vgic.h
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,7 @@ bool vgic_handle_mmio(struct kvm_vcpu *vcpu, struct kvm_run *run,
struct kvm_exit_mmio *mmio);

#define irqchip_in_kernel(k) (!!((k)->arch.vgic.in_kernel))
#define vgic_initialized(k) (!!((k)->arch.vgic.nr_cpus))
#define vgic_ready(k) ((k)->arch.vgic.ready)

int vgic_v2_probe(struct device_node *vgic_node,
Expand Down Expand Up @@ -369,6 +370,11 @@ static inline int irqchip_in_kernel(struct kvm *kvm)
return 0;
}

static inline bool vgic_initialized(struct kvm *kvm)
{
return true;
}

static inline bool vgic_ready(struct kvm *kvm)
{
return true;
Expand Down
3 changes: 2 additions & 1 deletion virt/kvm/arm/vgic.c
Original file line number Diff line number Diff line change
Expand Up @@ -1780,6 +1780,7 @@ void kvm_vgic_destroy(struct kvm *kvm)
dist->irq_spi_cpu = NULL;
dist->irq_spi_target = NULL;
dist->irq_pending_on_cpu = NULL;
dist->nr_cpus = 0;
}

/*
Expand All @@ -1793,7 +1794,7 @@ static int vgic_init(struct kvm *kvm)
int nr_cpus, nr_irqs;
int ret, i, vcpu_id;

if (dist->nr_cpus) /* Already allocated */
if (vgic_initialized(kvm))
return 0;

nr_cpus = dist->nr_cpus = atomic_read(&kvm->online_vcpus);
Expand Down

0 comments on commit 1f57be2

Please sign in to comment.