Merge branch 'kvm-arm64/ptrauth-nvhe' into kvmarm-master/next-WIP
[linux-2.6-microblaze.git] / arch / arm64 / kvm / reset.c
index d3b2090..92c3bba 100644 (file)
@@ -42,6 +42,11 @@ static u32 kvm_ipa_limit;
 #define VCPU_RESET_PSTATE_SVC  (PSR_AA32_MODE_SVC | PSR_AA32_A_BIT | \
                                 PSR_AA32_I_BIT | PSR_AA32_F_BIT)
 
+static bool system_has_full_ptr_auth(void)
+{
+       return system_supports_address_auth() && system_supports_generic_auth();
+}
+
 /**
  * kvm_arch_vm_ioctl_check_extension
  *
@@ -80,8 +85,7 @@ int kvm_arch_vm_ioctl_check_extension(struct kvm *kvm, long ext)
                break;
        case KVM_CAP_ARM_PTRAUTH_ADDRESS:
        case KVM_CAP_ARM_PTRAUTH_GENERIC:
-               r = has_vhe() && system_supports_address_auth() &&
-                                system_supports_generic_auth();
+               r = system_has_full_ptr_auth();
                break;
        default:
                r = 0;
@@ -205,19 +209,14 @@ static void kvm_vcpu_reset_sve(struct kvm_vcpu *vcpu)
 
 static int kvm_vcpu_enable_ptrauth(struct kvm_vcpu *vcpu)
 {
-       /* Support ptrauth only if the system supports these capabilities. */
-       if (!has_vhe())
-               return -EINVAL;
-
-       if (!system_supports_address_auth() ||
-           !system_supports_generic_auth())
-               return -EINVAL;
        /*
         * For now make sure that both address/generic pointer authentication
-        * features are requested by the userspace together.
+        * features are requested by the userspace together and the system
+        * supports these capabilities.
         */
        if (!test_bit(KVM_ARM_VCPU_PTRAUTH_ADDRESS, vcpu->arch.features) ||
-           !test_bit(KVM_ARM_VCPU_PTRAUTH_GENERIC, vcpu->arch.features))
+           !test_bit(KVM_ARM_VCPU_PTRAUTH_GENERIC, vcpu->arch.features) ||
+           !system_has_full_ptr_auth())
                return -EINVAL;
 
        vcpu->arch.flags |= KVM_ARM64_GUEST_HAS_PTRAUTH;
@@ -288,7 +287,7 @@ int kvm_reset_vcpu(struct kvm_vcpu *vcpu)
 
        /* Reset core registers */
        memset(vcpu_gp_regs(vcpu), 0, sizeof(*vcpu_gp_regs(vcpu)));
-       vcpu_gp_regs(vcpu)->regs.pstate = pstate;
+       vcpu_gp_regs(vcpu)->pstate = pstate;
 
        /* Reset system registers */
        kvm_reset_sys_regs(vcpu);