Hi
IA32_EPT_VPID_CAP_XO_TRANSLATIONS is specified as 0x0 and not (1ULL << 0)
ie 0 and not bit 0 as on.
Please see the attach diff to correct this and rename
IA32_EPT_VPID_CAP_XO_TRANSLATIONS to IA32_EPT_VPID_CAP_XO to reduce
wordyness.
Cheers
Adam
diff 0e7183d43c8ed36e5d169be05df61472565710eb /home/adams/devl/openbsd/src
blob - 72104b78c733f4ce8ee91910b0b4a6f0f51c15aa
file + sys/arch/amd64/amd64/vmm.c
--- sys/arch/amd64/amd64/vmm.c
+++ sys/arch/amd64/amd64/vmm.c
@@ -916,7 +916,7 @@ vm_mprotect_ept(struct vm_mprotect_ept_params *vmep)
if (vmm_softc->mode == VMM_MODE_EPT) {
msr = rdmsr(IA32_VMX_EPT_VPID_CAP);
if (prot == PROT_EXEC &&
- (msr & IA32_EPT_VPID_CAP_XO_TRANSLATIONS) == 0) {
+ (msr & IA32_EPT_VPID_CAP_XO) == 0) {
DPRINTF("%s: Execute only permissions unsupported,"
" adding read permission\n", __func__);
blob - e0232887ff69a882c00e3b4059baa2b12f047c2d
file + sys/arch/amd64/include/specialreg.h
--- sys/arch/amd64/include/specialreg.h
+++ sys/arch/amd64/include/specialreg.h
@@ -957,7 +957,7 @@
#define IA32_VMX_TRUE_ENTRY_CTLS 0x490
#define IA32_VMX_VMFUNC 0x491
-#define IA32_EPT_VPID_CAP_XO_TRANSLATIONS 0x0
+#define IA32_EPT_VPID_CAP_XO (1ULL << 0)
#define IA32_EPT_VPID_CAP_PAGE_WALK_4 (1ULL << 6)
#define IA32_EPT_VPID_CAP_WB (1ULL << 14)
#define IA32_EPT_VPID_CAP_AD_BITS (1ULL << 21)