tools/misc: Tweak reserved bit handling for xen-cpuid

Instead of printing REZ, use NULL pointers to indicate missing information,
and have dump_leaf() print out the bit which is unknown.

E.g.

....
Dynamic sets:
Raw                       178bfbff:fed8320b:2fd3fbff:35c233ff:0000000f:209c01a9:00000000:00006799:00001007:00000000
  [00] 0x00000001.edx     fpu vme de pse tsc msr pae mce cx8 apic sysenter mtrr pge  ...
  [01] 0x00000001.ecx     sse3 pclmulqdq monitor ssse3 fma cx16 sse41 sse42 movebe   ...
  [02] 0x80000001.edx     fpu vme de pse tsc msr pae mce cx8 apic syscall mtrr pge   ...
  [03] 0x80000001.ecx     lahf_lm cmp svm extapic cr8d lzcnt sse4a msse 3dnowpf osvw ...
  [04] 0x0000000d:1.eax   xsaveopt xsavec xgetbv1 xsaves
  [05] 0x00000007:0.ebx   fsgsbase bmi1 avx2 smep bmi2 rdseed adx smap clflushopt sha
  [06] 0x00000007:0.ecx
  [07] 0x80000007.edx     <0> <3> <4> <7> itsc <9> efro <13> <14>
  [08] 0x80000008.ebx     clzero <1> <2> ibpb
  [09] 0x00000007:0.edx
...

which is the output on an AMD EPYC system, where Xen doesn't know about, and
has therefore masked, most of the more advanced thermal/perf features.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
This commit is contained in:
Andrew Cooper committed 2018-03-01 18:04:48 +00:00
1 parent 301e96ea1f
commit 59afdb8a81
1 file changed
+18 -37
+18 -37
View File
@@ -16,12 +16,12 @@ static const char *str_1d[32] =
[ 4] = "tsc", [ 5] = "msr",
[ 6] = "pae", [ 7] = "mce",
[ 8] = "cx8", [ 9] = "apic",
[10] = "REZ", [11] = "sysenter",
/* [10] */ [11] = "sysenter",
[12] = "mtrr", [13] = "pge",
[14] = "mca", [15] = "cmov",
[16] = "pat", [17] = "pse36",
[18] = "psn", [19] = "clflush",
[20] = "REZ", [21] = "ds",
/* [20] */ [21] = "ds",
[22] = "acpi", [23] = "mmx",
[24] = "fxsr", [25] = "sse",
[26] = "sse2", [27] = "ss",
@@ -39,7 +39,7 @@ static const char *str_1c[32] =
[10] = "cntx-id", [11] = "sdgb",
[12] = "fma", [13] = "cx16",
[14] = "xtpr", [15] = "pdcm",
[16] = "REZ", [17] = "pcid",
/* [16] */ [17] = "pcid",
[18] = "dca", [19] = "sse41",
[20] = "sse42", [21] = "x2apic",
[22] = "movebe", [23] = "popcnt",
@@ -56,16 +56,16 @@ static const char *str_e1d[32] =
[ 4] = "tsc", [ 5] = "msr",
[ 6] = "pae", [ 7] = "mce",
[ 8] = "cx8", [ 9] = "apic",
[10] = "REZ", [11] = "syscall",
/* [10] */ [11] = "syscall",
[12] = "mtrr", [13] = "pge",
[14] = "mca", [15] = "cmov",
[16] = "fcmov", [17] = "pse36",
[18] = "REZ", [19] = "mp",
[20] = "nx", [21] = "REZ",
/* [18] */ [19] = "mp",
[20] = "nx", /* [21] */
[22] = "mmx+", [23] = "mmx",
[24] = "fxsr", [25] = "fxsr+",
[26] = "pg1g", [27] = "rdtscp",
[28] = "REZ", [29] = "lm",
/* [28] */ [29] = "lm",
[30] = "3dnow+", [31] = "3dnow",
};
@@ -78,16 +78,14 @@ static const char *str_e1c[32] =
[ 8] = "3dnowpf", [ 9] = "osvw",
[10] = "ibs", [11] = "xop",
[12] = "skinit", [13] = "wdt",
[14] = "REZ", [15] = "lwp",
/* [14] */ [15] = "lwp",
[16] = "fma4", [17] = "tce",
[18] = "REZ", [19] = "nodeid",
[20] = "REZ", [21] = "tbm",
/* [18] */ [19] = "nodeid",
/* [20] */ [21] = "tbm",
[22] = "topoext", [23] = "perfctr_core",
[24] = "perfctr_nb", [25] = "REZ",
[24] = "perfctr_nb", /* [25] */
[26] = "dbx", [27] = "perftsc",
[28] = "pcx_l2i", [29] = "monitorx",
[30 ... 31] = "REZ",
};
static const char *str_7b0[32] =
@@ -114,8 +112,6 @@ static const char *str_Da1[32] =
{
[ 0] = "xsaveopt", [ 1] = "xsavec",
[ 2] = "xgetbv1", [ 3] = "xsaves",
[4 ... 31] = "REZ",
};
static const char *str_7c0[32] =
@@ -124,49 +120,29 @@ static const char *str_7c0[32] =
[ 2] = "umip", [ 3] = "pku",
[ 4] = "ospke",
[5 ... 13] = "REZ",
[14] = "avx512_vpopcntdq",
[15 ... 21] = "REZ",
[22] = "rdpid",
[23 ... 31] = "REZ",
};
static const char *str_e7d[32] =
{
[0 ... 7] = "REZ",
[ 8] = "itsc", [ 9] = "REZ",
[ 8] = "itsc",
[10] = "efro",
[11 ... 31] = "REZ",
};
static const char *str_e8b[32] =
{
[ 0] = "clzero",
[1 ... 11] = "REZ",
[12] = "ibpb",
[13 ... 31] = "REZ",
};
static const char *str_7d0[32] =
{
[0 ... 1] = "REZ",
[ 2] = "avx512_4vnniw", [ 3] = "avx512_4fmaps",
[4 ... 25] = "REZ",
[26] = "ibrsb", [27] = "stibp",
[28 ... 31] = "REZ",
};
static struct {
@@ -213,7 +189,12 @@ static void dump_leaf(uint32_t leaf, const char **strs)
for ( i = 0; i < 32; ++i )
if ( leaf & (1u << i) )
printf(" %s", strs[i] ?: "???" );
{
if ( strs[i] )
printf(" %s", strs[i]);
else
printf(" <%u>", i);
}
}
static void decode_featureset(const uint32_t *features,
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.