Lines Matching defs:kvm

3  * kvm nested virtualization support for s390x
21 #include "kvm-s390.h"
119 if (cpuflags & CPUSTAT_GED && test_kvm_facility(vcpu->kvm, 8))
121 if (cpuflags & CPUSTAT_GED2 && test_kvm_facility(vcpu->kvm, 78)) {
126 if (test_kvm_cpu_feat(vcpu->kvm, KVM_S390_VM_CPU_FEAT_GPERE))
128 if (test_kvm_cpu_feat(vcpu->kvm, KVM_S390_VM_CPU_FEAT_GSLS))
130 if (test_kvm_cpu_feat(vcpu->kvm, KVM_S390_VM_CPU_FEAT_IBS))
132 if (test_kvm_cpu_feat(vcpu->kvm, KVM_S390_VM_CPU_FEAT_KSS))
296 int key_msk = test_kvm_facility(vcpu->kvm, 76);
318 vcpu->kvm->arch.crypto.crycb,
343 vcpu->kvm->arch.crypto.crycb->dea_wrapping_key_mask;
371 if (vcpu->kvm->arch.model.ibc && new_ibc) {
377 if (scb_s->ibc > vcpu->kvm->arch.model.ibc)
378 scb_s->ibc = vcpu->kvm->arch.model.ibc;
408 if (test_kvm_facility(vcpu->kvm, 82)) {
505 if (test_kvm_cpu_feat(vcpu->kvm, KVM_S390_VM_CPU_FEAT_ESOP))
508 if (test_kvm_facility(vcpu->kvm, 73) && wants_tx) {
515 if (test_kvm_facility(vcpu->kvm, 82))
518 if (test_kvm_facility(vcpu->kvm, 129)) {
523 if (test_kvm_facility(vcpu->kvm, 64))
526 if (test_kvm_facility(vcpu->kvm, 130))
529 if (test_kvm_facility(vcpu->kvm, 133)) {
533 if (test_kvm_cpu_feat(vcpu->kvm, KVM_S390_VM_CPU_FEAT_SIIF))
535 if (test_kvm_cpu_feat(vcpu->kvm, KVM_S390_VM_CPU_FEAT_IB))
537 if (test_kvm_cpu_feat(vcpu->kvm, KVM_S390_VM_CPU_FEAT_CEI))
540 if (test_kvm_facility(vcpu->kvm, 139)) {
546 if (test_kvm_facility(vcpu->kvm, 156))
563 struct kvm *kvm = gmap->private;
579 for (i = 0; i < kvm->arch.vsie.page_count; i++) {
580 page = READ_ONCE(kvm->arch.vsie.pages[i]);
643 static int pin_guest_page(struct kvm *kvm, gpa_t gpa, hpa_t *hpa)
647 page = gfn_to_page(kvm, gpa_to_gfn(gpa));
655 static void unpin_guest_page(struct kvm *kvm, gpa_t gpa, hpa_t hpa)
659 mark_page_dirty(kvm, gpa_to_gfn(gpa));
670 unpin_guest_page(vcpu->kvm, vsie_page->sca_gpa, hpa);
678 unpin_guest_page(vcpu->kvm, vsie_page->itdba_gpa, hpa);
685 unpin_guest_page(vcpu->kvm, vsie_page->gvrd_gpa, hpa);
692 unpin_guest_page(vcpu->kvm, vsie_page->riccbd_gpa, hpa);
699 unpin_guest_page(vcpu->kvm, vsie_page->sdnx_gpa, hpa);
728 if (test_kvm_cpu_feat(vcpu->kvm, KVM_S390_VM_CPU_FEAT_64BSCAO))
739 rc = pin_guest_page(vcpu->kvm, gpa, &hpa);
757 rc = pin_guest_page(vcpu->kvm, gpa, &hpa);
776 rc = pin_guest_page(vcpu->kvm, gpa, &hpa);
792 rc = pin_guest_page(vcpu->kvm, gpa, &hpa);
822 rc = pin_guest_page(vcpu->kvm, gpa, &hpa);
843 unpin_guest_page(vcpu->kvm, gpa, hpa);
859 rc = pin_guest_page(vcpu->kvm, gpa, &hpa);
974 if (fac && test_kvm_facility(vcpu->kvm, 7)) {
1014 edat = cr0.edat && test_kvm_facility(vcpu->kvm, 8);
1085 __releases(vcpu->kvm->srcu)
1086 __acquires(vcpu->kvm->srcu)
1095 srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx);
1106 if (test_kvm_facility(vcpu->kvm, 82) &&
1135 vcpu->srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
1188 edat = cr0.edat && test_kvm_facility(vcpu->kvm, 8);
1189 edat += edat && test_kvm_facility(vcpu->kvm, 78);
1204 gmap->private = vcpu->kvm;
1228 scb_s->epoch += vcpu->kvm->arch.epoch;
1231 scb_s->epdx += vcpu->kvm->arch.epdx;
1232 if (scb_s->epoch < vcpu->kvm->arch.epoch)
1309 static struct vsie_page *get_vsie_page(struct kvm *kvm, unsigned long addr)
1316 page = radix_tree_lookup(&kvm->arch.vsie.addr_to_page, addr >> 9);
1328 nr_vcpus = atomic_read(&kvm->online_vcpus);
1330 mutex_lock(&kvm->arch.vsie.mutex);
1331 if (kvm->arch.vsie.page_count < nr_vcpus) {
1334 mutex_unlock(&kvm->arch.vsie.mutex);
1338 kvm->arch.vsie.pages[kvm->arch.vsie.page_count] = page;
1339 kvm->arch.vsie.page_count++;
1343 page = kvm->arch.vsie.pages[kvm->arch.vsie.next];
1347 kvm->arch.vsie.next++;
1348 kvm->arch.vsie.next %= nr_vcpus;
1350 radix_tree_delete(&kvm->arch.vsie.addr_to_page, page->index >> 9);
1354 if (radix_tree_insert(&kvm->arch.vsie.addr_to_page, addr >> 9, page)) {
1356 mutex_unlock(&kvm->arch.vsie.mutex);
1359 mutex_unlock(&kvm->arch.vsie.mutex);
1370 static void put_vsie_page(struct kvm *kvm, struct vsie_page *vsie_page)
1384 if (!test_kvm_cpu_feat(vcpu->kvm, KVM_S390_VM_CPU_FEAT_SIEF2))
1400 vsie_page = get_vsie_page(vcpu->kvm, scb_addr);
1425 put_vsie_page(vcpu->kvm, vsie_page);
1431 void kvm_s390_vsie_init(struct kvm *kvm)
1433 mutex_init(&kvm->arch.vsie.mutex);
1434 INIT_RADIX_TREE(&kvm->arch.vsie.addr_to_page, GFP_KERNEL);
1438 void kvm_s390_vsie_destroy(struct kvm *kvm)
1444 mutex_lock(&kvm->arch.vsie.mutex);
1445 for (i = 0; i < kvm->arch.vsie.page_count; i++) {
1446 page = kvm->arch.vsie.pages[i];
1447 kvm->arch.vsie.pages[i] = NULL;
1451 radix_tree_delete(&kvm->arch.vsie.addr_to_page, page->index >> 9);
1454 kvm->arch.vsie.page_count = 0;
1455 mutex_unlock(&kvm->arch.vsie.mutex);