mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-09-22 17:27:53 +00:00
hv: nested: support for VMCLEAR emulation
This patch is to emulate VMCLEAR instruction. L1 hypervisor issues VMCLEAR on a VMCS12 whose state could be any of these: active and current, active but not current, not yet VMPTRLDed. To emulate the VMCLEAR instruction, ACRN sets the VMCS12 launch state to "clear", and if L0 already cached this VMCS12, need to sync it back to guest memory: - sync shadow fields from shadow VMCS VMCS to cache VMCS12 - copy cache VMCS12 to L1 guest memory Tracked-On: #5923 Signed-off-by: Sainath Grandhi <sainath.grandhi@intel.com> Signed-off-by: Zide Chen <zide.chen@intel.com>
This commit is contained in:
@@ -83,6 +83,7 @@ union value_64 {
|
||||
#define VMCS_SHADOW_BIT_INDICATOR (1U << 31U)
|
||||
|
||||
/* refer to ISDM: Table 30-1. VM-Instruction Error Numbers */
|
||||
#define VMXERR_VMCLEAR_VMXON_POINTER (3)
|
||||
#define VMXERR_VMPTRLD_INVALID_ADDRESS (9)
|
||||
#define VMXERR_VMPTRLD_INCORRECT_VMCS_REVISION_ID (10)
|
||||
#define VMXERR_VMPTRLD_VMXON_POINTER (11)
|
||||
@@ -94,6 +95,9 @@ union value_64 {
|
||||
*/
|
||||
#define VMCS12_REVISION_ID 0x15407E12U
|
||||
|
||||
#define VMCS12_LAUNCH_STATE_CLEAR (0U)
|
||||
#define VMCS12_LAUNCH_STATE_LAUNCHED (1U)
|
||||
|
||||
/*
|
||||
* struct acrn_vmcs12 describes the emulated VMCS for the nested guest (L2).
|
||||
*/
|
||||
@@ -308,6 +312,7 @@ void nested_vmx_result(enum VMXResult, int error_number);
|
||||
int32_t vmxon_vmexit_handler(struct acrn_vcpu *vcpu);
|
||||
int32_t vmxoff_vmexit_handler(struct acrn_vcpu *vcpu);
|
||||
int32_t vmptrld_vmexit_handler(struct acrn_vcpu *vcpu);
|
||||
int32_t vmclear_vmexit_handler(struct acrn_vcpu *vcpu);
|
||||
|
||||
#ifdef CONFIG_NVMX_ENABLED
|
||||
struct acrn_nested {
|
||||
|
Reference in New Issue
Block a user