On Sat, Dec 14, 2019 at 06:12:08PM -0800, Sukadev Bhattiprolu wrote: > > Implement the H_SVM_INIT_ABORT hcall which the Ultravisor can use to > abort an SVM after it has issued the H_SVM_INIT_START and before the > H_SVM_INIT_DONE hcalls. This hcall could be used when Ultravisor > encounters security violations or other errors when starting an SVM. > > Note that this hcall is different from UV_SVM_TERMINATE ucall which > is used by HV to terminate/cleanup an VM that has becore secure. > > The H_SVM_INIT_ABORT should basically undo operations that were done > since the H_SVM_INIT_START hcall - i.e page-out all the VM pages back > to normal memory, and terminate the SVM. > > (If we do not bring the pages back to normal memory, the text/data > of the VM would be stuck in secure memory and since the SVM did not > go secure, its MSR_S bit will be clear and the VM wont be able to > access its pages even to do a clean exit). > > Based on patches and discussion with Paul Mackerras, Ram Pai and > Bharata Rao. > > Signed-off-by: Ram Pai <linuxram@xxxxxxxxxxxxx> > Signed-off-by: Sukadev Bhattiprolu <sukadev@xxxxxxxxxxxxx> > Signed-off-by: Bharata B Rao <bharata@xxxxxxxxxxxxx> Minor comment below, but not a showstopper. Also, as Bharata noted you need to hold the srcu lock for reading. > + for (i = 0; i < KVM_ADDRESS_SPACE_NUM; i++) { > + struct kvm_memory_slot *memslot; > + struct kvm_memslots *slots = __kvm_memslots(kvm, i); > + > + if (!slots) > + continue; > + > + kvm_for_each_memslot(memslot, slots) > + kvmppc_uvmem_drop_pages(memslot, kvm, false); > + } Since we use the default KVM_ADDRESS_SPACE_NUM, which is 1, this code isn't wrong but it is more verbose than it needs to be. It could be kvm_for_each_memslot(kvm_memslots(kvm), slots) kvmppc_uvmem_drop_pages(memslot, kvm, false); Paul.