Browse Source

i386/cpu: Migrate MSR_IA32_PL0_SSP for FRED and CET-SHSTK

Both FRED and CET-SHSTK need MSR_IA32_PL0_SSP, so add the vmstate for
this MSR.

When CET-SHSTK is not supported, MSR_IA32_PL0_SSP keeps accessible, but
its value doesn't take effect. Therefore, treat this vmstate as a
subsection rather than a fix for the previous FRED vmstate.

Tested-by: Farrah Chen <farrah.chen@intel.com>
Signed-off-by: Xin Li (Intel) <xin@zytor.com>
Co-developed-by: Zhao Liu <zhao1.liu@intel.com>
Signed-off-by: Zhao Liu <zhao1.liu@intel.com>
Link: https://lore.kernel.org/r/20251211060801.3600039-17-zhao1.liu@intel.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
pull/316/head
Xin Li (Intel) 8 months ago
committed by Paolo Bonzini
parent
commit
a5b163fa22
  1. 23
      target/i386/machine.c

23
target/i386/machine.c

@ -1668,6 +1668,28 @@ static const VMStateDescription vmstate_triple_fault = {
}
};
static bool pl0_ssp_needed(void *opaque)
{
X86CPU *cpu = opaque;
/*
* CPUID_7_1_EAX_FRED and CPUID_7_0_ECX_CET_SHSTK are checked because
* if all of these bits are zero and the MSR will not be settable.
*/
return !!(cpu->env.pl0_ssp);
}
static const VMStateDescription vmstate_pl0_ssp = {
.name = "cpu/msr_pl0_ssp",
.version_id = 1,
.minimum_version_id = 1,
.needed = pl0_ssp_needed,
.fields = (const VMStateField[]) {
VMSTATE_UINT64(env.pl0_ssp, X86CPU),
VMSTATE_END_OF_LIST()
}
};
const VMStateDescription vmstate_x86_cpu = {
.name = "cpu",
.version_id = 12,
@ -1817,6 +1839,7 @@ const VMStateDescription vmstate_x86_cpu = {
#endif
&vmstate_arch_lbr,
&vmstate_triple_fault,
&vmstate_pl0_ssp,
NULL
}
};

Loading…
Cancel
Save