* [PATCH v1 0/3] target/i386: Add nested FRED support
@ 2024-08-07 8:18 Xin Li (Intel)
2024-08-07 8:18 ` [PATCH v1 1/3] target/i386: Delete duplicated macro definition CR4_FRED_MASK Xin Li (Intel)
` (2 more replies)
0 siblings, 3 replies; 14+ messages in thread
From: Xin Li (Intel) @ 2024-08-07 8:18 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, mtosatti, lei4.wang, zhao1.liu, xin3.li
This patch set adds nested FRED support to allow KVM to run a nested
guest with FRED enabled.
Lei Wang (1):
target/i386: Raise the highest index value used for any VMCS encoding
Xin Li (Intel) (2):
target/i386: Delete duplicated macro definition CR4_FRED_MASK
target/i386: Add VMX control bits for nested FRED support
target/i386/cpu.c | 4 ++--
target/i386/cpu.h | 7 +------
target/i386/kvm/kvm.c | 9 ++++++++-
3 files changed, 11 insertions(+), 9 deletions(-)
base-commit: 6d00c6f982562222adbd0613966285792125abe5
--
2.45.2
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v1 1/3] target/i386: Delete duplicated macro definition CR4_FRED_MASK
2024-08-07 8:18 [PATCH v1 0/3] target/i386: Add nested FRED support Xin Li (Intel)
@ 2024-08-07 8:18 ` Xin Li (Intel)
2024-08-07 14:32 ` Zhao Liu
2024-08-07 8:18 ` [PATCH v1 2/3] target/i386: Add VMX control bits for nested FRED support Xin Li (Intel)
2024-08-07 8:18 ` [PATCH v1 3/3] target/i386: Raise the highest index value used for any VMCS encoding Xin Li (Intel)
2 siblings, 1 reply; 14+ messages in thread
From: Xin Li (Intel) @ 2024-08-07 8:18 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, mtosatti, lei4.wang, zhao1.liu, xin3.li
Macro CR4_FRED_MASK is defined twice, delete one.
Signed-off-by: Xin Li (Intel) <xin@zytor.com>
---
target/i386/cpu.h | 6 ------
1 file changed, 6 deletions(-)
diff --git a/target/i386/cpu.h b/target/i386/cpu.h
index c6cc035df3..118ef9cb68 100644
--- a/target/i386/cpu.h
+++ b/target/i386/cpu.h
@@ -267,12 +267,6 @@ typedef enum X86Seg {
#define CR4_FRED_MASK 0
#endif
-#ifdef TARGET_X86_64
-#define CR4_FRED_MASK (1ULL << 32)
-#else
-#define CR4_FRED_MASK 0
-#endif
-
#define CR4_RESERVED_MASK \
(~(target_ulong)(CR4_VME_MASK | CR4_PVI_MASK | CR4_TSD_MASK \
| CR4_DE_MASK | CR4_PSE_MASK | CR4_PAE_MASK \
--
2.45.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v1 2/3] target/i386: Add VMX control bits for nested FRED support
2024-08-07 8:18 [PATCH v1 0/3] target/i386: Add nested FRED support Xin Li (Intel)
2024-08-07 8:18 ` [PATCH v1 1/3] target/i386: Delete duplicated macro definition CR4_FRED_MASK Xin Li (Intel)
@ 2024-08-07 8:18 ` Xin Li (Intel)
2024-08-07 15:58 ` Zhao Liu
2024-08-07 8:18 ` [PATCH v1 3/3] target/i386: Raise the highest index value used for any VMCS encoding Xin Li (Intel)
2 siblings, 1 reply; 14+ messages in thread
From: Xin Li (Intel) @ 2024-08-07 8:18 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, mtosatti, lei4.wang, zhao1.liu, xin3.li
Add definitions of
1) VM-exit activate secondary controls bit
2) VM-entry load FRED bit
which are required to enable nested FRED.
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Signed-off-by: Xin Li (Intel) <xin@zytor.com>
---
target/i386/cpu.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 85ef7452c0..31f287cae0 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -1435,7 +1435,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
"vmx-exit-save-efer", "vmx-exit-load-efer",
"vmx-exit-save-preemption-timer", "vmx-exit-clear-bndcfgs",
NULL, "vmx-exit-clear-rtit-ctl", NULL, NULL,
- NULL, "vmx-exit-load-pkrs", NULL, NULL,
+ NULL, "vmx-exit-load-pkrs", NULL, "vmx-exit-secondary-ctls",
},
.msr = {
.index = MSR_IA32_VMX_TRUE_EXIT_CTLS,
@@ -1450,7 +1450,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
NULL, "vmx-entry-ia32e-mode", NULL, NULL,
NULL, "vmx-entry-load-perf-global-ctrl", "vmx-entry-load-pat", "vmx-entry-load-efer",
"vmx-entry-load-bndcfgs", NULL, "vmx-entry-load-rtit-ctl", NULL,
- NULL, NULL, "vmx-entry-load-pkrs", NULL,
+ NULL, NULL, "vmx-entry-load-pkrs", "vmx-entry-load-fred",
NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
},
--
2.45.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v1 3/3] target/i386: Raise the highest index value used for any VMCS encoding
2024-08-07 8:18 [PATCH v1 0/3] target/i386: Add nested FRED support Xin Li (Intel)
2024-08-07 8:18 ` [PATCH v1 1/3] target/i386: Delete duplicated macro definition CR4_FRED_MASK Xin Li (Intel)
2024-08-07 8:18 ` [PATCH v1 2/3] target/i386: Add VMX control bits for nested FRED support Xin Li (Intel)
@ 2024-08-07 8:18 ` Xin Li (Intel)
2024-08-07 15:39 ` Zhao Liu
2 siblings, 1 reply; 14+ messages in thread
From: Xin Li (Intel) @ 2024-08-07 8:18 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, mtosatti, lei4.wang, zhao1.liu, xin3.li
From: Lei Wang <lei4.wang@intel.com>
Because the index value of the VMCS field encoding of FRED injected-event
data (one of the newly added VMCS fields for FRED transitions), 0x52, is
larger than any existing index value, raise the highest index value used
for any VMCS encoding to 0x52.
Because the index value of the VMCS field encoding of Secondary VM-exit
controls, 0x44, is larger than any existing index value, raise the highest
index value used for any VMCS encoding to 0x44.
Co-developed-by: Xin Li <xin3.li@intel.com>
Signed-off-by: Xin Li <xin3.li@intel.com>
Signed-off-by: Lei Wang <lei4.wang@intel.com>
Signed-off-by: Xin Li (Intel) <xin@zytor.com>
---
target/i386/cpu.h | 1 +
target/i386/kvm/kvm.c | 9 ++++++++-
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/target/i386/cpu.h b/target/i386/cpu.h
index 118ef9cb68..62324c3dcd 100644
--- a/target/i386/cpu.h
+++ b/target/i386/cpu.h
@@ -1186,6 +1186,7 @@ uint64_t x86_cpu_get_supported_feature_word(X86CPU *cpu, FeatureWord w);
#define VMX_VM_EXIT_PT_CONCEAL_PIP 0x01000000
#define VMX_VM_EXIT_CLEAR_IA32_RTIT_CTL 0x02000000
#define VMX_VM_EXIT_LOAD_IA32_PKRS 0x20000000
+#define VMX_VM_EXIT_ACTIVATE_SECONDARY_CONTROLS 0x80000000
#define VMX_VM_ENTRY_LOAD_DEBUG_CONTROLS 0x00000004
#define VMX_VM_ENTRY_IA32E_MODE 0x00000200
diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c
index 31f149c990..fac5990274 100644
--- a/target/i386/kvm/kvm.c
+++ b/target/i386/kvm/kvm.c
@@ -3694,7 +3694,14 @@ static void kvm_msr_entry_add_vmx(X86CPU *cpu, FeatureWordArray f)
kvm_msr_entry_add(cpu, MSR_IA32_VMX_CR4_FIXED0,
CR4_VMXE_MASK);
- if (f[FEAT_VMX_SECONDARY_CTLS] & VMX_SECONDARY_EXEC_TSC_SCALING) {
+ if (f[FEAT_7_1_EAX] & CPUID_7_1_EAX_FRED) {
+ /* FRED injected-event data (0x2052). */
+ kvm_msr_entry_add(cpu, MSR_IA32_VMX_VMCS_ENUM, 0x52);
+ } else if (f[FEAT_VMX_EXIT_CTLS] &
+ VMX_VM_EXIT_ACTIVATE_SECONDARY_CONTROLS) {
+ /* Secondary VM-exit controls (0x2044). */
+ kvm_msr_entry_add(cpu, MSR_IA32_VMX_VMCS_ENUM, 0x44);
+ } else if (f[FEAT_VMX_SECONDARY_CTLS] & VMX_SECONDARY_EXEC_TSC_SCALING) {
/* TSC multiplier (0x2032). */
kvm_msr_entry_add(cpu, MSR_IA32_VMX_VMCS_ENUM, 0x32);
} else {
--
2.45.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH v1 1/3] target/i386: Delete duplicated macro definition CR4_FRED_MASK
2024-08-07 8:18 ` [PATCH v1 1/3] target/i386: Delete duplicated macro definition CR4_FRED_MASK Xin Li (Intel)
@ 2024-08-07 14:32 ` Zhao Liu
0 siblings, 0 replies; 14+ messages in thread
From: Zhao Liu @ 2024-08-07 14:32 UTC (permalink / raw)
To: Xin Li (Intel); +Cc: qemu-devel, pbonzini, mtosatti, lei4.wang, xin3.li
On Wed, Aug 07, 2024 at 01:18:10AM -0700, Xin Li (Intel) wrote:
> Date: Wed, 7 Aug 2024 01:18:10 -0700
> From: "Xin Li (Intel)" <xin@zytor.com>
> Subject: [PATCH v1 1/3] target/i386: Delete duplicated macro definition
> CR4_FRED_MASK
> X-Mailer: git-send-email 2.45.2
>
> Macro CR4_FRED_MASK is defined twice, delete one.
>
> Signed-off-by: Xin Li (Intel) <xin@zytor.com>
> ---
> target/i386/cpu.h | 6 ------
> 1 file changed, 6 deletions(-)
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v1 3/3] target/i386: Raise the highest index value used for any VMCS encoding
2024-08-07 8:18 ` [PATCH v1 3/3] target/i386: Raise the highest index value used for any VMCS encoding Xin Li (Intel)
@ 2024-08-07 15:39 ` Zhao Liu
2024-08-09 6:27 ` Xin Li
0 siblings, 1 reply; 14+ messages in thread
From: Zhao Liu @ 2024-08-07 15:39 UTC (permalink / raw)
To: Xin Li (Intel); +Cc: qemu-devel, pbonzini, mtosatti, lei4.wang, xin3.li
Hi Xin,
On Wed, Aug 07, 2024 at 01:18:12AM -0700, Xin Li (Intel) wrote:
> Date: Wed, 7 Aug 2024 01:18:12 -0700
> From: "Xin Li (Intel)" <xin@zytor.com>
> Subject: [PATCH v1 3/3] target/i386: Raise the highest index value used for
> any VMCS encoding
> X-Mailer: git-send-email 2.45.2
>
> From: Lei Wang <lei4.wang@intel.com>
>
> Because the index value of the VMCS field encoding of FRED injected-event
> data (one of the newly added VMCS fields for FRED transitions), 0x52, is
> larger than any existing index value, raise the highest index value used
> for any VMCS encoding to 0x52.
>
> Because the index value of the VMCS field encoding of Secondary VM-exit
> controls, 0x44, is larger than any existing index value, raise the highest
> index value used for any VMCS encoding to 0x44.
>
> Co-developed-by: Xin Li <xin3.li@intel.com>
> Signed-off-by: Xin Li <xin3.li@intel.com>
> Signed-off-by: Lei Wang <lei4.wang@intel.com>
> Signed-off-by: Xin Li (Intel) <xin@zytor.com>
> ---
> target/i386/cpu.h | 1 +
> target/i386/kvm/kvm.c | 9 ++++++++-
> 2 files changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/target/i386/cpu.h b/target/i386/cpu.h
> index 118ef9cb68..62324c3dcd 100644
> --- a/target/i386/cpu.h
> +++ b/target/i386/cpu.h
> @@ -1186,6 +1186,7 @@ uint64_t x86_cpu_get_supported_feature_word(X86CPU *cpu, FeatureWord w);
> #define VMX_VM_EXIT_PT_CONCEAL_PIP 0x01000000
> #define VMX_VM_EXIT_CLEAR_IA32_RTIT_CTL 0x02000000
> #define VMX_VM_EXIT_LOAD_IA32_PKRS 0x20000000
> +#define VMX_VM_EXIT_ACTIVATE_SECONDARY_CONTROLS 0x80000000
It's necessary to add the corresponding feat_name to FEAT_VMX_EXIT_CTLS
feat word array, which could help filter the user's settings in the -cpu.
> #define VMX_VM_ENTRY_LOAD_DEBUG_CONTROLS 0x00000004
> #define VMX_VM_ENTRY_IA32E_MODE 0x00000200
> diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c
> index 31f149c990..fac5990274 100644
> --- a/target/i386/kvm/kvm.c
> +++ b/target/i386/kvm/kvm.c
> @@ -3694,7 +3694,14 @@ static void kvm_msr_entry_add_vmx(X86CPU *cpu, FeatureWordArray f)
> kvm_msr_entry_add(cpu, MSR_IA32_VMX_CR4_FIXED0,
> CR4_VMXE_MASK);
>
> - if (f[FEAT_VMX_SECONDARY_CTLS] & VMX_SECONDARY_EXEC_TSC_SCALING) {
> + if (f[FEAT_7_1_EAX] & CPUID_7_1_EAX_FRED) {
> + /* FRED injected-event data (0x2052). */
> + kvm_msr_entry_add(cpu, MSR_IA32_VMX_VMCS_ENUM, 0x52);
HMM, I have the questions when I check the FRED spec.
Section 9.3.4 said, (for injected-event data) "This field has uses the
encoding pair 2052H/2053H."
So why adjust the highest index to 0x52 other than 0x53?
And it seems FRED introduces another field "original-event data"
(0x2404/0x2405), why not consider this field here as well?
> + } else if (f[FEAT_VMX_EXIT_CTLS] &
> + VMX_VM_EXIT_ACTIVATE_SECONDARY_CONTROLS) {
> + /* Secondary VM-exit controls (0x2044). */
> + kvm_msr_entry_add(cpu, MSR_IA32_VMX_VMCS_ENUM, 0x44);
> + } else if (f[FEAT_VMX_SECONDARY_CTLS] & VMX_SECONDARY_EXEC_TSC_SCALING) {
> /* TSC multiplier (0x2032). */
> kvm_msr_entry_add(cpu, MSR_IA32_VMX_VMCS_ENUM, 0x32);
> } else {
Maybe we could adjust the index in a cleaner way like
x86_cpu_adjust_level(), but the current case-by-case is ok for me as
well.
Regards,
Zhao
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v1 2/3] target/i386: Add VMX control bits for nested FRED support
2024-08-07 8:18 ` [PATCH v1 2/3] target/i386: Add VMX control bits for nested FRED support Xin Li (Intel)
@ 2024-08-07 15:58 ` Zhao Liu
2024-08-08 7:04 ` Xin Li
0 siblings, 1 reply; 14+ messages in thread
From: Zhao Liu @ 2024-08-07 15:58 UTC (permalink / raw)
To: Xin Li (Intel); +Cc: qemu-devel, pbonzini, mtosatti, lei4.wang, xin3.li
Hi Xin,
On Wed, Aug 07, 2024 at 01:18:11AM -0700, Xin Li (Intel) wrote:
> Date: Wed, 7 Aug 2024 01:18:11 -0700
> From: "Xin Li (Intel)" <xin@zytor.com>
> Subject: [PATCH v1 2/3] target/i386: Add VMX control bits for nested FRED
> support
> X-Mailer: git-send-email 2.45.2
>
> Add definitions of
> 1) VM-exit activate secondary controls bit
> 2) VM-entry load FRED bit
> which are required to enable nested FRED.
>
> Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
> Signed-off-by: Xin Li (Intel) <xin@zytor.com>
> ---
> target/i386/cpu.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/target/i386/cpu.c b/target/i386/cpu.c
> index 85ef7452c0..31f287cae0 100644
> --- a/target/i386/cpu.c
> +++ b/target/i386/cpu.c
> @@ -1435,7 +1435,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
> "vmx-exit-save-efer", "vmx-exit-load-efer",
> "vmx-exit-save-preemption-timer", "vmx-exit-clear-bndcfgs",
> NULL, "vmx-exit-clear-rtit-ctl", NULL, NULL,
> - NULL, "vmx-exit-load-pkrs", NULL, NULL,
> + NULL, "vmx-exit-load-pkrs", NULL, "vmx-exit-secondary-ctls",
Oh, the order of my reviews is mixed up.
It's better to move VMX_VM_EXIT_ACTIVATE_SECONDARY_CONTROLS into this patch.
> },
> .msr = {
> .index = MSR_IA32_VMX_TRUE_EXIT_CTLS,
> @@ -1450,7 +1450,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
> NULL, "vmx-entry-ia32e-mode", NULL, NULL,
> NULL, "vmx-entry-load-perf-global-ctrl", "vmx-entry-load-pat", "vmx-entry-load-efer",
> "vmx-entry-load-bndcfgs", NULL, "vmx-entry-load-rtit-ctl", NULL,
> - NULL, NULL, "vmx-entry-load-pkrs", NULL,
> + NULL, NULL, "vmx-entry-load-pkrs", "vmx-entry-load-fred",
Should we also define VMX_VM_ENTRY_LOAD_FRED? "vmx-entry-load-rtit-ctl"
and "vmx-entry-load-pkrs" have their corresponding bit definitions, even
if they are not used.
Regards,
Zhao
> NULL, NULL, NULL, NULL,
> NULL, NULL, NULL, NULL,
> },
> --
> 2.45.2
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v1 2/3] target/i386: Add VMX control bits for nested FRED support
2024-08-07 15:58 ` Zhao Liu
@ 2024-08-08 7:04 ` Xin Li
2024-08-08 9:40 ` Zhao Liu
0 siblings, 1 reply; 14+ messages in thread
From: Xin Li @ 2024-08-08 7:04 UTC (permalink / raw)
To: qemu-devel
On 8/7/2024 8:58 AM, Zhao Liu wrote:
> On Wed, Aug 07, 2024 at 01:18:11AM -0700, Xin Li (Intel) wrote:
>> @@ -1435,7 +1435,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
>> "vmx-exit-save-efer", "vmx-exit-load-efer",
>> "vmx-exit-save-preemption-timer", "vmx-exit-clear-bndcfgs",
>> NULL, "vmx-exit-clear-rtit-ctl", NULL, NULL,
>> - NULL, "vmx-exit-load-pkrs", NULL, NULL,
>> + NULL, "vmx-exit-load-pkrs", NULL, "vmx-exit-secondary-ctls",
>
> Oh, the order of my reviews is mixed up.
> It's better to move VMX_VM_EXIT_ACTIVATE_SECONDARY_CONTROLS into this patch.
Usually a simple definition is added in a patch where it is used, not in
qemu?
>> },
>> .msr = {
>> .index = MSR_IA32_VMX_TRUE_EXIT_CTLS,
>> @@ -1450,7 +1450,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
>> NULL, "vmx-entry-ia32e-mode", NULL, NULL,
>> NULL, "vmx-entry-load-perf-global-ctrl", "vmx-entry-load-pat", "vmx-entry-load-efer",
>> "vmx-entry-load-bndcfgs", NULL, "vmx-entry-load-rtit-ctl", NULL,
>> - NULL, NULL, "vmx-entry-load-pkrs", NULL,
>> + NULL, NULL, "vmx-entry-load-pkrs", "vmx-entry-load-fred",
>
> Should we also define VMX_VM_ENTRY_LOAD_FRED? "vmx-entry-load-rtit-ctl"
> and "vmx-entry-load-pkrs" have their corresponding bit definitions, even
> if they are not used.
I'm not sure, but why add something that is not being used (thus not
tested)?
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v1 2/3] target/i386: Add VMX control bits for nested FRED support
2024-08-08 7:04 ` Xin Li
@ 2024-08-08 9:40 ` Zhao Liu
2024-08-09 6:38 ` Xin Li
0 siblings, 1 reply; 14+ messages in thread
From: Zhao Liu @ 2024-08-08 9:40 UTC (permalink / raw)
To: Xin Li; +Cc: qemu-devel
Hi Xin,
On Thu, Aug 08, 2024 at 12:04:42AM -0700, Xin Li wrote:
> Date: Thu, 8 Aug 2024 00:04:42 -0700
> From: Xin Li <xin@zytor.com>
> Subject: Re: [PATCH v1 2/3] target/i386: Add VMX control bits for nested
> FRED support
>
> On 8/7/2024 8:58 AM, Zhao Liu wrote:
> > On Wed, Aug 07, 2024 at 01:18:11AM -0700, Xin Li (Intel) wrote:
> > > @@ -1435,7 +1435,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
> > > "vmx-exit-save-efer", "vmx-exit-load-efer",
> > > "vmx-exit-save-preemption-timer", "vmx-exit-clear-bndcfgs",
> > > NULL, "vmx-exit-clear-rtit-ctl", NULL, NULL,
> > > - NULL, "vmx-exit-load-pkrs", NULL, NULL,
> > > + NULL, "vmx-exit-load-pkrs", NULL, "vmx-exit-secondary-ctls",
> >
> > Oh, the order of my reviews is mixed up.
> > It's better to move VMX_VM_EXIT_ACTIVATE_SECONDARY_CONTROLS into this patch.
>
> Usually a simple definition is added in a patch where it is used, not in
> qemu?
>
> > > },
> > > .msr = {
> > > .index = MSR_IA32_VMX_TRUE_EXIT_CTLS,
> > > @@ -1450,7 +1450,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
> > > NULL, "vmx-entry-ia32e-mode", NULL, NULL,
> > > NULL, "vmx-entry-load-perf-global-ctrl", "vmx-entry-load-pat", "vmx-entry-load-efer",
> > > "vmx-entry-load-bndcfgs", NULL, "vmx-entry-load-rtit-ctl", NULL,
> > > - NULL, NULL, "vmx-entry-load-pkrs", NULL,
> > > + NULL, NULL, "vmx-entry-load-pkrs", "vmx-entry-load-fred",
> >
> > Should we also define VMX_VM_ENTRY_LOAD_FRED? "vmx-entry-load-rtit-ctl"
> > and "vmx-entry-load-pkrs" have their corresponding bit definitions, even
> > if they are not used.
>
> I'm not sure, but why add something that is not being used (thus not
> tested)?
Yes, the use of macros is a factor. My another consideration is the
integrity of the feature definitions. When the such feature definitions
were first introduced in commit 704798add83b (”target/i386: add VMX
definitions”), I understand thay were mainly used to enumerate and
reflect hardware support and not all defs are used directly.
The feat word name and the feature definition should essentially be
bound, and it might be possible to generate the feature definition
from the feat word via some script without having to add it manually,
but right now there is no work on this, and no additional constraints,
so we have to manually add and manually check it to make sure that the
two correspond to each other. When a feature word is added, it means
that Host supports the corresponding feature, and from an integrity
perspective, so it is natural to continue adding definition (just like
the commit 52a44ad2b92b ("target/i386: Expose VMX entry/exit load pkrs
control bits")), right?
Though I found that there are still some mismatches between the feature
word and the corresponding definition, but ideally they should coexist.
About the test, if it's just enumerated and not added to a specific CPU
model or involved by other logic, it's harmless?
Thanks,
Zhao
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v1 3/3] target/i386: Raise the highest index value used for any VMCS encoding
2024-08-07 15:39 ` Zhao Liu
@ 2024-08-09 6:27 ` Xin Li
2024-08-09 7:38 ` Xin Li
0 siblings, 1 reply; 14+ messages in thread
From: Xin Li @ 2024-08-09 6:27 UTC (permalink / raw)
To: Zhao Liu; +Cc: qemu-devel, pbonzini, mtosatti, lei4.wang, xin3.li
>> + if (f[FEAT_7_1_EAX] & CPUID_7_1_EAX_FRED) {
>> + /* FRED injected-event data (0x2052). */
>> + kvm_msr_entry_add(cpu, MSR_IA32_VMX_VMCS_ENUM, 0x52);
>
> HMM, I have the questions when I check the FRED spec.
>
> Section 9.3.4 said, (for injected-event data) "This field has uses the
> encoding pair 2052H/2053H."
>
> So why adjust the highest index to 0x52 other than 0x53?
For 16-bit, 32-bit, and natural-width fields, they must be read/write
as a whole, thus the lowest bit of their encoding must be 0.
A 64-bit VMCS field can be accessed as two 32-bit fields, with the
higher order half using an odd VMCS encoding. But conceptually they
should be treated as a whole 64-bit field.
Better to refer to Intel SDM 25.11.2 VMREAD, VMWRITE, and Encodings of
VMCS Fields.
>
> And it seems FRED introduces another field "original-event data"
> (0x2404/0x2405), why not consider this field here as well?
>
>> + } else if (f[FEAT_VMX_EXIT_CTLS] &
>> + VMX_VM_EXIT_ACTIVATE_SECONDARY_CONTROLS) {
>> + /* Secondary VM-exit controls (0x2044). */
>> + kvm_msr_entry_add(cpu, MSR_IA32_VMX_VMCS_ENUM, 0x44);
>> + } else if (f[FEAT_VMX_SECONDARY_CTLS] & VMX_SECONDARY_EXEC_TSC_SCALING) {
>> /* TSC multiplier (0x2032). */
>> kvm_msr_entry_add(cpu, MSR_IA32_VMX_VMCS_ENUM, 0x32);
>> } else {
>
> Maybe we could adjust the index in a cleaner way like
> x86_cpu_adjust_level(), but the current case-by-case is ok for me as
> well.
Yeah, that sounds a good idea. But the code hasn't gone wild...
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v1 2/3] target/i386: Add VMX control bits for nested FRED support
2024-08-08 9:40 ` Zhao Liu
@ 2024-08-09 6:38 ` Xin Li
2024-08-09 9:02 ` Zhao Liu
0 siblings, 1 reply; 14+ messages in thread
From: Xin Li @ 2024-08-09 6:38 UTC (permalink / raw)
To: Zhao Liu; +Cc: qemu-devel
>>>> @@ -1450,7 +1450,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
>>>> NULL, "vmx-entry-ia32e-mode", NULL, NULL,
>>>> NULL, "vmx-entry-load-perf-global-ctrl", "vmx-entry-load-pat", "vmx-entry-load-efer",
>>>> "vmx-entry-load-bndcfgs", NULL, "vmx-entry-load-rtit-ctl", NULL,
>>>> - NULL, NULL, "vmx-entry-load-pkrs", NULL,
>>>> + NULL, NULL, "vmx-entry-load-pkrs", "vmx-entry-load-fred",
>>>
>>> Should we also define VMX_VM_ENTRY_LOAD_FRED? "vmx-entry-load-rtit-ctl"
>>> and "vmx-entry-load-pkrs" have their corresponding bit definitions, even
>>> if they are not used.
>>
>> I'm not sure, but why add something that is not being used (thus not
>> tested)?
>
> Yes, the use of macros is a factor. My another consideration is the
> integrity of the feature definitions. When the such feature definitions
> were first introduced in commit 704798add83b (”target/i386: add VMX
> definitions”), I understand thay were mainly used to enumerate and
> reflect hardware support and not all defs are used directly.
>
> The feat word name and the feature definition should essentially be
> bound, and it might be possible to generate the feature definition
> from the feat word via some script without having to add it manually,
> but right now there is no work on this, and no additional constraints,
> so we have to manually add and manually check it to make sure that the
> two correspond to each other. When a feature word is added, it means
> that Host supports the corresponding feature, and from an integrity
> perspective, so it is natural to continue adding definition (just like
> the commit 52a44ad2b92b ("target/i386: Expose VMX entry/exit load pkrs
> control bits")), right?
>
> Though I found that there are still some mismatches between the feature
> word and the corresponding definition, but ideally they should coexist.
>
> About the test, if it's just enumerated and not added to a specific CPU
> model or involved by other logic, it's harmless?
Unless tests are ready, such code are literally dead code, and could get
broken w/o being noticed for a long time.
I think we should add it only when tests are also added. Otherwise we
added burden to maintainers, hoping test will be added soon, which often
never happen.
>
> Thanks,
> Zhao
>
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v1 3/3] target/i386: Raise the highest index value used for any VMCS encoding
2024-08-09 6:27 ` Xin Li
@ 2024-08-09 7:38 ` Xin Li
2024-08-09 9:01 ` Zhao Liu
0 siblings, 1 reply; 14+ messages in thread
From: Xin Li @ 2024-08-09 7:38 UTC (permalink / raw)
To: Zhao Liu; +Cc: qemu-devel, pbonzini, mtosatti, lei4.wang, xin3.li
On 8/8/2024 11:27 PM, Xin Li wrote:
>>> + if (f[FEAT_7_1_EAX] & CPUID_7_1_EAX_FRED) {
>>> + /* FRED injected-event data (0x2052). */
>>> + kvm_msr_entry_add(cpu, MSR_IA32_VMX_VMCS_ENUM, 0x52);
>>
>> HMM, I have the questions when I check the FRED spec.
>>
>> Section 9.3.4 said, (for injected-event data) "This field has uses the
>> encoding pair 2052H/2053H."
>>
>> So why adjust the highest index to 0x52 other than 0x53?
Okay, found it in the Intel SDM:
Index. Bits 9:1 distinguish components with the same field width and type.
Bit 0 is not included in the index field.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v1 3/3] target/i386: Raise the highest index value used for any VMCS encoding
2024-08-09 7:38 ` Xin Li
@ 2024-08-09 9:01 ` Zhao Liu
0 siblings, 0 replies; 14+ messages in thread
From: Zhao Liu @ 2024-08-09 9:01 UTC (permalink / raw)
To: Xin Li; +Cc: qemu-devel, pbonzini, mtosatti, lei4.wang, xin3.li
On Fri, Aug 09, 2024 at 12:38:02AM -0700, Xin Li wrote:
> Date: Fri, 9 Aug 2024 00:38:02 -0700
> From: Xin Li <xin@zytor.com>
> Subject: Re: [PATCH v1 3/3] target/i386: Raise the highest index value used
> for any VMCS encoding
>
> On 8/8/2024 11:27 PM, Xin Li wrote:
> > > > + if (f[FEAT_7_1_EAX] & CPUID_7_1_EAX_FRED) {
> > > > + /* FRED injected-event data (0x2052). */
> > > > + kvm_msr_entry_add(cpu, MSR_IA32_VMX_VMCS_ENUM, 0x52);
> > >
> > > HMM, I have the questions when I check the FRED spec.
> > >
> > > Section 9.3.4 said, (for injected-event data) "This field has uses the
> > > encoding pair 2052H/2053H."
> > >
> > > So why adjust the highest index to 0x52 other than 0x53?
>
> Okay, found it in the Intel SDM:
>
> Index. Bits 9:1 distinguish components with the same field width and type.
>
> Bit 0 is not included in the index field.
Thanks for your education and explanation! I see, for
IA32_VMX_VMCS_ENUM, bit 0 is reserved and only index field is enough.
Regards,
Zhao
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v1 2/3] target/i386: Add VMX control bits for nested FRED support
2024-08-09 6:38 ` Xin Li
@ 2024-08-09 9:02 ` Zhao Liu
0 siblings, 0 replies; 14+ messages in thread
From: Zhao Liu @ 2024-08-09 9:02 UTC (permalink / raw)
To: Xin Li; +Cc: qemu-devel
On Thu, Aug 08, 2024 at 11:38:11PM -0700, Xin Li wrote:
> Date: Thu, 8 Aug 2024 23:38:11 -0700
> From: Xin Li <xin@zytor.com>
> Subject: Re: [PATCH v1 2/3] target/i386: Add VMX control bits for nested
> FRED support
>
> > > > > @@ -1450,7 +1450,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
> > > > > NULL, "vmx-entry-ia32e-mode", NULL, NULL,
> > > > > NULL, "vmx-entry-load-perf-global-ctrl", "vmx-entry-load-pat", "vmx-entry-load-efer",
> > > > > "vmx-entry-load-bndcfgs", NULL, "vmx-entry-load-rtit-ctl", NULL,
> > > > > - NULL, NULL, "vmx-entry-load-pkrs", NULL,
> > > > > + NULL, NULL, "vmx-entry-load-pkrs", "vmx-entry-load-fred",
> > > >
> > > > Should we also define VMX_VM_ENTRY_LOAD_FRED? "vmx-entry-load-rtit-ctl"
> > > > and "vmx-entry-load-pkrs" have their corresponding bit definitions, even
> > > > if they are not used.
> > >
> > > I'm not sure, but why add something that is not being used (thus not
> > > tested)?
> >
> > Yes, the use of macros is a factor. My another consideration is the
> > integrity of the feature definitions. When the such feature definitions
> > were first introduced in commit 704798add83b (”target/i386: add VMX
> > definitions”), I understand thay were mainly used to enumerate and
> > reflect hardware support and not all defs are used directly.
> >
> > The feat word name and the feature definition should essentially be
> > bound, and it might be possible to generate the feature definition
> > from the feat word via some script without having to add it manually,
> > but right now there is no work on this, and no additional constraints,
> > so we have to manually add and manually check it to make sure that the
> > two correspond to each other. When a feature word is added, it means
> > that Host supports the corresponding feature, and from an integrity
> > perspective, so it is natural to continue adding definition (just like
> > the commit 52a44ad2b92b ("target/i386: Expose VMX entry/exit load pkrs
> > control bits")), right?
> >
> > Though I found that there are still some mismatches between the feature
> > word and the corresponding definition, but ideally they should coexist.
> >
> > About the test, if it's just enumerated and not added to a specific CPU
> > model or involved by other logic, it's harmless?
>
> Unless tests are ready, such code are literally dead code, and could get
> broken w/o being noticed for a long time.
>
> I think we should add it only when tests are also added. Otherwise we added
> burden to maintainers, hoping test will be added soon, which often
> never happen.
It makes sense and can reduce the burden on maintainers. Now I totally
agree with you.
Thanks,
Zhao
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2024-08-09 8:47 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-07 8:18 [PATCH v1 0/3] target/i386: Add nested FRED support Xin Li (Intel)
2024-08-07 8:18 ` [PATCH v1 1/3] target/i386: Delete duplicated macro definition CR4_FRED_MASK Xin Li (Intel)
2024-08-07 14:32 ` Zhao Liu
2024-08-07 8:18 ` [PATCH v1 2/3] target/i386: Add VMX control bits for nested FRED support Xin Li (Intel)
2024-08-07 15:58 ` Zhao Liu
2024-08-08 7:04 ` Xin Li
2024-08-08 9:40 ` Zhao Liu
2024-08-09 6:38 ` Xin Li
2024-08-09 9:02 ` Zhao Liu
2024-08-07 8:18 ` [PATCH v1 3/3] target/i386: Raise the highest index value used for any VMCS encoding Xin Li (Intel)
2024-08-07 15:39 ` Zhao Liu
2024-08-09 6:27 ` Xin Li
2024-08-09 7:38 ` Xin Li
2024-08-09 9:01 ` Zhao Liu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).