Re: [PATCH 15/22] KVM: MMU: Introduce kvm_read_guest_page_x86()

From: Avi Kivity
Date: Tue Apr 27 2010 - 08:52:47 EST


On 04/27/2010 01:38 PM, Joerg Roedel wrote:
This patch introduces the kvm_read_guest_page_x86 function
which reads from the physical memory of the guest. If the
guest is running in guest-mode itself with nested paging
enabled it will read from the guest's guest physical memory
instead.
The patch also changes changes the code to use this function
where it is necessary.



diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
index 7851bbc..d9dfc8c 100644
--- a/arch/x86/include/asm/kvm_host.h
+++ b/arch/x86/include/asm/kvm_host.h
@@ -254,6 +254,13 @@ struct kvm_mmu {
union kvm_mmu_page_role base_role;
bool direct_map;

+ /*
+ * If true the mmu runs in two-level mode.
+ * vcpu->arch.nested_mmu needs to contain meaningful values in
+ * this case.
+ */
+ bool nested;
+

struct mmu_context *active_mmu? (in vcpu->arch)

u64 *pae_root;
u64 rsvd_bits_mask[2][4];
};
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 558d995..317ad26 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -379,6 +379,20 @@ int kvm_read_guest_page_tdp(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu,
}
EXPORT_SYMBOL_GPL(kvm_read_guest_page_tdp);

+int kvm_read_guest_page_x86(struct kvm_vcpu *vcpu, gfn_t gfn,
+ void *data, int offset, int len, u32 *error)
+{
+ struct kvm_mmu *mmu;
+
+ if (vcpu->arch.mmu.nested)
+ mmu =&vcpu->arch.nested_mmu;
+ else
+ mmu =&vcpu->arch.mmu;
+
+ return kvm_read_guest_page_tdp(vcpu, mmu, gfn, data, offset, len,
+ error);
+}

This is really not x86 specific (though the implementation certainly is). s390 will have exactly the same need when it gets nested virt. I think this can be folded into kvm_read_guest_page_tdp()/kvm_read_nested_guest_page().


--
error compiling committee.c: too many arguments to function

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/