From: Zhao Liu <zhao1.liu@intel.com>
To: Binbin Wu <binbin.wu@linux.intel.com>
Cc: qemu-devel@nongnu.org, kvm@vger.kernel.org, pbonzini@redhat.com,
xiaoyao.li@intel.com, chao.gao@intel.com,
robert.hu@linux.intel.com
Subject: Re: [PATCH v4 2/2] target/i386: add control bits support for LAM
Date: Fri, 23 Feb 2024 11:35:39 +0800 [thread overview]
Message-ID: <ZdgSi35/Lb9FeNoG@intel.com> (raw)
In-Reply-To: <20240112060042.19925-3-binbin.wu@linux.intel.com>
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
>
>
next prev parent reply other threads:[~2024-02-23 3:22 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
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 [this message]
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
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=ZdgSi35/Lb9FeNoG@intel.com \
--to=zhao1.liu@intel.com \
--cc=binbin.wu@linux.intel.com \
--cc=chao.gao@intel.com \
--cc=kvm@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=robert.hu@linux.intel.com \
--cc=xiaoyao.li@intel.com \
/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.