[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v3 08/28] xen/x86: Annotate VM applicability in featureset



On Tue, Mar 15, 2016 at 03:35:04PM +0000, Andrew Cooper wrote:
> Use attributes to specify whether a feature is applicable to be exposed to:
>  1) All guests
>  2) HVM guests
>  3) HVM HAP guests
> 
> There is no current need for other categories (e.g. PV-only features), and
> such categories shoud not be introduced if possible.  These categories follow

/shoud/should/

> from the fact that, with increased hardware support, a guest gets more
> features to use.
> 
> These settings are derived from the existing code in {pv,hvm}_cpuid(), and

Yikes. That must have taken a while to dig.

> xc_cpuid_x86.c.  One notable excetpion is EXTAPIC which was previously
> erroniously exposed to guests.  PV guests don't get to use the APIC and the
> HVM APIC emulation doesn't support extended space.

I would extend this commit description (right after 3)) and the comment below 
to say:

If they are not set - the guest will not see this flag.


Otherwise: Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>


> 
> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> ---
> CC: Jan Beulich <JBeulich@xxxxxxxx>
> 
> v3:
>  * Rebase over the new namespaceing changes.
>  * Expand commit message.
>  * Correct PSE36 to being a HAP-only feature.
> 
> v2:
>  * Annotate features using a magic comment and autogeneration.
> ---
>  xen/include/public/arch-x86/cpufeatureset.h | 187 
> ++++++++++++++--------------
>  xen/tools/gen-cpuid.py                      |  30 ++++-
>  2 files changed, 125 insertions(+), 92 deletions(-)
> 
> diff --git a/xen/include/public/arch-x86/cpufeatureset.h 
> b/xen/include/public/arch-x86/cpufeatureset.h
> index 9389ed9..2a13e0c 100644
> --- a/xen/include/public/arch-x86/cpufeatureset.h
> +++ b/xen/include/public/arch-x86/cpufeatureset.h
> @@ -91,135 +91,140 @@ enum {
>   *   This bit has special properties and is not a straight indication of a
>   *   piece of new functionality.  Xen will handle these differently,
>   *   and may override toolstack settings completely.
> + *
> + * Applicability to guests: 'A', 'S' or 'H'
> + *   'A' = All guests.
> + *   'S' = All HVM guests (not PV guests).
> + *   'H' = HVM HAP guests (not PV or HVM Shadow guests).
>   */
>  
>  /* Intel-defined CPU features, CPUID level 0x00000001.edx, word 0 */
> -XEN_CPUFEATURE(FPU,           0*32+ 0) /*   Onboard FPU */
> -XEN_CPUFEATURE(VME,           0*32+ 1) /*   Virtual Mode Extensions */
> -XEN_CPUFEATURE(DE,            0*32+ 2) /*   Debugging Extensions */
> -XEN_CPUFEATURE(PSE,           0*32+ 3) /*   Page Size Extensions */
> -XEN_CPUFEATURE(TSC,           0*32+ 4) /*   Time Stamp Counter */
> -XEN_CPUFEATURE(MSR,           0*32+ 5) /*   Model-Specific Registers, RDMSR, 
> WRMSR */
> -XEN_CPUFEATURE(PAE,           0*32+ 6) /*   Physical Address Extensions */
> -XEN_CPUFEATURE(MCE,           0*32+ 7) /*   Machine Check Architecture */
> -XEN_CPUFEATURE(CX8,           0*32+ 8) /*   CMPXCHG8 instruction */
> -XEN_CPUFEATURE(APIC,          0*32+ 9) /*!  Onboard APIC */
> -XEN_CPUFEATURE(SEP,           0*32+11) /*   SYSENTER/SYSEXIT */
> -XEN_CPUFEATURE(MTRR,          0*32+12) /*   Memory Type Range Registers */
> -XEN_CPUFEATURE(PGE,           0*32+13) /*   Page Global Enable */
> -XEN_CPUFEATURE(MCA,           0*32+14) /*   Machine Check Architecture */
> -XEN_CPUFEATURE(CMOV,          0*32+15) /*   CMOV instruction (FCMOVCC and 
> FCOMI too if FPU present) */
> -XEN_CPUFEATURE(PAT,           0*32+16) /*   Page Attribute Table */
> -XEN_CPUFEATURE(PSE36,         0*32+17) /*   36-bit PSEs */
> -XEN_CPUFEATURE(CLFLUSH,       0*32+19) /*   CLFLUSH instruction */
> +XEN_CPUFEATURE(FPU,           0*32+ 0) /*A  Onboard FPU */
> +XEN_CPUFEATURE(VME,           0*32+ 1) /*S  Virtual Mode Extensions */
> +XEN_CPUFEATURE(DE,            0*32+ 2) /*A  Debugging Extensions */
> +XEN_CPUFEATURE(PSE,           0*32+ 3) /*S  Page Size Extensions */
> +XEN_CPUFEATURE(TSC,           0*32+ 4) /*A  Time Stamp Counter */
> +XEN_CPUFEATURE(MSR,           0*32+ 5) /*A  Model-Specific Registers, RDMSR, 
> WRMSR */
> +XEN_CPUFEATURE(PAE,           0*32+ 6) /*A  Physical Address Extensions */
> +XEN_CPUFEATURE(MCE,           0*32+ 7) /*A  Machine Check Architecture */
> +XEN_CPUFEATURE(CX8,           0*32+ 8) /*A  CMPXCHG8 instruction */
> +XEN_CPUFEATURE(APIC,          0*32+ 9) /*!A Onboard APIC */
> +XEN_CPUFEATURE(SEP,           0*32+11) /*A  SYSENTER/SYSEXIT */
> +XEN_CPUFEATURE(MTRR,          0*32+12) /*S  Memory Type Range Registers */
> +XEN_CPUFEATURE(PGE,           0*32+13) /*S  Page Global Enable */
> +XEN_CPUFEATURE(MCA,           0*32+14) /*A  Machine Check Architecture */
> +XEN_CPUFEATURE(CMOV,          0*32+15) /*A  CMOV instruction (FCMOVCC and 
> FCOMI too if FPU present) */
> +XEN_CPUFEATURE(PAT,           0*32+16) /*A  Page Attribute Table */
> +XEN_CPUFEATURE(PSE36,         0*32+17) /*H  36-bit PSEs */
> +XEN_CPUFEATURE(CLFLUSH,       0*32+19) /*A  CLFLUSH instruction */
>  XEN_CPUFEATURE(DS,            0*32+21) /*   Debug Store */
> -XEN_CPUFEATURE(ACPI,          0*32+22) /*   ACPI via MSR */
> -XEN_CPUFEATURE(MMX,           0*32+23) /*   Multimedia Extensions */
> -XEN_CPUFEATURE(FXSR,          0*32+24) /*   FXSAVE and FXRSTOR instructions 
> */
> -XEN_CPUFEATURE(SSE,           0*32+25) /*   Streaming SIMD Extensions */
> -XEN_CPUFEATURE(SSE2,          0*32+26) /*   Streaming SIMD Extensions-2 */
> -XEN_CPUFEATURE(HTT,           0*32+28) /*!  Hyper-Threading Technology */
> +XEN_CPUFEATURE(ACPI,          0*32+22) /*A  ACPI via MSR */
> +XEN_CPUFEATURE(MMX,           0*32+23) /*A  Multimedia Extensions */
> +XEN_CPUFEATURE(FXSR,          0*32+24) /*A  FXSAVE and FXRSTOR instructions 
> */
> +XEN_CPUFEATURE(SSE,           0*32+25) /*A  Streaming SIMD Extensions */
> +XEN_CPUFEATURE(SSE2,          0*32+26) /*A  Streaming SIMD Extensions-2 */
> +XEN_CPUFEATURE(HTT,           0*32+28) /*!A Hyper-Threading Technology */
>  XEN_CPUFEATURE(TM1,           0*32+29) /*   Thermal Monitor 1 */
>  XEN_CPUFEATURE(PBE,           0*32+31) /*   Pending Break Enable */
>  
>  /* Intel-defined CPU features, CPUID level 0x00000001.ecx, word 1 */
> -XEN_CPUFEATURE(SSE3,          1*32+ 0) /*   Streaming SIMD Extensions-3 */
> -XEN_CPUFEATURE(PCLMULQDQ,     1*32+ 1) /*   Carry-less mulitplication */
> +XEN_CPUFEATURE(SSE3,          1*32+ 0) /*A  Streaming SIMD Extensions-3 */
> +XEN_CPUFEATURE(PCLMULQDQ,     1*32+ 1) /*A  Carry-less mulitplication */
>  XEN_CPUFEATURE(DTES64,        1*32+ 2) /*   64-bit Debug Store */
>  XEN_CPUFEATURE(MONITOR,       1*32+ 3) /*   Monitor/Mwait support */
>  XEN_CPUFEATURE(DSCPL,         1*32+ 4) /*   CPL Qualified Debug Store */
> -XEN_CPUFEATURE(VMX,           1*32+ 5) /*   Virtual Machine Extensions */
> +XEN_CPUFEATURE(VMX,           1*32+ 5) /*S  Virtual Machine Extensions */
>  XEN_CPUFEATURE(SMX,           1*32+ 6) /*   Safer Mode Extensions */
>  XEN_CPUFEATURE(EIST,          1*32+ 7) /*   Enhanced SpeedStep */
>  XEN_CPUFEATURE(TM2,           1*32+ 8) /*   Thermal Monitor 2 */
> -XEN_CPUFEATURE(SSSE3,         1*32+ 9) /*   Supplemental Streaming SIMD 
> Extensions-3 */
> -XEN_CPUFEATURE(FMA,           1*32+12) /*   Fused Multiply Add */
> -XEN_CPUFEATURE(CX16,          1*32+13) /*   CMPXCHG16B */
> +XEN_CPUFEATURE(SSSE3,         1*32+ 9) /*A  Supplemental Streaming SIMD 
> Extensions-3 */
> +XEN_CPUFEATURE(FMA,           1*32+12) /*A  Fused Multiply Add */
> +XEN_CPUFEATURE(CX16,          1*32+13) /*A  CMPXCHG16B */
>  XEN_CPUFEATURE(XTPR,          1*32+14) /*   Send Task Priority Messages */
>  XEN_CPUFEATURE(PDCM,          1*32+15) /*   Perf/Debug Capability MSR */
> -XEN_CPUFEATURE(PCID,          1*32+17) /*   Process Context ID */
> +XEN_CPUFEATURE(PCID,          1*32+17) /*H  Process Context ID */
>  XEN_CPUFEATURE(DCA,           1*32+18) /*   Direct Cache Access */
> -XEN_CPUFEATURE(SSE4_1,        1*32+19) /*   Streaming SIMD Extensions 4.1 */
> -XEN_CPUFEATURE(SSE4_2,        1*32+20) /*   Streaming SIMD Extensions 4.2 */
> -XEN_CPUFEATURE(X2APIC,        1*32+21) /*   Extended xAPIC */
> -XEN_CPUFEATURE(MOVBE,         1*32+22) /*   movbe instruction */
> -XEN_CPUFEATURE(POPCNT,        1*32+23) /*   POPCNT instruction */
> -XEN_CPUFEATURE(TSC_DEADLINE,  1*32+24) /*   TSC Deadline Timer */
> -XEN_CPUFEATURE(AESNI,         1*32+25) /*   AES instructions */
> -XEN_CPUFEATURE(XSAVE,         1*32+26) /*   XSAVE/XRSTOR/XSETBV/XGETBV */
> +XEN_CPUFEATURE(SSE4_1,        1*32+19) /*A  Streaming SIMD Extensions 4.1 */
> +XEN_CPUFEATURE(SSE4_2,        1*32+20) /*A  Streaming SIMD Extensions 4.2 */
> +XEN_CPUFEATURE(X2APIC,        1*32+21) /*A  Extended xAPIC */
> +XEN_CPUFEATURE(MOVBE,         1*32+22) /*A  movbe instruction */
> +XEN_CPUFEATURE(POPCNT,        1*32+23) /*A  POPCNT instruction */
> +XEN_CPUFEATURE(TSC_DEADLINE,  1*32+24) /*S  TSC Deadline Timer */
> +XEN_CPUFEATURE(AESNI,         1*32+25) /*A  AES instructions */
> +XEN_CPUFEATURE(XSAVE,         1*32+26) /*A  XSAVE/XRSTOR/XSETBV/XGETBV */
>  XEN_CPUFEATURE(OSXSAVE,       1*32+27) /*!  OSXSAVE */
> -XEN_CPUFEATURE(AVX,           1*32+28) /*   Advanced Vector Extensions */
> -XEN_CPUFEATURE(F16C,          1*32+29) /*   Half-precision convert 
> instruction */
> -XEN_CPUFEATURE(RDRAND,        1*32+30) /*   Digital Random Number Generator 
> */
> -XEN_CPUFEATURE(HYPERVISOR,    1*32+31) /*   Running under some hypervisor */
> +XEN_CPUFEATURE(AVX,           1*32+28) /*A  Advanced Vector Extensions */
> +XEN_CPUFEATURE(F16C,          1*32+29) /*A  Half-precision convert 
> instruction */
> +XEN_CPUFEATURE(RDRAND,        1*32+30) /*A  Digital Random Number Generator 
> */
> +XEN_CPUFEATURE(HYPERVISOR,    1*32+31) /*A  Running under some hypervisor */
>  
>  /* AMD-defined CPU features, CPUID level 0x80000001.edx, word 2 */
> -XEN_CPUFEATURE(SYSCALL,       2*32+11) /*   SYSCALL/SYSRET */
> -XEN_CPUFEATURE(NX,            2*32+20) /*   Execute Disable */
> -XEN_CPUFEATURE(MMXEXT,        2*32+22) /*   AMD MMX extensions */
> -XEN_CPUFEATURE(FFXSR,         2*32+25) /*   FFXSR instruction optimizations 
> */
> -XEN_CPUFEATURE(PAGE1GB,       2*32+26) /*   1Gb large page support */
> -XEN_CPUFEATURE(RDTSCP,        2*32+27) /*   RDTSCP */
> -XEN_CPUFEATURE(LM,            2*32+29) /*   Long Mode (x86-64) */
> -XEN_CPUFEATURE(3DNOWEXT,      2*32+30) /*   AMD 3DNow! extensions */
> -XEN_CPUFEATURE(3DNOW,         2*32+31) /*   3DNow! */
> +XEN_CPUFEATURE(SYSCALL,       2*32+11) /*A  SYSCALL/SYSRET */
> +XEN_CPUFEATURE(NX,            2*32+20) /*A  Execute Disable */
> +XEN_CPUFEATURE(MMXEXT,        2*32+22) /*A  AMD MMX extensions */
> +XEN_CPUFEATURE(FFXSR,         2*32+25) /*A  FFXSR instruction optimizations 
> */
> +XEN_CPUFEATURE(PAGE1GB,       2*32+26) /*H  1Gb large page support */
> +XEN_CPUFEATURE(RDTSCP,        2*32+27) /*S  RDTSCP */
> +XEN_CPUFEATURE(LM,            2*32+29) /*A  Long Mode (x86-64) */
> +XEN_CPUFEATURE(3DNOWEXT,      2*32+30) /*A  AMD 3DNow! extensions */
> +XEN_CPUFEATURE(3DNOW,         2*32+31) /*A  3DNow! */
>  
>  /* AMD-defined CPU features, CPUID level 0x80000001.ecx, word 3 */
> -XEN_CPUFEATURE(LAHF_LM,       3*32+ 0) /*   LAHF/SAHF in long mode */
> -XEN_CPUFEATURE(CMP_LEGACY,    3*32+ 1) /*!  If yes HyperThreading not valid 
> */
> -XEN_CPUFEATURE(SVM,           3*32+ 2) /*   Secure virtual machine */
> +XEN_CPUFEATURE(LAHF_LM,       3*32+ 0) /*A  LAHF/SAHF in long mode */
> +XEN_CPUFEATURE(CMP_LEGACY,    3*32+ 1) /*!A If yes HyperThreading not valid 
> */
> +XEN_CPUFEATURE(SVM,           3*32+ 2) /*S  Secure virtual machine */
>  XEN_CPUFEATURE(EXTAPIC,       3*32+ 3) /*   Extended APIC space */
> -XEN_CPUFEATURE(CR8_LEGACY,    3*32+ 4) /*   CR8 in 32-bit mode */
> -XEN_CPUFEATURE(ABM,           3*32+ 5) /*   Advanced bit manipulation */
> -XEN_CPUFEATURE(SSE4A,         3*32+ 6) /*   SSE-4A */
> -XEN_CPUFEATURE(MISALIGNSSE,   3*32+ 7) /*   Misaligned SSE mode */
> -XEN_CPUFEATURE(3DNOWPREFETCH, 3*32+ 8) /*   3DNow prefetch instructions */
> +XEN_CPUFEATURE(CR8_LEGACY,    3*32+ 4) /*S  CR8 in 32-bit mode */
> +XEN_CPUFEATURE(ABM,           3*32+ 5) /*A  Advanced bit manipulation */
> +XEN_CPUFEATURE(SSE4A,         3*32+ 6) /*A  SSE-4A */
> +XEN_CPUFEATURE(MISALIGNSSE,   3*32+ 7) /*A  Misaligned SSE mode */
> +XEN_CPUFEATURE(3DNOWPREFETCH, 3*32+ 8) /*A  3DNow prefetch instructions */
>  XEN_CPUFEATURE(OSVW,          3*32+ 9) /*   OS Visible Workaround */
> -XEN_CPUFEATURE(IBS,           3*32+10) /*   Instruction Based Sampling */
> -XEN_CPUFEATURE(XOP,           3*32+11) /*   extended AVX instructions */
> +XEN_CPUFEATURE(IBS,           3*32+10) /*S  Instruction Based Sampling */
> +XEN_CPUFEATURE(XOP,           3*32+11) /*A  extended AVX instructions */
>  XEN_CPUFEATURE(SKINIT,        3*32+12) /*   SKINIT/STGI instructions */
>  XEN_CPUFEATURE(WDT,           3*32+13) /*   Watchdog timer */
> -XEN_CPUFEATURE(LWP,           3*32+15) /*   Light Weight Profiling */
> -XEN_CPUFEATURE(FMA4,          3*32+16) /*   4 operands MAC instructions */
> +XEN_CPUFEATURE(LWP,           3*32+15) /*A  Light Weight Profiling */
> +XEN_CPUFEATURE(FMA4,          3*32+16) /*A  4 operands MAC instructions */
>  XEN_CPUFEATURE(NODEID_MSR,    3*32+19) /*   NodeId MSR */
> -XEN_CPUFEATURE(TBM,           3*32+21) /*   trailing bit manipulations */
> +XEN_CPUFEATURE(TBM,           3*32+21) /*A  trailing bit manipulations */
>  XEN_CPUFEATURE(TOPOEXT,       3*32+22) /*   topology extensions CPUID leafs 
> */
> -XEN_CPUFEATURE(DBEXT,         3*32+26) /*   data breakpoint extension */
> +XEN_CPUFEATURE(DBEXT,         3*32+26) /*A  data breakpoint extension */
>  XEN_CPUFEATURE(MONITORX,      3*32+29) /*   MONITOR extension 
> (MONITORX/MWAITX) */
>  
>  /* Intel-defined CPU features, CPUID level 0x0000000D:1.eax, word 4 */
> -XEN_CPUFEATURE(XSAVEOPT,      4*32+ 0) /*   XSAVEOPT instruction */
> -XEN_CPUFEATURE(XSAVEC,        4*32+ 1) /*   XSAVEC/XRSTORC instructions */
> -XEN_CPUFEATURE(XGETBV1,       4*32+ 2) /*   XGETBV with %ecx=1 */
> -XEN_CPUFEATURE(XSAVES,        4*32+ 3) /*   XSAVES/XRSTORS instructions */
> +XEN_CPUFEATURE(XSAVEOPT,      4*32+ 0) /*A  XSAVEOPT instruction */
> +XEN_CPUFEATURE(XSAVEC,        4*32+ 1) /*A  XSAVEC/XRSTORC instructions */
> +XEN_CPUFEATURE(XGETBV1,       4*32+ 2) /*A  XGETBV with %ecx=1 */
> +XEN_CPUFEATURE(XSAVES,        4*32+ 3) /*S  XSAVES/XRSTORS instructions */
>  
>  /* Intel-defined CPU features, CPUID level 0x00000007:0.ebx, word 5 */
> -XEN_CPUFEATURE(FSGSBASE,      5*32+ 0) /*   {RD,WR}{FS,GS}BASE instructions 
> */
> -XEN_CPUFEATURE(TSC_ADJUST,    5*32+ 1) /*   TSC_ADJUST MSR available */
> -XEN_CPUFEATURE(BMI1,          5*32+ 3) /*   1st bit manipulation extensions 
> */
> -XEN_CPUFEATURE(HLE,           5*32+ 4) /*   Hardware Lock Elision */
> -XEN_CPUFEATURE(AVX2,          5*32+ 5) /*   AVX2 instructions */
> +XEN_CPUFEATURE(FSGSBASE,      5*32+ 0) /*A  {RD,WR}{FS,GS}BASE instructions 
> */
> +XEN_CPUFEATURE(TSC_ADJUST,    5*32+ 1) /*S  TSC_ADJUST MSR available */
> +XEN_CPUFEATURE(BMI1,          5*32+ 3) /*A  1st bit manipulation extensions 
> */
> +XEN_CPUFEATURE(HLE,           5*32+ 4) /*A  Hardware Lock Elision */
> +XEN_CPUFEATURE(AVX2,          5*32+ 5) /*A  AVX2 instructions */
>  XEN_CPUFEATURE(FDP_EXCP_ONLY, 5*32+ 6) /*!  x87 FDP only updated on 
> exception. */
> -XEN_CPUFEATURE(SMEP,          5*32+ 7) /*   Supervisor Mode Execution 
> Protection */
> -XEN_CPUFEATURE(BMI2,          5*32+ 8) /*   2nd bit manipulation extensions 
> */
> -XEN_CPUFEATURE(ERMS,          5*32+ 9) /*   Enhanced REP MOVSB/STOSB */
> -XEN_CPUFEATURE(INVPCID,       5*32+10) /*   Invalidate Process Context ID */
> -XEN_CPUFEATURE(RTM,           5*32+11) /*   Restricted Transactional Memory 
> */
> +XEN_CPUFEATURE(SMEP,          5*32+ 7) /*S  Supervisor Mode Execution 
> Protection */
> +XEN_CPUFEATURE(BMI2,          5*32+ 8) /*A  2nd bit manipulation extensions 
> */
> +XEN_CPUFEATURE(ERMS,          5*32+ 9) /*A  Enhanced REP MOVSB/STOSB */
> +XEN_CPUFEATURE(INVPCID,       5*32+10) /*H  Invalidate Process Context ID */
> +XEN_CPUFEATURE(RTM,           5*32+11) /*A  Restricted Transactional Memory 
> */
>  XEN_CPUFEATURE(PQM,           5*32+12) /*   Platform QoS Monitoring */
>  XEN_CPUFEATURE(NO_FPU_SEL,    5*32+13) /*!  FPU CS/DS stored as zero */
> -XEN_CPUFEATURE(MPX,           5*32+14) /*   Memory Protection Extensions */
> +XEN_CPUFEATURE(MPX,           5*32+14) /*S  Memory Protection Extensions */
>  XEN_CPUFEATURE(PQE,           5*32+15) /*   Platform QoS Enforcement */
> -XEN_CPUFEATURE(RDSEED,        5*32+18) /*   RDSEED instruction */
> -XEN_CPUFEATURE(ADX,           5*32+19) /*   ADCX, ADOX instructions */
> -XEN_CPUFEATURE(SMAP,          5*32+20) /*   Supervisor Mode Access 
> Prevention */
> -XEN_CPUFEATURE(PCOMMIT,       5*32+22) /*   PCOMMIT instruction */
> -XEN_CPUFEATURE(CLFLUSHOPT,    5*32+23) /*   CLFLUSHOPT instruction */
> -XEN_CPUFEATURE(CLWB,          5*32+24) /*   CLWB instruction */
> -XEN_CPUFEATURE(SHA,           5*32+29) /*   SHA1 & SHA256 instructions */
> +XEN_CPUFEATURE(RDSEED,        5*32+18) /*A  RDSEED instruction */
> +XEN_CPUFEATURE(ADX,           5*32+19) /*A  ADCX, ADOX instructions */
> +XEN_CPUFEATURE(SMAP,          5*32+20) /*S  Supervisor Mode Access 
> Prevention */
> +XEN_CPUFEATURE(PCOMMIT,       5*32+22) /*A  PCOMMIT instruction */
> +XEN_CPUFEATURE(CLFLUSHOPT,    5*32+23) /*A  CLFLUSHOPT instruction */
> +XEN_CPUFEATURE(CLWB,          5*32+24) /*A  CLWB instruction */
> +XEN_CPUFEATURE(SHA,           5*32+29) /*A  SHA1 & SHA256 instructions */
>  
>  /* Intel-defined CPU features, CPUID level 0x00000007:0.ecx, word 6 */
> -XEN_CPUFEATURE(PREFETCHWT1,   6*32+ 0) /*   PREFETCHWT1 instruction */
> -XEN_CPUFEATURE(PKU,           6*32+ 3) /*   Protection Keys for Userspace */
> +XEN_CPUFEATURE(PREFETCHWT1,   6*32+ 0) /*A  PREFETCHWT1 instruction */
> +XEN_CPUFEATURE(PKU,           6*32+ 3) /*H  Protection Keys for Userspace */
>  XEN_CPUFEATURE(OSPKE,         6*32+ 4) /*!  OS Protection Keys Enable */
>  
>  /* AMD-defined CPU features, CPUID level 0x80000007.edx, word 7 */
> @@ -227,7 +232,7 @@ XEN_CPUFEATURE(ITSC,          7*32+ 8) /*   Invariant TSC 
> */
>  XEN_CPUFEATURE(EFRO,          7*32+10) /*   APERF/MPERF Read Only interface 
> */
>  
>  /* AMD-defined CPU features, CPUID level 0x80000008.ebx, word 8 */
> -XEN_CPUFEATURE(CLZERO,        8*32+ 0) /*   CLZERO instruction */
> +XEN_CPUFEATURE(CLZERO,        8*32+ 0) /*A  CLZERO instruction */
>  
>  #endif /* XEN_CPUFEATURE */
>  
> diff --git a/xen/tools/gen-cpuid.py b/xen/tools/gen-cpuid.py
> index 5171c6e..452c26a 100755
> --- a/xen/tools/gen-cpuid.py
> +++ b/xen/tools/gen-cpuid.py
> @@ -17,12 +17,18 @@ class State(object):
>          # State parsed from input
>          self.names = {} # Name => value mapping
>          self.raw_special = set()
> +        self.raw_pv = set()
> +        self.raw_hvm_shadow = set()
> +        self.raw_hvm_hap = set()
>  
>          # State calculated
>          self.nr_entries = 0 # Number of words in a featureset
>          self.common_1d = 0 # Common features between 1d and e1d
>          self.known = [] # All known features
>          self.special = [] # Features with special semantics
> +        self.pv = []
> +        self.hvm_shadow = []
> +        self.hvm_hap = []
>  
>  def parse_definitions(state):
>      """
> @@ -32,7 +38,7 @@ def parse_definitions(state):
>      feat_regex = re.compile(
>          r"^XEN_CPUFEATURE\(([A-Z0-9_]+),"
>          "\s+([\s\d]+\*[\s\d]+\+[\s\d]+)\)"
> -        "\s+/\*([!]*) .*$")
> +        "\s+/\*([\w!]*) .*$")
>  
>      this = sys.modules[__name__]
>  
> @@ -72,6 +78,16 @@ def parse_definitions(state):
>  
>              if a == "!":
>                  state.raw_special.add(val)
> +            elif a in "ASH":
> +                if a == "A":
> +                    state.raw_pv.add(val)
> +                    state.raw_hvm_shadow.add(val)
> +                    state.raw_hvm_hap.add(val)
> +                elif attr == "S":
> +                    state.raw_hvm_shadow.add(val)
> +                    state.raw_hvm_hap.add(val)
> +                elif attr == "H":
> +                    state.raw_hvm_hap.add(val)
>              else:
>                  raise Fail("Unrecognised attribute '%s' for %s" % (a, name))
>  
> @@ -124,6 +140,9 @@ def crunch_numbers(state):
>  
>      state.common_1d = featureset_to_uint32s(common_1d, 1)[0]
>      state.special = featureset_to_uint32s(state.raw_special, nr_entries)
> +    state.pv = featureset_to_uint32s(state.raw_pv, nr_entries)
> +    state.hvm_shadow = featureset_to_uint32s(state.raw_hvm_shadow, 
> nr_entries)
> +    state.hvm_hap = featureset_to_uint32s(state.raw_hvm_hap, nr_entries)
>  
>  
>  def write_results(state):
> @@ -145,10 +164,19 @@ def write_results(state):
>  #define INIT_KNOWN_FEATURES { \\\n%s\n}
>  
>  #define INIT_SPECIAL_FEATURES { \\\n%s\n}
> +
> +#define INIT_PV_FEATURES { \\\n%s\n}
> +
> +#define INIT_HVM_SHADOW_FEATURES { \\\n%s\n}
> +
> +#define INIT_HVM_HAP_FEATURES { \\\n%s\n}
>  """ % (state.nr_entries,
>         state.common_1d,
>         format_uint32s(state.known, 4),
>         format_uint32s(state.special, 4),
> +       format_uint32s(state.pv, 4),
> +       format_uint32s(state.hvm_shadow, 4),
> +       format_uint32s(state.hvm_hap, 4),
>         ))
>  
>      state.output.write(
> -- 
> 2.1.4
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.