On Thu, Jan 02, 2020 at 04:32:33PM -0800, Sukadev Bhattiprolu wrote: > Ram Pai [linuxram@xxxxxxxxxx] wrote: > > > +unsigned long kvmppc_h_svm_init_abort(struct kvm *kvm) > > > +{ > > > + int i; > > > + > > > + if (!(kvm->arch.secure_guest & KVMPPC_SECURE_INIT_START)) > > > + return H_UNSUPPORTED; > > > > It should also return H_UNSUPPORTED when > > (kvm->arch.secure_guest & KVMPPC_SECURE_INIT_DONE) is true. > > If KVMPPC_SECURE_INIT_DONE is set, KVMPPC_SECURE_INIT_START is also > set - we never clear KVMPPC_SECURE_INIT_START right? I am concerned about the case, where the VM has successfully transitioned into a SVM, where both KVMPPC_SECURE_INIT_DONE and KVMPPC_SECURE_INIT_START are set. In this scenario, if the UV makes a H_SVM_INIT_ABORT hcall, the Hypervisor will not return H_UNSUPPORTED, because KVMPPC_SECURE_INIT_START is set. That is the reason, I think, we need to add another check as below. if (kvm->arch.secure_guest & KVMPPC_SECURE_INIT_DONE) return H_UNSUPPORTED; > > Sukadev -- Ram Pai