arm/arm64: KVM: vgic: Check for !irqchip_in_kernel() when mapping resources
Untilb26e5fdac4
("arm/arm64: KVM: introduce per-VM ops"), kvm_vgic_map_resources() used to include a check on irqchip_in_kernel(), and vgic_v2_map_resources() still has it. But now vm_ops are not initialized until we call kvm_vgic_create(). Therefore kvm_vgic_map_resources() can being called without a VGIC, and we die because vm_ops.map_resources is NULL. Fixing this restores QEMU's kernel-irqchip=off option to a working state, allowing to use GIC emulation in userspace. Fixes:b26e5fdac4
("arm/arm64: KVM: introduce per-VM ops") Cc: stable@vger.kernel.org Signed-off-by: Pavel Fedin <p.fedin@samsung.com> [maz: reworked commit message] Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
This commit is contained in:
parent
ca09f02f12
commit
c2f58514cf
|
@ -446,7 +446,7 @@ static int kvm_vcpu_first_run_init(struct kvm_vcpu *vcpu)
|
||||||
* Map the VGIC hardware resources before running a vcpu the first
|
* Map the VGIC hardware resources before running a vcpu the first
|
||||||
* time on this VM.
|
* time on this VM.
|
||||||
*/
|
*/
|
||||||
if (unlikely(!vgic_ready(kvm))) {
|
if (unlikely(irqchip_in_kernel(kvm) && !vgic_ready(kvm))) {
|
||||||
ret = kvm_vgic_map_resources(kvm);
|
ret = kvm_vgic_map_resources(kvm);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
Loading…
Reference in New Issue