From: Xin Li <xin3.li@intel.com>
To: kvm@vger.kernel.org, linux-doc@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-hyperv@vger.kernel.org,
linux-kselftest@vger.kernel.org
Cc: seanjc@google.com, pbonzini@redhat.com, corbet@lwn.net,
kys@microsoft.com, haiyangz@microsoft.com, wei.liu@kernel.org,
decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com,
bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org,
hpa@zytor.com, vkuznets@redhat.com, peterz@infradead.org,
ravi.v.shankar@intel.com
Subject: [PATCH v1 20/23] KVM: selftests: Add FRED VMCS fields to evmcs
Date: Wed, 8 Nov 2023 10:30:00 -0800 [thread overview]
Message-ID: <20231108183003.5981-21-xin3.li@intel.com> (raw)
In-Reply-To: <20231108183003.5981-1-xin3.li@intel.com>
Add FRED VMCS fields to evmcs.
Signed-off-by: Xin Li <xin3.li@intel.com>
---
.../selftests/kvm/include/x86_64/evmcs.h | 146 ++++++++++++++++++
.../selftests/kvm/include/x86_64/vmx.h | 20 +++
2 files changed, 166 insertions(+)
diff --git a/tools/testing/selftests/kvm/include/x86_64/evmcs.h b/tools/testing/selftests/kvm/include/x86_64/evmcs.h
index 901caf0e0939..afd35f0c34fd 100644
--- a/tools/testing/selftests/kvm/include/x86_64/evmcs.h
+++ b/tools/testing/selftests/kvm/include/x86_64/evmcs.h
@@ -216,6 +216,27 @@ struct hv_enlightened_vmcs {
u64 host_ssp;
u64 host_ia32_int_ssp_table_addr;
u64 padding64_6;
+
+ u64 host_ia32_fred_config;
+ u64 host_ia32_fred_rsp1;
+ u64 host_ia32_fred_rsp2;
+ u64 host_ia32_fred_rsp3;
+ u64 host_ia32_fred_stklvls;
+ u64 host_ia32_fred_ssp1;
+ u64 host_ia32_fred_ssp2;
+ u64 host_ia32_fred_ssp3;
+
+ u64 guest_ia32_fred_config;
+ u64 guest_ia32_fred_rsp1;
+ u64 guest_ia32_fred_rsp2;
+ u64 guest_ia32_fred_rsp3;
+ u64 guest_ia32_fred_stklvls;
+ u64 guest_ia32_fred_ssp1;
+ u64 guest_ia32_fred_ssp2;
+ u64 guest_ia32_fred_ssp3;
+
+ u64 injected_event_data;
+ u64 original_event_data;
} __packed;
#define HV_VMX_ENLIGHTENED_CLEAN_FIELD_NONE 0
@@ -450,6 +471,9 @@ static inline int evmcs_vmread(uint64_t encoding, uint64_t *value)
case GUEST_LINEAR_ADDRESS:
*value = current_evmcs->guest_linear_address;
break;
+ case ORIGINAL_EVENT_DATA:
+ *value = current_evmcs->original_event_data;
+ break;
case VM_EXIT_MSR_STORE_ADDR:
*value = current_evmcs->vm_exit_msr_store_addr;
break;
@@ -492,6 +516,9 @@ static inline int evmcs_vmread(uint64_t encoding, uint64_t *value)
case VM_ENTRY_EXCEPTION_ERROR_CODE:
*value = current_evmcs->vm_entry_exception_error_code;
break;
+ case INJECTED_EVENT_DATA:
+ *value = current_evmcs->injected_event_data;
+ break;
case VM_ENTRY_INSTRUCTION_LEN:
*value = current_evmcs->vm_entry_instruction_len;
break;
@@ -669,6 +696,54 @@ static inline int evmcs_vmread(uint64_t encoding, uint64_t *value)
case TSC_MULTIPLIER:
*value = current_evmcs->tsc_multiplier;
break;
+ case HOST_IA32_FRED_CONFIG:
+ *value = current_evmcs->host_ia32_fred_config;
+ break;
+ case HOST_IA32_FRED_RSP1:
+ *value = current_evmcs->host_ia32_fred_rsp1;
+ break;
+ case HOST_IA32_FRED_RSP2:
+ *value = current_evmcs->host_ia32_fred_rsp2;
+ break;
+ case HOST_IA32_FRED_RSP3:
+ *value = current_evmcs->host_ia32_fred_rsp3;
+ break;
+ case HOST_IA32_FRED_STKLVLS:
+ *value = current_evmcs->host_ia32_fred_stklvls;
+ break;
+ case HOST_IA32_FRED_SSP1:
+ *value = current_evmcs->host_ia32_fred_ssp1;
+ break;
+ case HOST_IA32_FRED_SSP2:
+ *value = current_evmcs->host_ia32_fred_ssp2;
+ break;
+ case HOST_IA32_FRED_SSP3:
+ *value = current_evmcs->host_ia32_fred_ssp3;
+ break;
+ case GUEST_IA32_FRED_CONFIG:
+ *value = current_evmcs->guest_ia32_fred_config;
+ break;
+ case GUEST_IA32_FRED_RSP1:
+ *value = current_evmcs->guest_ia32_fred_rsp1;
+ break;
+ case GUEST_IA32_FRED_RSP2:
+ *value = current_evmcs->guest_ia32_fred_rsp2;
+ break;
+ case GUEST_IA32_FRED_RSP3:
+ *value = current_evmcs->guest_ia32_fred_rsp3;
+ break;
+ case GUEST_IA32_FRED_STKLVLS:
+ *value = current_evmcs->guest_ia32_fred_stklvls;
+ break;
+ case GUEST_IA32_FRED_SSP1:
+ *value = current_evmcs->guest_ia32_fred_ssp1;
+ break;
+ case GUEST_IA32_FRED_SSP2:
+ *value = current_evmcs->guest_ia32_fred_ssp2;
+ break;
+ case GUEST_IA32_FRED_SSP3:
+ *value = current_evmcs->guest_ia32_fred_ssp3;
+ break;
default: return 1;
}
@@ -906,6 +981,10 @@ static inline int evmcs_vmwrite(uint64_t encoding, uint64_t value)
current_evmcs->guest_linear_address = value;
current_evmcs->hv_clean_fields &= ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_NONE;
break;
+ case ORIGINAL_EVENT_DATA:
+ current_evmcs->original_event_data = value;
+ current_evmcs->hv_clean_fields &= ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_NONE;
+ break;
case VM_EXIT_MSR_STORE_ADDR:
current_evmcs->vm_exit_msr_store_addr = value;
current_evmcs->hv_clean_fields &= ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_ALL;
@@ -962,6 +1041,10 @@ static inline int evmcs_vmwrite(uint64_t encoding, uint64_t value)
current_evmcs->vm_entry_exception_error_code = value;
current_evmcs->hv_clean_fields &= ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_CONTROL_EVENT;
break;
+ case INJECTED_EVENT_DATA:
+ current_evmcs->injected_event_data = value;
+ current_evmcs->hv_clean_fields &= ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_CONTROL_EVENT;
+ break;
case VM_ENTRY_INSTRUCTION_LEN:
current_evmcs->vm_entry_instruction_len = value;
current_evmcs->hv_clean_fields &= ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_CONTROL_EVENT;
@@ -1198,6 +1281,69 @@ static inline int evmcs_vmwrite(uint64_t encoding, uint64_t value)
current_evmcs->tsc_multiplier = value;
current_evmcs->hv_clean_fields &= ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_CONTROL_GRP2;
break;
+ case HOST_IA32_FRED_CONFIG:
+ current_evmcs->host_ia32_fred_config = value;
+ current_evmcs->hv_clean_fields &= ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_HOST_POINTER;
+ break;
+ case HOST_IA32_FRED_RSP1:
+ current_evmcs->host_ia32_fred_rsp1 = value;
+ current_evmcs->hv_clean_fields &= ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_HOST_POINTER;
+ break;
+ case HOST_IA32_FRED_RSP2:
+ current_evmcs->host_ia32_fred_rsp2 = value;
+ current_evmcs->hv_clean_fields &= ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_HOST_POINTER;
+ break;
+ case HOST_IA32_FRED_RSP3:
+ current_evmcs->host_ia32_fred_rsp3 = value;
+ current_evmcs->hv_clean_fields &= ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_HOST_POINTER;
+ break;
+ case HOST_IA32_FRED_STKLVLS:
+ current_evmcs->host_ia32_fred_stklvls = value;
+ current_evmcs->hv_clean_fields &= ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_HOST_POINTER;
+ break;
+ case HOST_IA32_FRED_SSP1:
+ current_evmcs->host_ia32_fred_ssp1 = value;
+ current_evmcs->hv_clean_fields &= ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_HOST_POINTER;
+ break;
+ case HOST_IA32_FRED_SSP2:
+ current_evmcs->host_ia32_fred_ssp2 = value;
+ current_evmcs->hv_clean_fields &= ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_HOST_POINTER;
+ break;
+ case HOST_IA32_FRED_SSP3:
+ current_evmcs->host_ia32_fred_ssp3 = value;
+ current_evmcs->hv_clean_fields &= ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_HOST_POINTER;
+ break;
+ case GUEST_IA32_FRED_CONFIG:
+ current_evmcs->guest_ia32_fred_config = value;
+ current_evmcs->hv_clean_fields &= ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_GUEST_GRP2;
+ case GUEST_IA32_FRED_RSP1:
+ current_evmcs->guest_ia32_fred_rsp1 = value;
+ current_evmcs->hv_clean_fields &= ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_GUEST_GRP2;
+ break;
+ case GUEST_IA32_FRED_RSP2:
+ current_evmcs->guest_ia32_fred_rsp2 = value;
+ current_evmcs->hv_clean_fields &= ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_GUEST_GRP2;
+ break;
+ case GUEST_IA32_FRED_RSP3:
+ current_evmcs->guest_ia32_fred_rsp3 = value;
+ current_evmcs->hv_clean_fields &= ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_GUEST_GRP2;
+ break;
+ case GUEST_IA32_FRED_STKLVLS:
+ current_evmcs->guest_ia32_fred_stklvls = value;
+ current_evmcs->hv_clean_fields &= ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_GUEST_GRP2;
+ break;
+ case GUEST_IA32_FRED_SSP1:
+ current_evmcs->guest_ia32_fred_ssp1 = value;
+ current_evmcs->hv_clean_fields &= ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_GUEST_GRP2;
+ break;
+ case GUEST_IA32_FRED_SSP2:
+ current_evmcs->guest_ia32_fred_ssp2 = value;
+ current_evmcs->hv_clean_fields &= ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_GUEST_GRP2;
+ break;
+ case GUEST_IA32_FRED_SSP3:
+ current_evmcs->guest_ia32_fred_ssp3 = value;
+ current_evmcs->hv_clean_fields &= ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_GUEST_GRP2;
+ break;
default: return 1;
}
diff --git a/tools/testing/selftests/kvm/include/x86_64/vmx.h b/tools/testing/selftests/kvm/include/x86_64/vmx.h
index 5f0c0a29c556..e1fdbc293af7 100644
--- a/tools/testing/selftests/kvm/include/x86_64/vmx.h
+++ b/tools/testing/selftests/kvm/include/x86_64/vmx.h
@@ -165,8 +165,12 @@ enum vmcs_field {
ENCLS_EXITING_BITMAP_HIGH = 0x0000202F,
TSC_MULTIPLIER = 0x00002032,
TSC_MULTIPLIER_HIGH = 0x00002033,
+ INJECTED_EVENT_DATA = 0x00002052,
+ INJECTED_EVENT_DATA_HIGH = 0x00002053,
GUEST_PHYSICAL_ADDRESS = 0x00002400,
GUEST_PHYSICAL_ADDRESS_HIGH = 0x00002401,
+ ORIGINAL_EVENT_DATA = 0x00002404,
+ ORIGINAL_EVENT_DATA_HIGH = 0x00002405,
VMCS_LINK_POINTER = 0x00002800,
VMCS_LINK_POINTER_HIGH = 0x00002801,
GUEST_IA32_DEBUGCTL = 0x00002802,
@@ -187,12 +191,28 @@ enum vmcs_field {
GUEST_PDPTR3_HIGH = 0x00002811,
GUEST_BNDCFGS = 0x00002812,
GUEST_BNDCFGS_HIGH = 0x00002813,
+ GUEST_IA32_FRED_CONFIG = 0x0000281a,
+ GUEST_IA32_FRED_RSP1 = 0x0000281c,
+ GUEST_IA32_FRED_RSP2 = 0x0000281e,
+ GUEST_IA32_FRED_RSP3 = 0x00002820,
+ GUEST_IA32_FRED_STKLVLS = 0x00002822,
+ GUEST_IA32_FRED_SSP1 = 0x00002824,
+ GUEST_IA32_FRED_SSP2 = 0x00002826,
+ GUEST_IA32_FRED_SSP3 = 0x00002828,
HOST_IA32_PAT = 0x00002c00,
HOST_IA32_PAT_HIGH = 0x00002c01,
HOST_IA32_EFER = 0x00002c02,
HOST_IA32_EFER_HIGH = 0x00002c03,
HOST_IA32_PERF_GLOBAL_CTRL = 0x00002c04,
HOST_IA32_PERF_GLOBAL_CTRL_HIGH = 0x00002c05,
+ HOST_IA32_FRED_CONFIG = 0x00002c08,
+ HOST_IA32_FRED_RSP1 = 0x00002c0a,
+ HOST_IA32_FRED_RSP2 = 0x00002c0c,
+ HOST_IA32_FRED_RSP3 = 0x00002c0e,
+ HOST_IA32_FRED_STKLVLS = 0x00002c10,
+ HOST_IA32_FRED_SSP1 = 0x00002c12,
+ HOST_IA32_FRED_SSP2 = 0x00002c14,
+ HOST_IA32_FRED_SSP3 = 0x00002c16,
PIN_BASED_VM_EXEC_CONTROL = 0x00004000,
CPU_BASED_VM_EXEC_CONTROL = 0x00004002,
EXCEPTION_BITMAP = 0x00004004,
--
2.42.0
next prev parent reply other threads:[~2023-11-08 19:00 UTC|newest]
Thread overview: 70+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-08 18:29 [PATCH v1 00/23] Enable FRED with KVM VMX Xin Li
2023-11-08 18:29 ` [PATCH v1 01/23] KVM: VMX: Cleanup VMX basic information defines and usages Xin Li
2023-11-08 18:29 ` [PATCH v1 02/23] KVM: VMX: Cleanup VMX misc " Xin Li
2023-11-08 18:29 ` [PATCH v1 03/23] KVM: VMX: Add support for the secondary VM exit controls Xin Li
2023-11-08 18:29 ` [PATCH v1 04/23] KVM: x86: Mark CR4.FRED as not reserved Xin Li
2023-11-08 18:29 ` [PATCH v1 05/23] KVM: VMX: Initialize FRED VM entry/exit controls in vmcs_config Xin Li
2023-11-09 8:53 ` Chao Gao
2023-11-09 15:15 ` Sean Christopherson
2023-11-10 0:04 ` Li, Xin3
2023-11-10 15:01 ` Sean Christopherson
2023-11-14 4:05 ` Li, Xin3
2023-11-13 17:18 ` Nikolay Borisov
2023-11-15 2:39 ` Li, Xin3
2023-11-08 18:29 ` [PATCH v1 06/23] KVM: VMX: Defer enabling FRED MSRs save/load until after set CPUID Xin Li
2023-11-09 9:15 ` Chao Gao
2023-11-09 23:50 ` Li, Xin3
2023-11-10 0:18 ` Sean Christopherson
2023-11-14 2:50 ` Li, Xin3
2023-11-15 21:47 ` Sean Christopherson
2023-11-08 18:29 ` [PATCH v1 07/23] KVM: VMX: Disable intercepting FRED MSRs Xin Li
2023-11-09 9:21 ` Chao Gao
2023-11-08 18:29 ` [PATCH v1 08/23] KVM: VMX: Initialize VMCS FRED fields Xin Li
2023-11-13 3:04 ` Chao Gao
2023-11-14 6:02 ` Li, Xin3
2023-11-14 6:51 ` Li, Xin3
2023-11-08 18:29 ` [PATCH v1 09/23] KVM: VMX: Switch FRED RSP0 between host and guest Xin Li
2023-11-13 3:47 ` Chao Gao
2023-11-14 5:17 ` Li, Xin3
2023-11-14 7:47 ` Chao Gao
2023-11-15 3:04 ` Li, Xin3
2023-11-08 18:29 ` [PATCH v1 10/23] KVM: VMX: Add support for FRED context save/restore Xin Li
2023-11-13 5:24 ` Chao Gao
2023-11-14 4:48 ` Li, Xin3
2023-11-08 18:29 ` [PATCH v1 11/23] KVM: x86: Add kvm_is_fred_enabled() Xin Li
2023-11-13 7:35 ` Chao Gao
2023-11-14 4:42 ` Li, Xin3
2023-11-14 8:16 ` Chao Gao
2023-11-14 18:57 ` Li, Xin3
2023-11-20 9:04 ` Li, Xin3
2023-11-08 18:29 ` [PATCH v1 12/23] KVM: VMX: Handle FRED event data Xin Li
2023-11-13 10:14 ` Chao Gao
2023-11-14 4:34 ` Li, Xin3
2023-11-14 8:58 ` Chao Gao
2023-11-15 2:52 ` Li, Xin3
2023-11-16 2:39 ` Chao Gao
2023-11-20 8:16 ` Li, Xin3
2023-11-08 18:29 ` [PATCH v1 13/23] KVM: VMX: Handle VMX nested exception for FRED Xin Li
2023-11-14 7:40 ` Chao Gao
2023-11-15 3:03 ` Li, Xin3
2023-12-06 8:37 ` Li, Xin3
2023-12-07 8:42 ` Chao Gao
2023-12-07 10:09 ` Li, Xin3
2023-12-08 1:56 ` Chao Gao
2023-12-08 23:48 ` Li, Xin3
2023-11-08 18:29 ` [PATCH v1 14/23] KVM: VMX: Dump FRED context in dump_vmcs() Xin Li
2023-11-14 14:36 ` Nikolay Borisov
2023-11-15 2:41 ` Li, Xin3
2023-11-08 18:29 ` [PATCH v1 15/23] KVM: nVMX: Add support for the secondary VM exit controls Xin Li
2023-11-09 8:21 ` Jeremi Piotrowski
2023-11-10 0:12 ` Li, Xin3
2023-11-20 15:52 ` Vitaly Kuznetsov
2023-11-20 17:42 ` Li, Xin3
2023-11-08 18:29 ` [PATCH v1 16/23] KVM: nVMX: Add FRED VMCS fields Xin Li
2023-11-08 18:29 ` [PATCH v1 17/23] KVM: nVMX: Add support for VMX FRED controls Xin Li
2023-11-08 18:29 ` [PATCH v1 18/23] KVM: nVMX: Add VMCS FRED states checking Xin Li
2023-11-08 18:29 ` [PATCH v1 19/23] KVM: x86: Allow FRED/LKGS/WRMSRNS to be exposed to guests Xin Li
2023-11-08 18:30 ` Xin Li [this message]
2023-11-08 18:30 ` [PATCH v1 21/23] KVM: selftests: Run debug_regs test with FRED enabled Xin Li
2023-11-08 18:30 ` [PATCH v1 22/23] KVM: selftests: Add a new VM guest mode to run user level code Xin Li
2023-11-08 18:30 ` [PATCH v1 23/23] KVM: selftests: Add fred exception tests Xin Li
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231108183003.5981-21-xin3.li@intel.com \
--to=xin3.li@intel.com \
--cc=bp@alien8.de \
--cc=corbet@lwn.net \
--cc=dave.hansen@linux.intel.com \
--cc=decui@microsoft.com \
--cc=haiyangz@microsoft.com \
--cc=hpa@zytor.com \
--cc=kvm@vger.kernel.org \
--cc=kys@microsoft.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-hyperv@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterz@infradead.org \
--cc=ravi.v.shankar@intel.com \
--cc=seanjc@google.com \
--cc=tglx@linutronix.de \
--cc=vkuznets@redhat.com \
--cc=wei.liu@kernel.org \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.