Merge remote-tracking branch 'kvmarm/misc-5.5' into kvmarm/next
[platform/kernel/linux-starfive.git] / arch / arm / kvm / guest.c
index 6696464..0e6f235 100644 (file)
@@ -259,6 +259,12 @@ int __kvm_arm_vcpu_get_events(struct kvm_vcpu *vcpu,
 {
        events->exception.serror_pending = !!(*vcpu_hcr(vcpu) & HCR_VA);
 
+       /*
+        * We never return a pending ext_dabt here because we deliver it to
+        * the virtual CPU directly when setting the event and it's no longer
+        * 'pending' at this point.
+        */
+
        return 0;
 }
 
@@ -267,12 +273,16 @@ int __kvm_arm_vcpu_set_events(struct kvm_vcpu *vcpu,
 {
        bool serror_pending = events->exception.serror_pending;
        bool has_esr = events->exception.serror_has_esr;
+       bool ext_dabt_pending = events->exception.ext_dabt_pending;
 
        if (serror_pending && has_esr)
                return -EINVAL;
        else if (serror_pending)
                kvm_inject_vabt(vcpu);
 
+       if (ext_dabt_pending)
+               kvm_inject_dabt(vcpu, kvm_vcpu_get_hfar(vcpu));
+
        return 0;
 }