acrn-hypervisor/hypervisor/include/arch/x86/asm/guest
Shuo A Liu 10ec896f99 hv: nested: Introduce shadow EPT infrastructure
To shadow guest EPT, the hypervisor needs construct a shadow EPT for each
guest EPT. The key to associate a shadow EPT and a guest EPT is the EPTP
(EPT pointer). This patch provides following structure to do the association.

	struct nept_desc {
	       /*
	        * A shadow EPTP.
	        * The format is same with 'EPT pointer' in VMCS.
	        * Its PML4 address field is a HVA of the hypervisor.
	        */
	       uint64_t shadow_eptp;
	       /*
	        * An guest EPTP configured by L1 VM.
	        * The format is same with 'EPT pointer' in VMCS.
	        * Its PML4 address field is a GPA of the L1 VM.
	        */
	       uint64_t guest_eptp;
	       uint32_t ref_count;
	};

Due to lack of dynamic memory allocation of the hypervisor, a array
nept_bucket of type 'struct nept_desc' is introduced to store those
association information. A guest EPT might be shared between different
L2 vCPUs, so this patch provides several functions to handle the
reference of the structure.

Interface get_shadow_eptp() also is introduced. To find the shadow EPTP
of a specified guest EPTP.

Tracked-On: #5923
Signed-off-by: Sainath Grandhi <sainath.grandhi@intel.com>
Signed-off-by: Zide Chen <zide.chen@intel.com>
Signed-off-by: Shuo A Liu <shuo.a.liu@intel.com>
Reviewed-by: Jason Chen CJ <jason.cj.chen@intel.com>
Acked-by: Eddie Dong <eddie.dong@intel.com>
2021-06-04 13:53:47 +08:00
..
assign.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
ept.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
guest_memory.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
guest_pm.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
hyperv.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
instr_emul.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
nested.h hv: nested: implement nested VM exit handler 2021-06-03 15:23:25 +08:00
splitlock.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
trusty.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
ucode.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
vcpu.h hv: nested: support for VMXON emulation 2021-05-24 10:34:01 +08:00
vcpuid.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
vept.h hv: nested: Introduce shadow EPT infrastructure 2021-06-04 13:53:47 +08:00
virq.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
virtual_cr.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
vlapic.h hv: vlapic: wrap a function to calculate destination vcpu mask by shorthand 2021-05-24 10:27:32 +08:00
vm_reset.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
vm.h hv: nested: enable nested virtualization 2021-05-13 16:16:30 +08:00
vmcs.h hv: nested: support for VMPTRLD emulation 2021-05-24 10:34:01 +08:00
vmexit.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
vmtrr.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
vmx_io.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00