]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blobdiff - arch/arm64/kvm/hyp/switch.c
KVM: arm64: vgic-v3: Add hook to handle guest GICv3 sysreg accesses at EL2
[mirror_ubuntu-zesty-kernel.git] / arch / arm64 / kvm / hyp / switch.c
index 75e83dd40d43b269a0ef7e6c398cb958a800b1bc..298b4ec83d7a3beec4629e856ef35659e4eca08c 100644 (file)
@@ -339,6 +339,20 @@ again:
                }
        }
 
+       if (static_branch_unlikely(&vgic_v3_cpuif_trap) &&
+           exit_code == ARM_EXCEPTION_TRAP &&
+           (kvm_vcpu_trap_get_class(vcpu) == ESR_ELx_EC_SYS64 ||
+            kvm_vcpu_trap_get_class(vcpu) == ESR_ELx_EC_CP15_32)) {
+               int ret = __vgic_v3_perform_cpuif_access(vcpu);
+
+               if (ret == 1) {
+                       __skip_instr(vcpu);
+                       goto again;
+               }
+
+               /* 0 falls through to be handled out of EL2 */
+       }
+
        fp_enabled = __fpsimd_enabled();
 
        __sysreg_save_guest_state(guest_ctxt);