On 24/09/2018 18:07, Tony Krowiak wrote: > On 09/24/2018 04:40 AM, David Hildenbrand wrote: >> >>> /** >>> - * Verify that the AP instructions are available on the guest. This is >>> indicated >>> - * via the KVM_S390_VM_CPU_FEAT_AP CPU model feature. >>> + * Verify that the AP instructions are being interpreted by firmware >>> for the >>> + * guest. This is indicated by the kvm->arch.crypto.apie flag. >>> */ >>> static int kvm_ap_validate_crypto_setup(struct kvm *kvm) >>> { >>> - if (test_bit_inv(KVM_S390_VM_CPU_FEAT_AP, kvm->arch.cpu_feat)) >>> + if (kvm->arch.crypto.apie) >>> return 0; >> >> I wonder if this check makes sense, because apie can be toggled during >> runtime. I guess it would be sufficient to check if the ap control block >> is available and apie is supported by the HW. > > I am not clear about what you are getting at here, but I'll attempt > to respond. There is no need to check if the AP control block (CRYCB) > is available as the address is set in the CRYCBD three instructions > above, even if AP instructions are not available. Regarding whether apie > is supported by the hardware, the value of vcpu->kvm->arch.crypto.apie > can not be set unless it is supported by the HW. In the patch (24/26) > that provides the VM attributes to toggle this value, it can only be > turned on if the AP instructions are available. I might also note that > the kvm_ap_validate_crypto_setup() function is called whenever one of > the VM crypto attributes is changed, so it makes sense that decisions > made in this function are based on a change to a VM crypto attribute. In > my first pass at changing this function, I checked > ap_instructions_available() here, but after considering all of the > above, it made sense to me to check the apie flag. > I prefer ap_instructions_available(). As I said, kvm->arch.crypto.apie is a moving target. -- Thanks, David / dhildenb