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 --- |