if ( (value & EFER_FFXSE) && !p->extd.ffxsr )
return "FFXSE without feature";
+ if ( (value & EFER_AIBRSE) && !p->extd.auto_ibrs )
+ return "AutoIBRS without feature";
+
return NULL;
}
#define EFER_AIBRSE (_AC(1, ULL) << 21) /* Automatic IBRS Enable */
#define EFER_KNOWN_MASK \
- (EFER_SCE | EFER_LME | EFER_LMA | EFER_NXE | EFER_SVME | EFER_FFXSE)
+ (EFER_SCE | EFER_LME | EFER_LMA | EFER_NXE | EFER_SVME | EFER_FFXSE | \
+ EFER_AIBRSE)
#define MSR_STAR 0xc0000081 /* legacy mode SYSCALL target */
#define MSR_LSTAR 0xc0000082 /* long mode SYSCALL target */
{
uint64_t val;
- /* Hide unknown bits, and unconditionally hide SVME from guests. */
- val = read_efer() & EFER_KNOWN_MASK & ~EFER_SVME;
+ /* Hide unknown bits, and unconditionally hide SVME and AIBRSE from guests. */
+ val = read_efer() & EFER_KNOWN_MASK & ~(EFER_SVME | EFER_AIBRSE);
/*
* Hide the 64-bit features from 32-bit guests. SCE has
* vendor-dependent behaviour.
/* AMD-defined CPU features, CPUID level 0x80000021.eax, word 11 */
XEN_CPUFEATURE(LFENCE_DISPATCH, 11*32+ 2) /*A LFENCE always serializing */
XEN_CPUFEATURE(NSCB, 11*32+ 6) /*A Null Selector Clears Base (and limit too) */
-XEN_CPUFEATURE(AUTO_IBRS, 11*32+ 8) /* Automatic IBRS */
+XEN_CPUFEATURE(AUTO_IBRS, 11*32+ 8) /*S Automatic IBRS */
XEN_CPUFEATURE(CPUID_USER_DIS, 11*32+17) /* CPUID disable for CPL > 0 software */
/* Intel-defined CPU features, CPUID level 0x00000007:1.ebx, word 12 */