Adam Steen writes:

> Hi
>
> IA32_EPT_VPID_CAP_XO_TRANSLATIONS is specified incorrectly, see the
> patch below.

Adam's diff looks correct to me based on reading Intel SDM Vol 3D,
Appendix A.10 (VPID and EPT Capabilities) [1]:

  The IA32_VMX_EPT_VPID_CAP MSR (index 48CH) reports information about
  the capabilities of the logical processor with regard to
  virtual-processor identifiers (VPIDs, Section 28.1) and extended page
  tables (EPT, Section 28.2):

    * If bit 0 is read as 1, the processor supports execute-only
    translations by EPT. This support allows software to configure EPT
    paging-structure entries in which bits 1:0 are clear (indicating
    that data accesses are not allowed) and bit 2 is set (indicating
    that instruction fetches are allowed).

    ...

IA32_EPT_VPID_CAP_XO_TRANSLATIONS is only referenced in vmm.c.

I've updated the diff so it applies cleanly, but didn't change the name
of the capability as it's more accurate with "TRANSLATIONS" included
imo.

OK?

>
> Cheers
> Adam
>
> On Fri, Feb 26, 2021 at 01:08:17PM +0800, Adam Steen wrote:
>> 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
>>

[1] 
https://software.intel.com/content/www/us/en/develop/download/intel-64-and-ia-32-architectures-sdm-volume-3d-system-programming-guide-part-4.html

-Dave


Index: sys/arch/amd64/include/specialreg.h
===================================================================
RCS file: /cvs/src/sys/arch/amd64/include/specialreg.h,v
retrieving revision 1.88
diff -u -p -r1.88 specialreg.h
--- sys/arch/amd64/include/specialreg.h 13 Sep 2020 05:57:28 -0000      1.88
+++ sys/arch/amd64/include/specialreg.h 27 Mar 2021 14:14:13 -0000
@@ -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_TRANSLATIONS      (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)

Reply via email to