ARM: KVM: Allow creating the VGIC after VCPUs
authorChristoffer Dall <christoffer.dall@linaro.org>
Mon, 23 Sep 2013 21:55:55 +0000 (14:55 -0700)
committerChristoffer Dall <christoffer.dall@linaro.org>
Sat, 21 Dec 2013 18:01:06 +0000 (10:01 -0800)
commite1ba0207a1b3714bb3f000e506285ae5123cdfa7
treed4a231a1c19b0ae85e391ad43634ee549caf9c34
parent39735a3a390431bcf60f9174b7d64f787fd6afa9
ARM: KVM: Allow creating the VGIC after VCPUs

Rework the VGIC initialization slightly to allow initialization of the
vgic cpu-specific state even if the irqchip (the VGIC) hasn't been
created by user space yet.  This is safe, because the vgic data
structures are already allocated when the CPU is allocated if VGIC
support is compiled into the kernel.  Further, the init process does not
depend on any other information and the sacrifice is a slight
performance degradation for creating VMs in the no-VGIC case.

The reason is that the new device control API doesn't mandate creating
the VGIC before creating the VCPU and it is unreasonable to require user
space to create the VGIC before creating the VCPUs.

At the same time move the irqchip_in_kernel check out of
kvm_vcpu_first_run_init and into the init function to make the per-vcpu
and global init functions symmetric and add comments on the exported
functions making it a bit easier to understand the init flow by only
looking at vgic.c.

Acked-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
arch/arm/kvm/arm.c
virt/kvm/arm/vgic.c