* [PATCH v4 0/2] Add support for LAM in QEMU
@ 2024-01-12 6:00 Binbin Wu
2024-01-12 6:00 ` [PATCH v4 1/2] target/i386: add support for LAM in CPUID enumeration Binbin Wu
` (4 more replies)
0 siblings, 5 replies; 11+ messages in thread
From: Binbin Wu @ 2024-01-12 6:00 UTC (permalink / raw)
To: qemu-devel, kvm; +Cc: pbonzini, xiaoyao.li, chao.gao, robert.hu, binbin.wu
Linear-address masking (LAM) [1], modifies the checking that is applied to
*64-bit* linear addresses, allowing software to use of the untranslated
address bits for metadata and masks the metadata bits before using them as
linear addresses to access memory.
When the feature is virtualized and exposed to guest, it can be used for
efficient
address sanitizers (ASAN) implementation and for optimizations in JITs and
virtual machines.
The KVM patch series can be found in [2].
[1] Intel ISE https://cdrdv2.intel.com/v1/dl/getContent/671368
Chapter Linear Address Masking (LAM)
[2] https://lore.kernel.org/kvm/20230913124227.12574-1-binbin.wu@linux.intel.com
---
Changelog
v4:
- Add a reviewed-by from Xiaoyao for patch 1.
- Mask out LAM bit on CR4 if vcpu doesn't support LAM in cpu_x86_update_cr4() (Xiaoyao)
v3:
- https://lists.gnu.org/archive/html/qemu-devel/2023-07/msg04160.html
Binbin Wu (1):
target/i386: add control bits support for LAM
Robert Hoo (1):
target/i386: add support for LAM in CPUID enumeration
target/i386/cpu.c | 2 +-
target/i386/cpu.h | 9 ++++++++-
target/i386/helper.c | 4 ++++
3 files changed, 13 insertions(+), 2 deletions(-)
base-commit: f614acb7450282a119d85d759f27eae190476058
--
2.25.1
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v4 1/2] target/i386: add support for LAM in CPUID enumeration
2024-01-12 6:00 [PATCH v4 0/2] Add support for LAM in QEMU Binbin Wu
@ 2024-01-12 6:00 ` Binbin Wu
2024-02-23 3:12 ` Zhao Liu
2024-01-12 6:00 ` [PATCH v4 2/2] target/i386: add control bits support for LAM Binbin Wu
` (3 subsequent siblings)
4 siblings, 1 reply; 11+ messages in thread
From: Binbin Wu @ 2024-01-12 6:00 UTC (permalink / raw)
To: qemu-devel, kvm; +Cc: pbonzini, xiaoyao.li, chao.gao, robert.hu, binbin.wu
From: Robert Hoo <robert.hu@linux.intel.com>
Linear Address Masking (LAM) is a new Intel CPU feature, which allows
software to use of the untranslated address bits for metadata.
The bit definition:
CPUID.(EAX=7,ECX=1):EAX[26]
Add CPUID definition for LAM.
Note LAM feature is not supported for TCG of target-i386, LAM CPIUD bit
will not be added to TCG_7_1_EAX_FEATURES.
More info can be found in Intel ISE Chapter "LINEAR ADDRESS MASKING(LAM)"
https://cdrdv2.intel.com/v1/dl/getContent/671368
Signed-off-by: Robert Hoo <robert.hu@linux.intel.com>
Co-developed-by: Binbin Wu <binbin.wu@linux.intel.com>
Signed-off-by: Binbin Wu <binbin.wu@linux.intel.com>
Tested-by: Xuelian Guo <xuelian.guo@intel.com>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
---
target/i386/cpu.c | 2 +-
target/i386/cpu.h | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 2524881ce2..fc862dfeb1 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -967,7 +967,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
"fsrc", NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
NULL, "amx-fp16", NULL, "avx-ifma",
- NULL, NULL, NULL, NULL,
+ NULL, NULL, "lam", NULL,
NULL, NULL, NULL, NULL,
},
.cpuid = {
diff --git a/target/i386/cpu.h b/target/i386/cpu.h
index 7f0786e8b9..18ea755644 100644
--- a/target/i386/cpu.h
+++ b/target/i386/cpu.h
@@ -925,6 +925,8 @@ uint64_t x86_cpu_get_supported_feature_word(FeatureWord w,
#define CPUID_7_1_EAX_AMX_FP16 (1U << 21)
/* Support for VPMADD52[H,L]UQ */
#define CPUID_7_1_EAX_AVX_IFMA (1U << 23)
+/* Linear Address Masking */
+#define CPUID_7_1_EAX_LAM (1U << 26)
/* Support for VPDPB[SU,UU,SS]D[,S] */
#define CPUID_7_1_EDX_AVX_VNNI_INT8 (1U << 4)
--
2.25.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v4 2/2] target/i386: add control bits support for LAM
2024-01-12 6:00 [PATCH v4 0/2] Add support for LAM in QEMU Binbin Wu
2024-01-12 6:00 ` [PATCH v4 1/2] target/i386: add support for LAM in CPUID enumeration Binbin Wu
@ 2024-01-12 6:00 ` Binbin Wu
2024-01-14 12:09 ` Xiaoyao Li
2024-02-23 3:35 ` Zhao Liu
2024-01-22 8:55 ` [PATCH v4 0/2] Add support for LAM in QEMU Binbin Wu
` (2 subsequent siblings)
4 siblings, 2 replies; 11+ messages in thread
From: Binbin Wu @ 2024-01-12 6:00 UTC (permalink / raw)
To: qemu-devel, kvm; +Cc: pbonzini, xiaoyao.li, chao.gao, robert.hu, binbin.wu
LAM uses CR3[61] and CR3[62] to configure/enable LAM on user pointers.
LAM uses CR4[28] to configure/enable LAM on supervisor pointers.
For CR3 LAM bits, no additional handling needed:
- TCG
LAM is not supported for TCG of target-i386. helper_write_crN() and
helper_vmrun() check max physical address bits before calling
cpu_x86_update_cr3(), no change needed, i.e. CR3 LAM bits are not allowed
to be set in TCG.
- gdbstub
x86_cpu_gdb_write_register() will call cpu_x86_update_cr3() to update cr3.
Allow gdb to set the LAM bit(s) to CR3, if vcpu doesn't support LAM,
KVM_SET_SREGS will fail as other reserved bits.
For CR4 LAM bit, its reservation depends on vcpu supporting LAM feature or
not.
- TCG
LAM is not supported for TCG of target-i386. helper_write_crN() and
helper_vmrun() check CR4 reserved bit before calling cpu_x86_update_cr4(),
i.e. CR4 LAM bit is not allowed to be set in TCG.
- gdbstub
x86_cpu_gdb_write_register() will call cpu_x86_update_cr4() to update cr4.
Mask out LAM bit on CR4 if vcpu doesn't support LAM.
- x86_cpu_reset_hold() doesn't need special handling.
Signed-off-by: Binbin Wu <binbin.wu@linux.intel.com>
Tested-by: Xuelian Guo <xuelian.guo@intel.com>
---
target/i386/cpu.h | 7 ++++++-
target/i386/helper.c | 4 ++++
2 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/target/i386/cpu.h b/target/i386/cpu.h
index 18ea755644..598a3fa140 100644
--- a/target/i386/cpu.h
+++ b/target/i386/cpu.h
@@ -261,6 +261,7 @@ typedef enum X86Seg {
#define CR4_SMAP_MASK (1U << 21)
#define CR4_PKE_MASK (1U << 22)
#define CR4_PKS_MASK (1U << 24)
+#define CR4_LAM_SUP_MASK (1U << 28)
#define CR4_RESERVED_MASK \
(~(target_ulong)(CR4_VME_MASK | CR4_PVI_MASK | CR4_TSD_MASK \
@@ -269,7 +270,8 @@ typedef enum X86Seg {
| CR4_OSFXSR_MASK | CR4_OSXMMEXCPT_MASK | CR4_UMIP_MASK \
| CR4_LA57_MASK \
| CR4_FSGSBASE_MASK | CR4_PCIDE_MASK | CR4_OSXSAVE_MASK \
- | CR4_SMEP_MASK | CR4_SMAP_MASK | CR4_PKE_MASK | CR4_PKS_MASK))
+ | CR4_SMEP_MASK | CR4_SMAP_MASK | CR4_PKE_MASK | CR4_PKS_MASK \
+ | CR4_LAM_SUP_MASK))
#define DR6_BD (1 << 13)
#define DR6_BS (1 << 14)
@@ -2522,6 +2524,9 @@ static inline uint64_t cr4_reserved_bits(CPUX86State *env)
if (!(env->features[FEAT_7_0_ECX] & CPUID_7_0_ECX_PKS)) {
reserved_bits |= CR4_PKS_MASK;
}
+ if (!(env->features[FEAT_7_1_EAX] & CPUID_7_1_EAX_LAM)) {
+ reserved_bits |= CR4_LAM_SUP_MASK;
+ }
return reserved_bits;
}
diff --git a/target/i386/helper.c b/target/i386/helper.c
index 2070dd0dda..1da7a7d315 100644
--- a/target/i386/helper.c
+++ b/target/i386/helper.c
@@ -219,6 +219,10 @@ void cpu_x86_update_cr4(CPUX86State *env, uint32_t new_cr4)
new_cr4 &= ~CR4_PKS_MASK;
}
+ if (!(env->features[FEAT_7_1_EAX] & CPUID_7_1_EAX_LAM)) {
+ new_cr4 &= ~CR4_LAM_SUP_MASK;
+ }
+
env->cr[4] = new_cr4;
env->hflags = hflags;
--
2.25.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH v4 2/2] target/i386: add control bits support for LAM
2024-01-12 6:00 ` [PATCH v4 2/2] target/i386: add control bits support for LAM Binbin Wu
@ 2024-01-14 12:09 ` Xiaoyao Li
2024-02-23 3:35 ` Zhao Liu
1 sibling, 0 replies; 11+ messages in thread
From: Xiaoyao Li @ 2024-01-14 12:09 UTC (permalink / raw)
To: Binbin Wu, qemu-devel, kvm; +Cc: pbonzini, chao.gao, robert.hu
On 1/12/2024 2:00 PM, Binbin Wu wrote:
> LAM uses CR3[61] and CR3[62] to configure/enable LAM on user pointers.
> LAM uses CR4[28] to configure/enable LAM on supervisor pointers.
>
> For CR3 LAM bits, no additional handling needed:
> - TCG
> LAM is not supported for TCG of target-i386. helper_write_crN() and
> helper_vmrun() check max physical address bits before calling
> cpu_x86_update_cr3(), no change needed, i.e. CR3 LAM bits are not allowed
> to be set in TCG.
> - gdbstub
> x86_cpu_gdb_write_register() will call cpu_x86_update_cr3() to update cr3.
> Allow gdb to set the LAM bit(s) to CR3, if vcpu doesn't support LAM,
> KVM_SET_SREGS will fail as other reserved bits.
>
> For CR4 LAM bit, its reservation depends on vcpu supporting LAM feature or
> not.
> - TCG
> LAM is not supported for TCG of target-i386. helper_write_crN() and
> helper_vmrun() check CR4 reserved bit before calling cpu_x86_update_cr4(),
> i.e. CR4 LAM bit is not allowed to be set in TCG.
> - gdbstub
> x86_cpu_gdb_write_register() will call cpu_x86_update_cr4() to update cr4.
> Mask out LAM bit on CR4 if vcpu doesn't support LAM.
> - x86_cpu_reset_hold() doesn't need special handling.
>
> Signed-off-by: Binbin Wu <binbin.wu@linux.intel.com>
> Tested-by: Xuelian Guo <xuelian.guo@intel.com>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
> ---
> target/i386/cpu.h | 7 ++++++-
> target/i386/helper.c | 4 ++++
> 2 files changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/target/i386/cpu.h b/target/i386/cpu.h
> index 18ea755644..598a3fa140 100644
> --- a/target/i386/cpu.h
> +++ b/target/i386/cpu.h
> @@ -261,6 +261,7 @@ typedef enum X86Seg {
> #define CR4_SMAP_MASK (1U << 21)
> #define CR4_PKE_MASK (1U << 22)
> #define CR4_PKS_MASK (1U << 24)
> +#define CR4_LAM_SUP_MASK (1U << 28)
>
> #define CR4_RESERVED_MASK \
> (~(target_ulong)(CR4_VME_MASK | CR4_PVI_MASK | CR4_TSD_MASK \
> @@ -269,7 +270,8 @@ typedef enum X86Seg {
> | CR4_OSFXSR_MASK | CR4_OSXMMEXCPT_MASK | CR4_UMIP_MASK \
> | CR4_LA57_MASK \
> | CR4_FSGSBASE_MASK | CR4_PCIDE_MASK | CR4_OSXSAVE_MASK \
> - | CR4_SMEP_MASK | CR4_SMAP_MASK | CR4_PKE_MASK | CR4_PKS_MASK))
> + | CR4_SMEP_MASK | CR4_SMAP_MASK | CR4_PKE_MASK | CR4_PKS_MASK \
> + | CR4_LAM_SUP_MASK))
>
> #define DR6_BD (1 << 13)
> #define DR6_BS (1 << 14)
> @@ -2522,6 +2524,9 @@ static inline uint64_t cr4_reserved_bits(CPUX86State *env)
> if (!(env->features[FEAT_7_0_ECX] & CPUID_7_0_ECX_PKS)) {
> reserved_bits |= CR4_PKS_MASK;
> }
> + if (!(env->features[FEAT_7_1_EAX] & CPUID_7_1_EAX_LAM)) {
> + reserved_bits |= CR4_LAM_SUP_MASK;
> + }
> return reserved_bits;
> }
>
> diff --git a/target/i386/helper.c b/target/i386/helper.c
> index 2070dd0dda..1da7a7d315 100644
> --- a/target/i386/helper.c
> +++ b/target/i386/helper.c
> @@ -219,6 +219,10 @@ void cpu_x86_update_cr4(CPUX86State *env, uint32_t new_cr4)
> new_cr4 &= ~CR4_PKS_MASK;
> }
>
> + if (!(env->features[FEAT_7_1_EAX] & CPUID_7_1_EAX_LAM)) {
> + new_cr4 &= ~CR4_LAM_SUP_MASK;
> + }
> +
> env->cr[4] = new_cr4;
> env->hflags = hflags;
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v4 0/2] Add support for LAM in QEMU
2024-01-12 6:00 [PATCH v4 0/2] Add support for LAM in QEMU Binbin Wu
2024-01-12 6:00 ` [PATCH v4 1/2] target/i386: add support for LAM in CPUID enumeration Binbin Wu
2024-01-12 6:00 ` [PATCH v4 2/2] target/i386: add control bits support for LAM Binbin Wu
@ 2024-01-22 8:55 ` Binbin Wu
2024-02-22 2:16 ` Binbin Wu
2024-03-25 0:35 ` Binbin Wu
2024-05-22 9:13 ` Paolo Bonzini
2024-05-22 9:20 ` Paolo Bonzini
4 siblings, 2 replies; 11+ messages in thread
From: Binbin Wu @ 2024-01-22 8:55 UTC (permalink / raw)
To: qemu-devel, kvm, pbonzini; +Cc: xiaoyao.li, chao.gao, robert.hu, binbin.wu
Gentle ping...
Please help to review and consider applying the patch series. (The KVM
part has been merged).
On 1/12/2024 2:00 PM, Binbin Wu wrote:
> Linear-address masking (LAM) [1], modifies the checking that is applied to
> *64-bit* linear addresses, allowing software to use of the untranslated
> address bits for metadata and masks the metadata bits before using them as
> linear addresses to access memory.
>
> When the feature is virtualized and exposed to guest, it can be used for
> efficient
> address sanitizers (ASAN) implementation and for optimizations in JITs and
> virtual machines.
>
> The KVM patch series can be found in [2].
>
> [1] Intel ISE https://cdrdv2.intel.com/v1/dl/getContent/671368
> Chapter Linear Address Masking (LAM)
> [2] https://lore.kernel.org/kvm/20230913124227.12574-1-binbin.wu@linux.intel.com
>
> ---
> Changelog
> v4:
> - Add a reviewed-by from Xiaoyao for patch 1.
> - Mask out LAM bit on CR4 if vcpu doesn't support LAM in cpu_x86_update_cr4() (Xiaoyao)
>
> v3:
> - https://lists.gnu.org/archive/html/qemu-devel/2023-07/msg04160.html
>
> Binbin Wu (1):
> target/i386: add control bits support for LAM
>
> Robert Hoo (1):
> target/i386: add support for LAM in CPUID enumeration
>
> target/i386/cpu.c | 2 +-
> target/i386/cpu.h | 9 ++++++++-
> target/i386/helper.c | 4 ++++
> 3 files changed, 13 insertions(+), 2 deletions(-)
>
>
> base-commit: f614acb7450282a119d85d759f27eae190476058
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v4 0/2] Add support for LAM in QEMU
2024-01-22 8:55 ` [PATCH v4 0/2] Add support for LAM in QEMU Binbin Wu
@ 2024-02-22 2:16 ` Binbin Wu
2024-03-25 0:35 ` Binbin Wu
1 sibling, 0 replies; 11+ messages in thread
From: Binbin Wu @ 2024-02-22 2:16 UTC (permalink / raw)
To: pbonzini; +Cc: qemu-devel, kvm, xiaoyao.li, chao.gao, robert.hu
Ping...
Hi Paolo,
do you have time to have a look at this patchset?
On 1/22/2024 4:55 PM, Binbin Wu wrote:
> Gentle ping...
> Please help to review and consider applying the patch series. (The KVM
> part has been merged).
>
>
> On 1/12/2024 2:00 PM, Binbin Wu wrote:
>> Linear-address masking (LAM) [1], modifies the checking that is
>> applied to
>> *64-bit* linear addresses, allowing software to use of the untranslated
>> address bits for metadata and masks the metadata bits before using
>> them as
>> linear addresses to access memory.
>>
>> When the feature is virtualized and exposed to guest, it can be used for
>> efficient
>> address sanitizers (ASAN) implementation and for optimizations in
>> JITs and
>> virtual machines.
>>
>> The KVM patch series can be found in [2].
>>
>> [1] Intel ISE https://cdrdv2.intel.com/v1/dl/getContent/671368
>> Chapter Linear Address Masking (LAM)
>> [2]
>> https://lore.kernel.org/kvm/20230913124227.12574-1-binbin.wu@linux.intel.com
>>
>> ---
>> Changelog
>> v4:
>> - Add a reviewed-by from Xiaoyao for patch 1.
>> - Mask out LAM bit on CR4 if vcpu doesn't support LAM in
>> cpu_x86_update_cr4() (Xiaoyao)
>>
>> v3:
>> - https://lists.gnu.org/archive/html/qemu-devel/2023-07/msg04160.html
>>
>> Binbin Wu (1):
>> target/i386: add control bits support for LAM
>>
>> Robert Hoo (1):
>> target/i386: add support for LAM in CPUID enumeration
>>
>> target/i386/cpu.c | 2 +-
>> target/i386/cpu.h | 9 ++++++++-
>> target/i386/helper.c | 4 ++++
>> 3 files changed, 13 insertions(+), 2 deletions(-)
>>
>>
>> base-commit: f614acb7450282a119d85d759f27eae190476058
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v4 1/2] target/i386: add support for LAM in CPUID enumeration
2024-01-12 6:00 ` [PATCH v4 1/2] target/i386: add support for LAM in CPUID enumeration Binbin Wu
@ 2024-02-23 3:12 ` Zhao Liu
0 siblings, 0 replies; 11+ messages in thread
From: Zhao Liu @ 2024-02-23 3:12 UTC (permalink / raw)
To: Binbin Wu; +Cc: qemu-devel, kvm, pbonzini, xiaoyao.li, chao.gao, robert.hu
On Fri, Jan 12, 2024 at 02:00:41PM +0800, Binbin Wu wrote:
> Date: Fri, 12 Jan 2024 14:00:41 +0800
> From: Binbin Wu <binbin.wu@linux.intel.com>
> Subject: [PATCH v4 1/2] target/i386: add support for LAM in CPUID
> enumeration
> X-Mailer: git-send-email 2.25.1
>
> From: Robert Hoo <robert.hu@linux.intel.com>
>
> Linear Address Masking (LAM) is a new Intel CPU feature, which allows
> software to use of the untranslated address bits for metadata.
>
> The bit definition:
> CPUID.(EAX=7,ECX=1):EAX[26]
>
> Add CPUID definition for LAM.
>
> Note LAM feature is not supported for TCG of target-i386, LAM CPIUD bit
> will not be added to TCG_7_1_EAX_FEATURES.
>
> More info can be found in Intel ISE Chapter "LINEAR ADDRESS MASKING(LAM)"
> https://cdrdv2.intel.com/v1/dl/getContent/671368
>
> Signed-off-by: Robert Hoo <robert.hu@linux.intel.com>
> Co-developed-by: Binbin Wu <binbin.wu@linux.intel.com>
> Signed-off-by: Binbin Wu <binbin.wu@linux.intel.com>
> Tested-by: Xuelian Guo <xuelian.guo@intel.com>
> Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
> ---
> target/i386/cpu.c | 2 +-
> target/i386/cpu.h | 2 ++
> 2 files changed, 3 insertions(+), 1 deletion(-)
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
>
> diff --git a/target/i386/cpu.c b/target/i386/cpu.c
> index 2524881ce2..fc862dfeb1 100644
> --- a/target/i386/cpu.c
> +++ b/target/i386/cpu.c
> @@ -967,7 +967,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
> "fsrc", NULL, NULL, NULL,
> NULL, NULL, NULL, NULL,
> NULL, "amx-fp16", NULL, "avx-ifma",
> - NULL, NULL, NULL, NULL,
> + NULL, NULL, "lam", NULL,
> NULL, NULL, NULL, NULL,
> },
> .cpuid = {
> diff --git a/target/i386/cpu.h b/target/i386/cpu.h
> index 7f0786e8b9..18ea755644 100644
> --- a/target/i386/cpu.h
> +++ b/target/i386/cpu.h
> @@ -925,6 +925,8 @@ uint64_t x86_cpu_get_supported_feature_word(FeatureWord w,
> #define CPUID_7_1_EAX_AMX_FP16 (1U << 21)
> /* Support for VPMADD52[H,L]UQ */
> #define CPUID_7_1_EAX_AVX_IFMA (1U << 23)
> +/* Linear Address Masking */
> +#define CPUID_7_1_EAX_LAM (1U << 26)
>
> /* Support for VPDPB[SU,UU,SS]D[,S] */
> #define CPUID_7_1_EDX_AVX_VNNI_INT8 (1U << 4)
> --
> 2.25.1
>
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v4 2/2] target/i386: add control bits support for LAM
2024-01-12 6:00 ` [PATCH v4 2/2] target/i386: add control bits support for LAM Binbin Wu
2024-01-14 12:09 ` Xiaoyao Li
@ 2024-02-23 3:35 ` Zhao Liu
1 sibling, 0 replies; 11+ messages in thread
From: Zhao Liu @ 2024-02-23 3:35 UTC (permalink / raw)
To: Binbin Wu; +Cc: qemu-devel, kvm, pbonzini, xiaoyao.li, chao.gao, robert.hu
On Fri, Jan 12, 2024 at 02:00:42PM +0800, Binbin Wu wrote:
> Date: Fri, 12 Jan 2024 14:00:42 +0800
> From: Binbin Wu <binbin.wu@linux.intel.com>
> Subject: [PATCH v4 2/2] target/i386: add control bits support for LAM
> X-Mailer: git-send-email 2.25.1
>
> LAM uses CR3[61] and CR3[62] to configure/enable LAM on user pointers.
> LAM uses CR4[28] to configure/enable LAM on supervisor pointers.
>
> For CR3 LAM bits, no additional handling needed:
> - TCG
> LAM is not supported for TCG of target-i386. helper_write_crN() and
> helper_vmrun() check max physical address bits before calling
> cpu_x86_update_cr3(), no change needed, i.e. CR3 LAM bits are not allowed
> to be set in TCG.
> - gdbstub
> x86_cpu_gdb_write_register() will call cpu_x86_update_cr3() to update cr3.
> Allow gdb to set the LAM bit(s) to CR3, if vcpu doesn't support LAM,
> KVM_SET_SREGS will fail as other reserved bits.
>
> For CR4 LAM bit, its reservation depends on vcpu supporting LAM feature or
> not.
> - TCG
> LAM is not supported for TCG of target-i386. helper_write_crN() and
> helper_vmrun() check CR4 reserved bit before calling cpu_x86_update_cr4(),
> i.e. CR4 LAM bit is not allowed to be set in TCG.
> - gdbstub
> x86_cpu_gdb_write_register() will call cpu_x86_update_cr4() to update cr4.
> Mask out LAM bit on CR4 if vcpu doesn't support LAM.
> - x86_cpu_reset_hold() doesn't need special handling.
>
> Signed-off-by: Binbin Wu <binbin.wu@linux.intel.com>
> Tested-by: Xuelian Guo <xuelian.guo@intel.com>
> ---
> target/i386/cpu.h | 7 ++++++-
> target/i386/helper.c | 4 ++++
> 2 files changed, 10 insertions(+), 1 deletion(-)
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
>
> diff --git a/target/i386/cpu.h b/target/i386/cpu.h
> index 18ea755644..598a3fa140 100644
> --- a/target/i386/cpu.h
> +++ b/target/i386/cpu.h
> @@ -261,6 +261,7 @@ typedef enum X86Seg {
> #define CR4_SMAP_MASK (1U << 21)
> #define CR4_PKE_MASK (1U << 22)
> #define CR4_PKS_MASK (1U << 24)
> +#define CR4_LAM_SUP_MASK (1U << 28)
>
> #define CR4_RESERVED_MASK \
> (~(target_ulong)(CR4_VME_MASK | CR4_PVI_MASK | CR4_TSD_MASK \
> @@ -269,7 +270,8 @@ typedef enum X86Seg {
> | CR4_OSFXSR_MASK | CR4_OSXMMEXCPT_MASK | CR4_UMIP_MASK \
> | CR4_LA57_MASK \
> | CR4_FSGSBASE_MASK | CR4_PCIDE_MASK | CR4_OSXSAVE_MASK \
> - | CR4_SMEP_MASK | CR4_SMAP_MASK | CR4_PKE_MASK | CR4_PKS_MASK))
> + | CR4_SMEP_MASK | CR4_SMAP_MASK | CR4_PKE_MASK | CR4_PKS_MASK \
> + | CR4_LAM_SUP_MASK))
>
> #define DR6_BD (1 << 13)
> #define DR6_BS (1 << 14)
> @@ -2522,6 +2524,9 @@ static inline uint64_t cr4_reserved_bits(CPUX86State *env)
> if (!(env->features[FEAT_7_0_ECX] & CPUID_7_0_ECX_PKS)) {
> reserved_bits |= CR4_PKS_MASK;
> }
> + if (!(env->features[FEAT_7_1_EAX] & CPUID_7_1_EAX_LAM)) {
> + reserved_bits |= CR4_LAM_SUP_MASK;
> + }
> return reserved_bits;
> }
>
> diff --git a/target/i386/helper.c b/target/i386/helper.c
> index 2070dd0dda..1da7a7d315 100644
> --- a/target/i386/helper.c
> +++ b/target/i386/helper.c
> @@ -219,6 +219,10 @@ void cpu_x86_update_cr4(CPUX86State *env, uint32_t new_cr4)
> new_cr4 &= ~CR4_PKS_MASK;
> }
>
> + if (!(env->features[FEAT_7_1_EAX] & CPUID_7_1_EAX_LAM)) {
> + new_cr4 &= ~CR4_LAM_SUP_MASK;
> + }
> +
> env->cr[4] = new_cr4;
> env->hflags = hflags;
>
> --
> 2.25.1
>
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v4 0/2] Add support for LAM in QEMU
2024-01-22 8:55 ` [PATCH v4 0/2] Add support for LAM in QEMU Binbin Wu
2024-02-22 2:16 ` Binbin Wu
@ 2024-03-25 0:35 ` Binbin Wu
1 sibling, 0 replies; 11+ messages in thread
From: Binbin Wu @ 2024-03-25 0:35 UTC (permalink / raw)
To: qemu-devel, kvm, pbonzini; +Cc: xiaoyao.li, chao.gao, robert.hu
Ping...
On 1/22/2024 4:55 PM, Binbin Wu wrote:
> Gentle ping...
> Please help to review and consider applying the patch series. (The KVM
> part has been merged).
>
>
> On 1/12/2024 2:00 PM, Binbin Wu wrote:
>> Linear-address masking (LAM) [1], modifies the checking that is
>> applied to
>> *64-bit* linear addresses, allowing software to use of the untranslated
>> address bits for metadata and masks the metadata bits before using
>> them as
>> linear addresses to access memory.
>>
>> When the feature is virtualized and exposed to guest, it can be used for
>> efficient
>> address sanitizers (ASAN) implementation and for optimizations in
>> JITs and
>> virtual machines.
>>
>> The KVM patch series can be found in [2].
>>
>> [1] Intel ISE https://cdrdv2.intel.com/v1/dl/getContent/671368
>> Chapter Linear Address Masking (LAM)
>> [2]
>> https://lore.kernel.org/kvm/20230913124227.12574-1-binbin.wu@linux.intel.com
>>
>> ---
>> Changelog
>> v4:
>> - Add a reviewed-by from Xiaoyao for patch 1.
>> - Mask out LAM bit on CR4 if vcpu doesn't support LAM in
>> cpu_x86_update_cr4() (Xiaoyao)
>>
>> v3:
>> - https://lists.gnu.org/archive/html/qemu-devel/2023-07/msg04160.html
>>
>> Binbin Wu (1):
>> target/i386: add control bits support for LAM
>>
>> Robert Hoo (1):
>> target/i386: add support for LAM in CPUID enumeration
>>
>> target/i386/cpu.c | 2 +-
>> target/i386/cpu.h | 9 ++++++++-
>> target/i386/helper.c | 4 ++++
>> 3 files changed, 13 insertions(+), 2 deletions(-)
>>
>>
>> base-commit: f614acb7450282a119d85d759f27eae190476058
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v4 0/2] Add support for LAM in QEMU
2024-01-12 6:00 [PATCH v4 0/2] Add support for LAM in QEMU Binbin Wu
` (2 preceding siblings ...)
2024-01-22 8:55 ` [PATCH v4 0/2] Add support for LAM in QEMU Binbin Wu
@ 2024-05-22 9:13 ` Paolo Bonzini
2024-05-22 9:20 ` Paolo Bonzini
4 siblings, 0 replies; 11+ messages in thread
From: Paolo Bonzini @ 2024-05-22 9:13 UTC (permalink / raw)
To: Binbin Wu; +Cc: qemu-devel, kvm, pbonzini, xiaoyao.li, chao.gao, robert.hu
Queued, thanks.
Paolo
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v4 0/2] Add support for LAM in QEMU
2024-01-12 6:00 [PATCH v4 0/2] Add support for LAM in QEMU Binbin Wu
` (3 preceding siblings ...)
2024-05-22 9:13 ` Paolo Bonzini
@ 2024-05-22 9:20 ` Paolo Bonzini
4 siblings, 0 replies; 11+ messages in thread
From: Paolo Bonzini @ 2024-05-22 9:20 UTC (permalink / raw)
To: Binbin Wu; +Cc: qemu-devel, kvm, pbonzini, xiaoyao.li, chao.gao, robert.hu
Queued, thanks.
Paolo
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2024-05-22 9:21 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-01-12 6:00 [PATCH v4 0/2] Add support for LAM in QEMU Binbin Wu
2024-01-12 6:00 ` [PATCH v4 1/2] target/i386: add support for LAM in CPUID enumeration Binbin Wu
2024-02-23 3:12 ` Zhao Liu
2024-01-12 6:00 ` [PATCH v4 2/2] target/i386: add control bits support for LAM Binbin Wu
2024-01-14 12:09 ` Xiaoyao Li
2024-02-23 3:35 ` Zhao Liu
2024-01-22 8:55 ` [PATCH v4 0/2] Add support for LAM in QEMU Binbin Wu
2024-02-22 2:16 ` Binbin Wu
2024-03-25 0:35 ` Binbin Wu
2024-05-22 9:13 ` Paolo Bonzini
2024-05-22 9:20 ` Paolo Bonzini
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).