target/i386: Add get/set/migrate support for FRED MSRs

FRED CPU states are managed in 9 new FRED MSRs, in addtion to a few
existing CPU registers and MSRs, e.g., CR4.FRED and MSR_IA32_PL0_SSP.

Save/restore/migrate FRED MSRs if FRED is exposed to the guest.

Tested-by: Shan Kang <shan.kang@intel.com>
Signed-off-by: Xin Li <xin3.li@intel.com>
Message-ID: <20231109072012.8078-7-xin3.li@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Xin Li 2023-11-08 23:20:12 -08:00 committed by Paolo Bonzini
parent ef202d64c3
commit 4ebd98eb3a
3 changed files with 99 additions and 0 deletions

View file

@ -1544,6 +1544,33 @@ static const VMStateDescription vmstate_msr_xfd = {
};
#ifdef TARGET_X86_64
static bool intel_fred_msrs_needed(void *opaque)
{
X86CPU *cpu = opaque;
CPUX86State *env = &cpu->env;
return !!(env->features[FEAT_7_1_EAX] & CPUID_7_1_EAX_FRED);
}
static const VMStateDescription vmstate_msr_fred = {
.name = "cpu/fred",
.version_id = 1,
.minimum_version_id = 1,
.needed = intel_fred_msrs_needed,
.fields = (VMStateField[]) {
VMSTATE_UINT64(env.fred_rsp0, X86CPU),
VMSTATE_UINT64(env.fred_rsp1, X86CPU),
VMSTATE_UINT64(env.fred_rsp2, X86CPU),
VMSTATE_UINT64(env.fred_rsp3, X86CPU),
VMSTATE_UINT64(env.fred_stklvls, X86CPU),
VMSTATE_UINT64(env.fred_ssp1, X86CPU),
VMSTATE_UINT64(env.fred_ssp2, X86CPU),
VMSTATE_UINT64(env.fred_ssp3, X86CPU),
VMSTATE_UINT64(env.fred_config, X86CPU),
VMSTATE_END_OF_LIST()
}
};
static bool amx_xtile_needed(void *opaque)
{
X86CPU *cpu = opaque;
@ -1747,6 +1774,7 @@ const VMStateDescription vmstate_x86_cpu = {
&vmstate_pdptrs,
&vmstate_msr_xfd,
#ifdef TARGET_X86_64
&vmstate_msr_fred,
&vmstate_amx_xtile,
#endif
&vmstate_arch_lbr,