4444#include <asm/kvm_emulate.h>
4545#include <asm/kvm_coproc.h>
4646#include <asm/kvm_psci.h>
47+ #include <asm/sections.h>
4748
4849#ifdef REQUIRES_VIRT
4950__asm__(".arch_extension virt" );
@@ -58,9 +59,12 @@ static DEFINE_PER_CPU(struct kvm_vcpu *, kvm_arm_running_vcpu);
5859
5960/* The VMID used in the VTTBR */
6061static atomic64_t kvm_vmid_gen = ATOMIC64_INIT (1 );
61- static u8 kvm_next_vmid ;
62+ static u32 kvm_next_vmid ;
63+ static unsigned int kvm_vmid_bits __read_mostly ;
6264static DEFINE_SPINLOCK (kvm_vmid_lock );
6365
66+ static bool vgic_present ;
67+
6468static void kvm_arm_set_running_vcpu (struct kvm_vcpu * vcpu )
6569{
6670 BUG_ON (preemptible ());
@@ -132,7 +136,8 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
132136 kvm -> arch .vmid_gen = 0 ;
133137
134138 /* The maximum number of VCPUs is limited by the host's GIC model */
135- kvm -> arch .max_vcpus = kvm_vgic_get_max_vcpus ();
139+ kvm -> arch .max_vcpus = vgic_present ?
140+ kvm_vgic_get_max_vcpus () : KVM_MAX_VCPUS ;
136141
137142 return ret ;
138143out_free_stage2_pgd :
@@ -170,6 +175,8 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
170175 int r ;
171176 switch (ext ) {
172177 case KVM_CAP_IRQCHIP :
178+ r = vgic_present ;
179+ break ;
173180 case KVM_CAP_IOEVENTFD :
174181 case KVM_CAP_DEVICE_CTRL :
175182 case KVM_CAP_USER_MEMORY :
@@ -431,11 +438,12 @@ static void update_vttbr(struct kvm *kvm)
431438 kvm -> arch .vmid_gen = atomic64_read (& kvm_vmid_gen );
432439 kvm -> arch .vmid = kvm_next_vmid ;
433440 kvm_next_vmid ++ ;
441+ kvm_next_vmid &= (1 << kvm_vmid_bits ) - 1 ;
434442
435443 /* update vttbr to be used with the new vmid */
436444 pgd_phys = virt_to_phys (kvm_get_hwpgd (kvm ));
437445 BUG_ON (pgd_phys & ~VTTBR_BADDR_MASK );
438- vmid = ((u64 )(kvm -> arch .vmid ) << VTTBR_VMID_SHIFT ) & VTTBR_VMID_MASK ;
446+ vmid = ((u64 )(kvm -> arch .vmid ) << VTTBR_VMID_SHIFT ) & VTTBR_VMID_MASK ( kvm_vmid_bits ) ;
439447 kvm -> arch .vttbr = pgd_phys | vmid ;
440448
441449 spin_unlock (& kvm_vmid_lock );
@@ -911,6 +919,8 @@ static int kvm_vm_ioctl_set_device_addr(struct kvm *kvm,
911919
912920 switch (dev_id ) {
913921 case KVM_ARM_DEVICE_VGIC_V2 :
922+ if (!vgic_present )
923+ return - ENXIO ;
914924 return kvm_vgic_addr (kvm , type , & dev_addr -> addr , true);
915925 default :
916926 return - ENODEV ;
@@ -925,6 +935,8 @@ long kvm_arch_vm_ioctl(struct file *filp,
925935
926936 switch (ioctl ) {
927937 case KVM_CREATE_IRQCHIP : {
938+ if (!vgic_present )
939+ return - ENXIO ;
928940 return kvm_vgic_create (kvm , KVM_DEV_TYPE_ARM_VGIC_V2 );
929941 }
930942 case KVM_ARM_SET_DEVICE_ADDR : {
@@ -970,6 +982,7 @@ static void cpu_init_hyp_mode(void *dummy)
970982 vector_ptr = (unsigned long )kvm_ksym_ref (__kvm_hyp_vector );
971983
972984 __cpu_init_hyp_mode (boot_pgd_ptr , pgd_ptr , hyp_stack_ptr , vector_ptr );
985+ __cpu_init_stage2 ();
973986
974987 kvm_arm_init_debug ();
975988}
@@ -1066,6 +1079,12 @@ static int init_hyp_mode(void)
10661079 goto out_free_mappings ;
10671080 }
10681081
1082+ err = create_hyp_mappings (__start_rodata , __end_rodata );
1083+ if (err ) {
1084+ kvm_err ("Cannot map rodata section\n" );
1085+ goto out_free_mappings ;
1086+ }
1087+
10691088 /*
10701089 * Map the Hyp stack pages
10711090 */
@@ -1110,8 +1129,17 @@ static int init_hyp_mode(void)
11101129 * Init HYP view of VGIC
11111130 */
11121131 err = kvm_vgic_hyp_init ();
1113- if (err )
1132+ switch (err ) {
1133+ case 0 :
1134+ vgic_present = true;
1135+ break ;
1136+ case - ENODEV :
1137+ case - ENXIO :
1138+ vgic_present = false;
1139+ break ;
1140+ default :
11141141 goto out_free_context ;
1142+ }
11151143
11161144 /*
11171145 * Init HYP architected timer support
@@ -1126,6 +1154,10 @@ static int init_hyp_mode(void)
11261154
11271155 kvm_perf_init ();
11281156
1157+ /* set size of VMID supported by CPU */
1158+ kvm_vmid_bits = kvm_get_vmid_bits ();
1159+ kvm_info ("%d-bit VMID\n" , kvm_vmid_bits );
1160+
11291161 kvm_info ("Hyp mode initialized successfully\n" );
11301162
11311163 return 0 ;
0 commit comments