Merge tag 'kvm-4.20-1' of git://git.kernel.org/pub/scm/virt/kvm/kvm
[sfrench/cifs-2.6.git] / virt / kvm / arm / arm.c
index 150c8a69cdaf8233db1f94df624cca6e2812beaf..23774970c9df66fb771210df9374bf10c0abbffa 100644 (file)
@@ -120,8 +120,9 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
 {
        int ret, cpu;
 
-       if (type)
-               return -EINVAL;
+       ret = kvm_arm_setup_stage2(kvm, type);
+       if (ret)
+               return ret;
 
        kvm->arch.last_vcpu_ran = alloc_percpu(typeof(*kvm->arch.last_vcpu_ran));
        if (!kvm->arch.last_vcpu_ran)
@@ -212,6 +213,7 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
        case KVM_CAP_READONLY_MEM:
        case KVM_CAP_MP_STATE:
        case KVM_CAP_IMMEDIATE_EXIT:
+       case KVM_CAP_VCPU_EVENTS:
                r = 1;
                break;
        case KVM_CAP_ARM_SET_DEVICE_ADDR:
@@ -240,7 +242,7 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
                r = 1;
                break;
        default:
-               r = kvm_arch_dev_ioctl_check_extension(kvm, ext);
+               r = kvm_arch_vm_ioctl_check_extension(kvm, ext);
                break;
        }
        return r;
@@ -544,7 +546,7 @@ static void update_vttbr(struct kvm *kvm)
 
        /* update vttbr to be used with the new vmid */
        pgd_phys = virt_to_phys(kvm->arch.pgd);
-       BUG_ON(pgd_phys & ~VTTBR_BADDR_MASK);
+       BUG_ON(pgd_phys & ~kvm_vttbr_baddr_mask(kvm));
        vmid = ((u64)(kvm->arch.vmid) << VTTBR_VMID_SHIFT) & VTTBR_VMID_MASK(kvm_vmid_bits);
        kvm->arch.vttbr = kvm_phys_to_vttbr(pgd_phys) | vmid | cnp;
 
@@ -1295,8 +1297,6 @@ static void cpu_init_hyp_mode(void *dummy)
 
        __cpu_init_hyp_mode(pgd_ptr, hyp_stack_ptr, vector_ptr);
        __cpu_init_stage2();
-
-       kvm_arm_init_debug();
 }
 
 static void cpu_hyp_reset(void)
@@ -1309,16 +1309,12 @@ static void cpu_hyp_reinit(void)
 {
        cpu_hyp_reset();
 
-       if (is_kernel_in_hyp_mode()) {
-               /*
-                * __cpu_init_stage2() is safe to call even if the PM
-                * event was cancelled before the CPU was reset.
-                */
-               __cpu_init_stage2();
+       if (is_kernel_in_hyp_mode())
                kvm_timer_init_vhe();
-       } else {
+       else
                cpu_init_hyp_mode(NULL);
-       }
+
+       kvm_arm_init_debug();
 
        if (vgic_present)
                kvm_vgic_init_cpu_hardware();
@@ -1412,6 +1408,8 @@ static int init_common_resources(void)
        kvm_vmid_bits = kvm_get_vmid_bits();
        kvm_info("%d-bit VMID\n", kvm_vmid_bits);
 
+       kvm_set_ipa_limit();
+
        return 0;
 }