Thread (20 messages) flat view 20 messages, 2 authors, 2019-09-18

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, forcing
Is 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.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help