On Tue, Sep 17, 2019 at 04:27:36PM -0700, Sukadev Bhattiprolu wrote: > > + > > + if (kvmppc_is_guest_secure(kvm)) { > > Nit: Since this entire function only applies to secure guests we could > return here for normal guests. Yes, can be done. > > bool kvmppc_is_guest_secure(struct kvm *kvm) > > { > > - return !!(kvm->arch.secure_guest & KVMPPC_SECURE_INIT_DONE); > > + return (kvm->arch.secure_guest & KVMPPC_SECURE_INIT_DONE); > > } > > This change could be folded into PATCH 6? That was the intention but looks like I 'pick'ed wrong commit during rebase. Will fix this. > > > > unsigned long kvmppc_h_svm_init_start(struct kvm *kvm) > > @@ -85,9 +86,68 @@ unsigned long kvmppc_h_svm_init_done(struct kvm *kvm) > > return H_UNSUPPORTED; > > > > kvm->arch.secure_guest |= KVMPPC_SECURE_INIT_DONE; > > + if (kvm_is_radix(kvm)) { > > + kvmppc_free_radix(kvm); > > + pr_info("LPID %d went secure, freed HV side radix pgtables\n", > > + kvm->arch.lpid); > > + } > > return H_SUCCESS; > > } > > > > +/* > > + * Drop device pages that we maintain for the secure guest > > + * > > + * We first mark the pages to be skipped from UV_PAGE_OUT when there > > + * is HV side fault on these pages. Next we *get* these pages, forcing > > Is that get page implicit? there is no explicit "get" in this > function? gfn_to_pfn does get_user_pages eventually. > > > + * fault on them, do fault time migration to replace the device PTEs in > > + * QEMU page table with normal PTEs from newly allocated pages. > > + */ > > +static void kvmppc_uvmem_drop_pages(struct kvm_memory_slot *free, > > + struct kvm *kvm) > > +{ > > + int i; > > + struct kvmppc_uvmem_page_pvt *pvt; > > + unsigned long pfn; > > + > > + for (i = 0; i < free->npages; i++) { > > + unsigned long *rmap = &free->arch.rmap[i]; > > + struct page *uvmem_page; > > + > > + if (kvmppc_rmap_type(rmap) == KVMPPC_RMAP_UVMEM_PFN) { > > + uvmem_page = pfn_to_page(*rmap & > > + ~KVMPPC_RMAP_UVMEM_PFN); > > + pvt = (struct kvmppc_uvmem_page_pvt *) > > + uvmem_page->zone_device_data; > > + pvt->skip_page_out = true; > > + > > + pfn = gfn_to_pfn(kvm, pvt->gpa >> PAGE_SHIFT); Regards, Bharata.