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

[Xen-devel] [PATCH 10/27] x86/cpuid: Introduce named feature bitmaps



Use anonymous unions to access the feature leaves as complete words, and by
named individual feature.

A feature name is introduced for every architectural X86_FEATURE_*, other than
the dynamically calculated values such as APIC, OSXSAVE and OSPKE.

No functional change.

Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
CC: Jan Beulich <JBeulich@xxxxxxxx>
---
 xen/include/asm-x86/cpuid.h | 103 +++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 97 insertions(+), 6 deletions(-)

diff --git a/xen/include/asm-x86/cpuid.h b/xen/include/asm-x86/cpuid.h
index e20b0d2..0371e6e 100644
--- a/xen/include/asm-x86/cpuid.h
+++ b/xen/include/asm-x86/cpuid.h
@@ -103,7 +103,25 @@ struct cpuid_policy
 
             /* Leaf 0x1 - family/model/stepping and features. */
             struct {
-                uint32_t :32, :32, _1c, _1d;
+                uint32_t :32, :32;
+                union {
+                    uint32_t _1c;
+                    struct {
+                        bool sse3:1, pclmulqdq:1, dtes64:1, monitor:1, 
dscpl:1, vmx:1, smx:1, eist:1,
+                             tm2:1, ssse3:1, /* cid */:1, /* sdbg */:1, fma:1, 
cx16:1, xtpr:1, pcdm:1,
+                             :1, pcid:1, dca:1, sse4_1:1, sse4_2:1, x2apic:1, 
movebe:1, popcnt:1,
+                             tsc_deadline:1, aesni:1, xsave:1, /* osxsave 
*/:1, avx:1, f16c:1, rdrand:1, hv:1;
+                    };
+                };
+                union {
+                    uint32_t _1d;
+                    struct {
+                        bool fpu:1, vme:1, de:1, pse:1, tsc:1, msr:1, pae:1, 
mce:1,
+                             cx8:1, /* apic */:1, :1, sep:1, mtrr:1, pge:1, 
mca:1, cmov:1,
+                             pat:1, pse36:1, /* psn */:1, clflush:1, :1, ds:1, 
acpi:1, mmx:1,
+                             fxsr:1, sse:1, sse2:1, /* ss */:1, htt:1, tm1:1, 
/* IA-64 */:1, pbe:1;
+                    };
+                };
             };
         };
     } basic;
@@ -113,7 +131,34 @@ struct cpuid_policy
         struct cpuid_leaf raw[CPUID_GUEST_NR_FEAT];
         struct {
             struct {
-                uint32_t max_subleaf, _7b0, _7c0, _7d0;
+                uint32_t max_subleaf;
+                union {
+                    uint32_t _7b0;
+                    struct {
+                        bool fsgsbase:1, tsc_adjust:1, sgx:1, bmi1:1, hle:1, 
avx2:1, fdp_excp_only:1, smep:1,
+                             bmi2:1, erms:1, invpcid:1, rtm:1, pqm:1, 
no_fpu_sel:1, mpx:1, pqe:1,
+                             avx512f:1, avx512dq:1, rdseed:1, adx:1, smap:1, 
avx512ifma:1, /* pcommit */:1, clflushopt:1,
+                             clwb:1, /* pt */:1, avx512pf:1, avx512er:1, 
avx512cd:1, sha:1, avx512bw:1, avx512vl:1;
+                    };
+                };
+                union {
+                    uint32_t _7c0;
+                    struct {
+                        bool prefetchwt1:1, avx512vbmi:1, :1, pku: 1, :1, :1, 
:1, :1,
+                             :1, :1, :1, :1, :1, :1, :1, :1,
+                             :1, :1, :1, :1, :1, :1, :1, :1,
+                             :1, :1, :1, :1, :1, :1, :1, :1;
+                    };
+                };
+                union {
+                    uint32_t _7d0;
+                    struct {
+                        bool :1, avx512_4vnniw:1, avx512_4fmaps:1, :1, :1, :1, 
:1, :1,
+                             :1, :1, :1, :1, :1, :1, :1, :1,
+                             :1, :1, :1, :1, :1, :1, :1, :1,
+                             :1, :1, :1, :1, :1, :1, :1, :1;
+                    };
+                };
             };
         };
     } feat;
@@ -126,7 +171,16 @@ struct cpuid_policy
                 uint32_t xcr0_low, :32, :32, xcr0_high;
             };
             struct {
-                uint32_t Da1, :32, xss_low, xss_high;
+                union {
+                    uint32_t Da1;
+                    struct {
+                        bool xsaveopt: 1, xsavec: 1, xgetbv1: 1, xsaves: 1, 
:1, :1, :1, :1,
+                             :1, :1, :1, :1, :1, :1, :1, :1,
+                             :1, :1, :1, :1, :1, :1, :1, :1,
+                             :1, :1, :1, :1, :1, :1, :1, :1;
+                    };
+                };
+                uint32_t :32, xss_low, xss_high;
             };
         };
     } xstate;
@@ -142,7 +196,25 @@ struct cpuid_policy
 
             /* Leaf 0x80000001 - family/model/stepping and features. */
             struct {
-                uint32_t :32, :32, e1c, e1d;
+                uint32_t :32, :32;
+                union {
+                    uint32_t e1c;
+                    struct {
+                        bool lahf_lm:1, cmp_legacy:1, svm:1, extapic:1, 
cr8_legacy:1, abm:1, sse4a:1, misalignsse:1,
+                             _3dnowprefetch:1, osvw: 1, ibs:1, xop:1, 
skinit:1, wdt:1, :1, lwp:1,
+                             fma4:1, :1, :1, nodeid_msr:1, :1, tbm:1, 
topoext:1, :1,
+                             :1, :1, dbext:1, :1, :1, monitorx:1, :1, :1;
+                    };
+                };
+                union {
+                    uint32_t e1d;
+                    struct {
+                        bool :1, :1, :1, :1, :1, :1, :1, :1,
+                             :1, :1, :1, syscall:1, :1, :1, :1, :1,
+                             :1, :1, :1, :1, nx:1, :1, mmxext:1, :1,
+                             :1, ffxsr:1, page1gb:1, rdtscp:1, :1, lm:1, 
_3dnowext:1, _3dnow:1;
+                    };
+                };
             };
 
             uint64_t :64, :64; /* Brand string. */
@@ -153,12 +225,31 @@ struct cpuid_policy
 
             /* Leaf 0x80000007 - Advanced Power Management. */
             struct {
-                uint32_t :32, :32, :32, e7d;
+                uint32_t :32, :32, :32;
+                union {
+                    uint32_t e7d;
+                    struct {
+                        bool :1, :1, :1, :1, :1, :1, :1, :1,
+                             itsc:1, :1, efro:1, :1, :1, :1, :1, :1,
+                             :1, :1, :1, :1, :1, :1, :1, :1,
+                             :1, :1, :1, :1, :1, :1, :1, :1;
+                    };
+                };
             };
 
             /* Leaf 0x80000008 - Misc addr/feature info. */
             struct {
-                uint32_t :32, e8b, :32, :32;
+                uint32_t :32;
+                union {
+                    uint32_t e8b;
+                    struct {
+                        bool clzero:1, :1, :1, :1, :1, :1, :1, :1,
+                             :1, :1, :1, :1, :1, :1, :1, :1,
+                             :1, :1, :1, :1, :1, :1, :1, :1,
+                             :1, :1, :1, :1, :1, :1, :1, :1;
+                    };
+                };
+                uint32_t :32, :32;
             };
         };
     } extd;
-- 
2.1.4


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

 


Rackspace

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