Re: [PATCH v8 7/8] kvmppc: Support reset of secure guest
From: Bharata B Rao <hidden>
Date: 2019-09-18 07:21:30
Also in:
linux-mm
On Tue, Sep 17, 2019 at 04:27:36PM -0700, Sukadev Bhattiprolu wrote:
quoted
+ + 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.
quoted
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.
quoted
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, forcingIs that get page implicit? there is no explicit "get" in this function?
gfn_to_pfn does get_user_pages eventually.
quoted
+ * 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.