Lines Matching defs:kvm
3 * kvm nested virtualization support for s390x
22 #include "kvm-s390.h"
120 if (cpuflags & CPUSTAT_GED && test_kvm_facility(vcpu->kvm, 8))
122 if (cpuflags & CPUSTAT_GED2 && test_kvm_facility(vcpu->kvm, 78)) {
127 if (test_kvm_cpu_feat(vcpu->kvm, KVM_S390_VM_CPU_FEAT_GPERE))
129 if (test_kvm_cpu_feat(vcpu->kvm, KVM_S390_VM_CPU_FEAT_GSLS))
131 if (test_kvm_cpu_feat(vcpu->kvm, KVM_S390_VM_CPU_FEAT_IBS))
133 if (test_kvm_cpu_feat(vcpu->kvm, KVM_S390_VM_CPU_FEAT_KSS))
305 int key_msk = test_kvm_facility(vcpu->kvm, 76);
327 vcpu->kvm->arch.crypto.crycb,
352 vcpu->kvm->arch.crypto.crycb->dea_wrapping_key_mask;
380 if (vcpu->kvm->arch.model.ibc && new_ibc) {
386 if (scb_s->ibc > vcpu->kvm->arch.model.ibc)
387 scb_s->ibc = vcpu->kvm->arch.model.ibc;
417 if (test_kvm_facility(vcpu->kvm, 82)) {
514 if (test_kvm_cpu_feat(vcpu->kvm, KVM_S390_VM_CPU_FEAT_ESOP))
522 if (test_kvm_facility(vcpu->kvm, 11))
525 if (test_kvm_facility(vcpu->kvm, 73) && wants_tx) {
534 if (test_kvm_facility(vcpu->kvm, 82))
537 if (test_kvm_facility(vcpu->kvm, 129)) {
542 if (test_kvm_facility(vcpu->kvm, 64))
545 if (test_kvm_facility(vcpu->kvm, 130))
548 if (test_kvm_facility(vcpu->kvm, 133)) {
552 if (test_kvm_cpu_feat(vcpu->kvm, KVM_S390_VM_CPU_FEAT_SIIF))
554 if (test_kvm_cpu_feat(vcpu->kvm, KVM_S390_VM_CPU_FEAT_IB))
556 if (test_kvm_cpu_feat(vcpu->kvm, KVM_S390_VM_CPU_FEAT_CEI))
559 if (test_kvm_facility(vcpu->kvm, 139)) {
565 if (test_kvm_facility(vcpu->kvm, 156))
582 struct kvm *kvm = gmap->private;
594 for (i = 0; i < kvm->arch.vsie.page_count; i++) {
595 page = READ_ONCE(kvm->arch.vsie.pages[i]);
658 static int pin_guest_page(struct kvm *kvm, gpa_t gpa, hpa_t *hpa)
662 page = gfn_to_page(kvm, gpa_to_gfn(gpa));
670 static void unpin_guest_page(struct kvm *kvm, gpa_t gpa, hpa_t hpa)
674 mark_page_dirty(kvm, gpa_to_gfn(gpa));
685 unpin_guest_page(vcpu->kvm, vsie_page->sca_gpa, hpa);
693 unpin_guest_page(vcpu->kvm, vsie_page->itdba_gpa, hpa);
700 unpin_guest_page(vcpu->kvm, vsie_page->gvrd_gpa, hpa);
707 unpin_guest_page(vcpu->kvm, vsie_page->riccbd_gpa, hpa);
714 unpin_guest_page(vcpu->kvm, vsie_page->sdnx_gpa, hpa);
743 if (test_kvm_cpu_feat(vcpu->kvm, KVM_S390_VM_CPU_FEAT_64BSCAO))
754 rc = pin_guest_page(vcpu->kvm, gpa, &hpa);
772 rc = pin_guest_page(vcpu->kvm, gpa, &hpa);
791 rc = pin_guest_page(vcpu->kvm, gpa, &hpa);
807 rc = pin_guest_page(vcpu->kvm, gpa, &hpa);
837 rc = pin_guest_page(vcpu->kvm, gpa, &hpa);
858 unpin_guest_page(vcpu->kvm, gpa, hpa);
874 rc = pin_guest_page(vcpu->kvm, gpa, &hpa);
989 if (fac && test_kvm_facility(vcpu->kvm, 7)) {
1029 edat = cr0.edat && test_kvm_facility(vcpu->kvm, 8);
1100 __releases(vcpu->kvm->srcu)
1101 __acquires(vcpu->kvm->srcu)
1121 if (test_kvm_facility(vcpu->kvm, 82) &&
1205 edat = cr0.edat && test_kvm_facility(vcpu->kvm, 8);
1206 edat += edat && test_kvm_facility(vcpu->kvm, 78);
1214 vcpu->kvm->stat.gmap_shadow_reuse++;
1223 vcpu->kvm->stat.gmap_shadow_create++;
1247 scb_s->epoch += vcpu->kvm->arch.epoch;
1250 scb_s->epdx += vcpu->kvm->arch.epdx;
1251 if (scb_s->epoch < vcpu->kvm->arch.epoch)
1328 static struct vsie_page *get_vsie_page(struct kvm *kvm, unsigned long addr)
1335 page = radix_tree_lookup(&kvm->arch.vsie.addr_to_page, addr >> 9);
1347 nr_vcpus = atomic_read(&kvm->online_vcpus);
1349 mutex_lock(&kvm->arch.vsie.mutex);
1350 if (kvm->arch.vsie.page_count < nr_vcpus) {
1353 mutex_unlock(&kvm->arch.vsie.mutex);
1357 kvm->arch.vsie.pages[kvm->arch.vsie.page_count] = page;
1358 kvm->arch.vsie.page_count++;
1362 page = kvm->arch.vsie.pages[kvm->arch.vsie.next];
1366 kvm->arch.vsie.next++;
1367 kvm->arch.vsie.next %= nr_vcpus;
1369 radix_tree_delete(&kvm->arch.vsie.addr_to_page, page->index >> 9);
1373 if (radix_tree_insert(&kvm->arch.vsie.addr_to_page, addr >> 9, page)) {
1375 mutex_unlock(&kvm->arch.vsie.mutex);
1378 mutex_unlock(&kvm->arch.vsie.mutex);
1389 static void put_vsie_page(struct kvm *kvm, struct vsie_page *vsie_page)
1403 if (!test_kvm_cpu_feat(vcpu->kvm, KVM_S390_VM_CPU_FEAT_SIEF2))
1419 vsie_page = get_vsie_page(vcpu->kvm, scb_addr);
1444 put_vsie_page(vcpu->kvm, vsie_page);
1450 void kvm_s390_vsie_init(struct kvm *kvm)
1452 mutex_init(&kvm->arch.vsie.mutex);
1453 INIT_RADIX_TREE(&kvm->arch.vsie.addr_to_page, GFP_KERNEL_ACCOUNT);
1457 void kvm_s390_vsie_destroy(struct kvm *kvm)
1463 mutex_lock(&kvm->arch.vsie.mutex);
1464 for (i = 0; i < kvm->arch.vsie.page_count; i++) {
1465 page = kvm->arch.vsie.pages[i];
1466 kvm->arch.vsie.pages[i] = NULL;
1470 radix_tree_delete(&kvm->arch.vsie.addr_to_page, page->index >> 9);
1473 kvm->arch.vsie.page_count = 0;
1474 mutex_unlock(&kvm->arch.vsie.mutex);