kvm-s390.c (dd5bd0a65ff6f22a32b35ca3fa1bcf7a6bc7104f) kvm-s390.c (8e41bd54317b04f2bf03012a4ca8ab7360c9beef)
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * hosting IBM Z kernel virtual machines (s390x)
4 *
5 * Copyright IBM Corp. 2008, 2018
6 *
7 * Author(s): Carsten Otte <cotte@de.ibm.com>
8 * Christian Borntraeger <borntraeger@de.ibm.com>

--- 468 unchanged lines hidden (view full) ---

477 case KVM_CAP_S390_USER_INSTR0:
478 case KVM_CAP_S390_CMMA_MIGRATION:
479 case KVM_CAP_S390_AIS:
480 case KVM_CAP_S390_AIS_MIGRATION:
481 r = 1;
482 break;
483 case KVM_CAP_S390_HPAGE_1M:
484 r = 0;
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * hosting IBM Z kernel virtual machines (s390x)
4 *
5 * Copyright IBM Corp. 2008, 2018
6 *
7 * Author(s): Carsten Otte <cotte@de.ibm.com>
8 * Christian Borntraeger <borntraeger@de.ibm.com>

--- 468 unchanged lines hidden (view full) ---

477 case KVM_CAP_S390_USER_INSTR0:
478 case KVM_CAP_S390_CMMA_MIGRATION:
479 case KVM_CAP_S390_AIS:
480 case KVM_CAP_S390_AIS_MIGRATION:
481 r = 1;
482 break;
483 case KVM_CAP_S390_HPAGE_1M:
484 r = 0;
485 if (hpage && !kvm_is_ucontrol(kvm))
485 if (hpage)
486 r = 1;
487 break;
488 case KVM_CAP_S390_MEM_OP:
489 r = MEM_OP_MAX_SIZE;
490 break;
491 case KVM_CAP_NR_VCPUS:
492 case KVM_CAP_MAX_VCPUS:
493 r = KVM_S390_BSCA_CPU_SLOTS;

--- 193 unchanged lines hidden (view full) ---

687 mutex_unlock(&kvm->lock);
688 VM_EVENT(kvm, 3, "ENABLE: CAP_S390_GS %s",
689 r ? "(not available)" : "(success)");
690 break;
691 case KVM_CAP_S390_HPAGE_1M:
692 mutex_lock(&kvm->lock);
693 if (kvm->created_vcpus)
694 r = -EBUSY;
486 r = 1;
487 break;
488 case KVM_CAP_S390_MEM_OP:
489 r = MEM_OP_MAX_SIZE;
490 break;
491 case KVM_CAP_NR_VCPUS:
492 case KVM_CAP_MAX_VCPUS:
493 r = KVM_S390_BSCA_CPU_SLOTS;

--- 193 unchanged lines hidden (view full) ---

