]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - arch/arm/kvm/guest.c
KVM: arm: Add 32bit get/set events support
[linux.git] / arch / arm / kvm / guest.c
index a18f33edc471a92fcf6194dbe6601bc4b94f1988..2b8de885b2bf6b8e61ffd1c67adf72a56167633a 100644 (file)
@@ -261,6 +261,29 @@ int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
        return -EINVAL;
 }
 
+
+int __kvm_arm_vcpu_get_events(struct kvm_vcpu *vcpu,
+                             struct kvm_vcpu_events *events)
+{
+       events->exception.serror_pending = !!(*vcpu_hcr(vcpu) & HCR_VA);
+
+       return 0;
+}
+
+int __kvm_arm_vcpu_set_events(struct kvm_vcpu *vcpu,
+                             struct kvm_vcpu_events *events)
+{
+       bool serror_pending = events->exception.serror_pending;
+       bool has_esr = events->exception.serror_has_esr;
+
+       if (serror_pending && has_esr)
+               return -EINVAL;
+       else if (serror_pending)
+               kvm_inject_vabt(vcpu);
+
+       return 0;
+}
+
 int __attribute_const__ kvm_target_cpu(void)
 {
        switch (read_cpuid_part()) {