Re: [PATCH 02/18] KVM: MMU: Make tdp_enabled a mmu-context parameter

From: Avi Kivity
Date: Thu Mar 11 2010 - 01:47:31 EST


On 03/10/2010 05:26 PM, Joerg Roedel wrote:
On Wed, Mar 10, 2010 at 04:53:29PM +0200, Avi Kivity wrote:
On 03/10/2010 04:44 PM, Joerg Roedel wrote:
On Mon, Mar 08, 2010 at 11:17:41AM +0200, Avi Kivity wrote:
On 03/03/2010 09:12 PM, Joerg Roedel wrote:
This patch changes the tdp_enabled flag from its global
meaning to the mmu-context. This is necessary for Nested SVM
with emulation of Nested Paging where we need an extra MMU
context to shadow the Nested Nested Page Table.


diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
index ec891a2..e7bef19 100644
--- a/arch/x86/include/asm/kvm_host.h
+++ b/arch/x86/include/asm/kvm_host.h
@@ -254,6 +254,7 @@ struct kvm_mmu {
int root_level;
int shadow_root_level;
union kvm_mmu_page_role base_role;
+ bool tdp_enabled;

This needs a different name, since the old one is still around.
Perhaps we could call it parent_mmu and make it a kvm_mmu pointer.
Hmm, how about renaming the global tdp_enabled variable to tdp_usable?
The global variable indicates if tdp is _usable_ and we can _enable_ it
for a mmu context.
I think of the global flags as host tdp, and the mmu as guest tdp
(but maybe this is wrong?). If that makes sense, the naming should
reflect that.
The basic flow of the mmu state with npt-npt is:

1. As long as the L1 is running the arch.mmu context is in tdp
mode and builds a direct-mapped page table.

2. When vmrun is emulated and the nested vmcb enables nested
paging, arch.mmu is switched to a shadow-mmu mode which now
shadows the l1 nested page table.
So when the l2-guest runs with nested paging the
arch.mmu.tdp_enabled variable on the host is false.

3. On a vmexit emulation the mmu is switched back to tdp
handling state.

So the mmu.tdp_enabled parameter is about tdp being enabled for the
mmu context (so mmu.tdp_enabled means that we build a l1-direct-mapped
page table when true or shadow a l1-page-table when false). Thats why I
think the 'tdp_enabled' name makes sense in the mmu-context.
The global flag only shows if an mmu-context could be in tdp-state. So
tdp_usable may be a good name for it.


tdp is still used in both cases, so that name is confusing. We could call it mmu.direct_map (and set it for real mode?) or mmu.virtual_map (with the opposite sense). Or something.

--
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/