687 mutex_unlock(&kvm->lock);
688 VM_EVENT(kvm, 3, "ENABLE: CAP_S390_GS %s",
689 r ? "(not available)" : "(success)");
690 break;
691 case KVM_CAP_S390_HPAGE_1M:
692 mutex_lock(&kvm->lock);
693 if (kvm->created_vcpus)
694 r = -EBUSY;
695 else if (!hpage || kvm->arch.use_cmma || kvm_is_ucontrol(kvm))
695 else if (!hpage || kvm->arch.use_cmma)
696 r = -EINVAL;
697 else {
698 r = 0;
699 down_write(&kvm->mm->mmap_sem);
700 kvm->mm->context.allow_gmap_hpage_1m = 1;
701 up_write(&kvm->mm->mmap_sem);
702 /*
703 * We might have to create fake 4k page

--- 150 unchanged lines hidden (view full) ---

854 kvm_s390_vcpu_unblock_all(kvm);
855}
856
857static int kvm_s390_vm_set_crypto(struct kvm *kvm, struct kvm_device_attr *attr)
858{
859 mutex_lock(&kvm->lock);
860 switch (attr->attr) {
861 case KVM_S390_VM_CRYPTO_ENABLE_AES_KW:
696 r = -EINVAL;
697 else {
698 r = 0;
699 down_write(&kvm->mm->mmap_sem);
700 kvm->mm->context.allow_gmap_hpage_1m = 1;
701 up_write(&kvm->mm->mmap_sem);
702 /*
703 * We might have to create fake 4k page

--- 150 unchanged lines hidden (view full) ---

854 kvm_s390_vcpu_unblock_all(kvm);
855}
856
857static int kvm_s390_vm_set_crypto(struct kvm *kvm, struct kvm_device_attr *attr)
858{
859 mutex_lock(&kvm->lock);
860 switch (attr->attr) {
861 case KVM_S390_VM_CRYPTO_ENABLE_AES_KW:
862 if (!test_kvm_facility(kvm, 76))
862 if (!test_kvm_facility(kvm, 76)) {
863 mutex_unlock(&kvm->lock);
863 return -EINVAL;
864 return -EINVAL;
865 }
864 get_random_bytes(
865 kvm->arch.crypto.crycb->aes_wrapping_key_mask,
866 sizeof(kvm->arch.crypto.crycb->aes_wrapping_key_mask));
867 kvm->arch.crypto.aes_kw = 1;
868 VM_EVENT(kvm, 3, "%s", "ENABLE: AES keywrapping support");
869 break;
870 case KVM_S390_VM_CRYPTO_ENABLE_DEA_KW:
866 get_random_bytes(
867 kvm->arch.crypto.crycb->aes_wrapping_key_mask,
868 sizeof(kvm->arch.crypto.crycb->aes_wrapping_key_mask));
869 kvm->arch.crypto.aes_kw = 1;
870 VM_EVENT(kvm, 3, "%s", "ENABLE: AES keywrapping support");
871 break;
872 case KVM_S390_VM_CRYPTO_ENABLE_DEA_KW:
871 if (!test_kvm_facility(kvm, 76))
873 if (!test_kvm_facility(kvm, 76)) {
874 mutex_unlock(&kvm->lock);
872 return -EINVAL;
875 return -EINVAL;
876 }
873 get_random_bytes(
874 kvm->arch.crypto.crycb->dea_wrapping_key_mask,
875 sizeof(kvm->arch.crypto.crycb->dea_wrapping_key_mask));
876 kvm->arch.crypto.dea_kw = 1;
877 VM_EVENT(kvm, 3, "%s", "ENABLE: DEA keywrapping support");
878 break;
879 case KVM_S390_VM_CRYPTO_DISABLE_AES_KW:
877 get_random_bytes(
878 kvm->arch.crypto.crycb->dea_wrapping_key_mask,
879 sizeof(kvm->arch.crypto.crycb->dea_wrapping_key_mask));
880 kvm->arch.crypto.dea_kw = 1;
881 VM_EVENT(kvm, 3, "%s", "ENABLE: DEA keywrapping support");
882 break;
883 case KVM_S390_VM_CRYPTO_DISABLE_AES_KW:
880 if (!test_kvm_facility(kvm, 76))
884 if (!test_kvm_facility(kvm, 76)) {
885 mutex_unlock(&kvm->lock);
881 return -EINVAL;
886 return -EINVAL;
887 }
882 kvm->arch.crypto.aes_kw = 0;
883 memset(kvm->arch.crypto.crycb->aes_wrapping_key_mask, 0,
884 sizeof(kvm->arch.crypto.crycb->aes_wrapping_key_mask));
885 VM_EVENT(kvm, 3, "%s", "DISABLE: AES keywrapping support");
886 break;
887 case KVM_S390_VM_CRYPTO_DISABLE_DEA_KW:
888 kvm->arch.crypto.aes_kw = 0;
889 memset(kvm->arch.crypto.crycb->aes_wrapping_key_mask, 0,
890 sizeof(kvm->arch.crypto.crycb->aes_wrapping_key_mask));
891 VM_EVENT(kvm, 3, "%s", "DISABLE: AES keywrapping support");
892 break;
893 case KVM_S390_VM_CRYPTO_DISABLE_DEA_KW:
888 if (!test_kvm_facility(kvm, 76))
894 if (!test_kvm_facility(kvm, 76)) {
895 mutex_unlock(&kvm->lock);
889 return -EINVAL;
896 return -EINVAL;
897 }
890 kvm->arch.crypto.dea_kw = 0;
891 memset(kvm->arch.crypto.crycb->dea_wrapping_key_mask, 0,
892 sizeof(kvm->arch.crypto.crycb->dea_wrapping_key_mask));
893 VM_EVENT(kvm, 3, "%s", "DISABLE: DEA keywrapping support");
894 break;
895 case KVM_S390_VM_CRYPTO_ENABLE_APIE:
896 if (!ap_instructions_available()) {
897 mutex_unlock(&kvm->lock);

--- 1822 unchanged lines hidden (view full) ---

2720 if (vcpu->kvm->arch.use_cmma) {
2721 rc = kvm_s390_vcpu_setup_cmma(vcpu);
2722 if (rc)
2723 return rc;
2724 }
2725 hrtimer_init(&vcpu->arch.ckc_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
2726 vcpu->arch.ckc_timer.function = kvm_s390_idle_wakeup;
2727
898 kvm->arch.crypto.dea_kw = 0;
899 memset(kvm->arch.crypto.crycb->dea_wrapping_key_mask, 0,
900 sizeof(kvm->arch.crypto.crycb->dea_wrapping_key_mask));
901 VM_EVENT(kvm, 3, "%s", "DISABLE: DEA keywrapping support");
902 break;
903 case KVM_S390_VM_CRYPTO_ENABLE_APIE:
904 if (!ap_instructions_available()) {
905 mutex_unlock(&kvm->lock);

--- 1822 unchanged lines hidden (view full) ---

2728 if (vcpu->kvm->arch.use_cmma) {
2729 rc = kvm_s390_vcpu_setup_cmma(vcpu);
2730 if (rc)
2731 return rc;
2732 }
2733 hrtimer_init(&vcpu->arch.ckc_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
2734 vcpu->arch.ckc_timer.function = kvm_s390_idle_wakeup;
2735
2728 vcpu->arch.sie_block->hpid = HPID_KVM;
2729
2730 kvm_s390_vcpu_crypto_setup(vcpu);
2731
2732 return rc;
2733}
2734
2735struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
2736 unsigned int id)
2737{

--- 1540 unchanged lines hidden ---
2736 kvm_s390_vcpu_crypto_setup(vcpu);
2737
2738 return rc;
2739}
2740
2741struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
2742 unsigned int id)
2743{

--- 1540 unchanged lines hidden ---