...
 
Commits (4)
......@@ -125,6 +125,8 @@ typedef struct _virCPUx86Model virCPUx86Model;
typedef virCPUx86Model *virCPUx86ModelPtr;
struct _virCPUx86Model {
char *name;
bool decodeHost;
bool decodeGuest;
virCPUx86VendorPtr vendor;
size_t nsignatures;
uint32_t *signatures;
......@@ -1347,6 +1349,44 @@ x86ModelCompare(virCPUx86ModelPtr model1,
}
static int
x86ModelParseDecode(virCPUx86ModelPtr model,
xmlXPathContextPtr ctxt)
{
g_autofree char *host = NULL;
g_autofree char *guest = NULL;
int val;
if ((host = virXPathString("string(./decode/@host)", ctxt)))
val = virTristateSwitchTypeFromString(host);
else
val = VIR_TRISTATE_SWITCH_ABSENT;
if (val <= 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("invalid or missing decode/host attribute in CPU model %s"),
model->name);
return -1;
}
model->decodeHost = val == VIR_TRISTATE_SWITCH_ON;
if ((guest = virXPathString("string(./decode/@guest)", ctxt)))
val = virTristateSwitchTypeFromString(guest);
else
val = VIR_TRISTATE_SWITCH_ABSENT;
if (val <= 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("invalid or missing decode/guest attribute in CPU model %s"),
model->name);
return -1;
}
model->decodeGuest = val == VIR_TRISTATE_SWITCH_ON;
return 0;
}
static int
x86ModelParseAncestor(virCPUx86ModelPtr model,
xmlXPathContextPtr ctxt,
......@@ -1521,6 +1561,9 @@ x86ModelParse(xmlXPathContextPtr ctxt,
model->name = g_strdup(name);
if (x86ModelParseDecode(model, ctxt) < 0)
goto cleanup;
if (x86ModelParseAncestor(model, ctxt, map) < 0)
goto cleanup;
......@@ -2001,10 +2044,23 @@ x86DecodeUseCandidate(virCPUx86ModelPtr current,
virCPUx86ModelPtr candidate,
virCPUDefPtr cpuCandidate,
uint32_t signature,
const char *preferred,
bool checkPolicy)
const char *preferred)
{
if (checkPolicy) {
if (cpuCandidate->type == VIR_CPU_TYPE_HOST &&
!candidate->decodeHost) {
VIR_DEBUG("%s is not supposed to be used for host CPU definition",
cpuCandidate->model);
return 0;
}
if (cpuCandidate->type == VIR_CPU_TYPE_GUEST &&
!candidate->decodeGuest) {
VIR_DEBUG("%s is not supposed to be used for guest CPU definition",
cpuCandidate->model);
return 0;
}
if (cpuCandidate->type == VIR_CPU_TYPE_HOST) {
size_t i;
for (i = 0; i < cpuCandidate->nfeatures; i++) {
if (cpuCandidate->features[i].policy == VIR_CPU_FEATURE_DISABLE)
......@@ -2166,8 +2222,7 @@ x86Decode(virCPUDefPtr cpu,
if ((rc = x86DecodeUseCandidate(model, cpuModel,
candidate, cpuCandidate,
signature, preferred,
cpu->type == VIR_CPU_TYPE_HOST))) {
signature, preferred))) {
virCPUDefFree(cpuModel);
cpuModel = cpuCandidate;
model = candidate;
......
......@@ -20,6 +20,7 @@ cpumap_DATA = \
cpu_map/x86_Broadwell-noTSX.xml \
cpu_map/x86_Broadwell-noTSX-IBRS.xml \
cpu_map/x86_Cascadelake-Server.xml \
cpu_map/x86_Cascadelake-Server-noTSX.xml \
cpu_map/x86_Conroe.xml \
cpu_map/x86_core2duo.xml \
cpu_map/x86_coreduo.xml \
......@@ -33,7 +34,9 @@ cpumap_DATA = \
cpu_map/x86_Haswell-noTSX.xml \
cpu_map/x86_Haswell-noTSX-IBRS.xml \
cpu_map/x86_Icelake-Client.xml \
cpu_map/x86_Icelake-Client-noTSX.xml \
cpu_map/x86_Icelake-Server.xml \
cpu_map/x86_Icelake-Server-noTSX.xml \
cpu_map/x86_IvyBridge.xml \
cpu_map/x86_IvyBridge-IBRS.xml \
cpu_map/x86_kvm32.xml \
......@@ -58,8 +61,10 @@ cpumap_DATA = \
cpu_map/x86_SandyBridge-IBRS.xml \
cpu_map/x86_Skylake-Client.xml \
cpu_map/x86_Skylake-Client-IBRS.xml \
cpu_map/x86_Skylake-Client-noTSX-IBRS.xml \
cpu_map/x86_Skylake-Server.xml \
cpu_map/x86_Skylake-Server-IBRS.xml \
cpu_map/x86_Skylake-Server-noTSX-IBRS.xml \
cpu_map/x86_Westmere.xml \
cpu_map/x86_Westmere-IBRS.xml \
$(NULL)
......
......@@ -44,11 +44,16 @@
<include filename="x86_Broadwell-IBRS.xml"/>
<include filename="x86_Skylake-Client.xml"/>
<include filename="x86_Skylake-Client-IBRS.xml"/>
<include filename="x86_Skylake-Client-noTSX-IBRS.xml"/>
<include filename="x86_Skylake-Server.xml"/>
<include filename="x86_Skylake-Server-IBRS.xml"/>
<include filename="x86_Skylake-Server-noTSX-IBRS.xml"/>
<include filename="x86_Cascadelake-Server.xml"/>
<include filename="x86_Cascadelake-Server-noTSX.xml"/>
<include filename="x86_Icelake-Client.xml"/>
<include filename="x86_Icelake-Client-noTSX.xml"/>
<include filename="x86_Icelake-Server.xml"/>
<include filename="x86_Icelake-Server-noTSX.xml"/>
<!-- AMD CPUs -->
<include filename="x86_athlon.xml"/>
......
<cpus>
<model name='486'>
<decode host='on' guest='on'/>
<feature name='fpu'/>
<feature name='pse'/>
<feature name='vme'/>
......
<cpus>
<model name='Broadwell-IBRS'>
<decode host='on' guest='on'/>
<signature family='6' model='61'/> <!-- 0306d0 -->
<signature family='6' model='71'/> <!-- 040670 -->
<signature family='6' model='79'/> <!-- 0406f0 -->
......
<cpus>
<model name='Broadwell-noTSX-IBRS'>
<decode host='on' guest='on'/>
<signature family='6' model='61'/> <!-- 0306d0 -->
<signature family='6' model='71'/> <!-- 040670 -->
<signature family='6' model='79'/> <!-- 0406f0 -->
......
<cpus>
<model name='Broadwell-noTSX'>
<decode host='on' guest='on'/>
<signature family='6' model='61'/> <!-- 0306d0 -->
<signature family='6' model='71'/> <!-- 040670 -->
<signature family='6' model='79'/> <!-- 0406f0 -->
......
<cpus>
<model name='Broadwell'>
<decode host='on' guest='on'/>
<signature family='6' model='61'/> <!-- 0306d0 -->
<signature family='6' model='71'/> <!-- 040670 -->
<signature family='6' model='79'/> <!-- 0406f0 -->
......
<cpus>
<model name='Cascadelake-Server-noTSX'>
<decode host='on' guest='off'/>
<signature family='6' model='85'/> <!-- 050654 -->
<vendor name='Intel'/>
<feature name='3dnowprefetch'/>
<feature name='abm'/>
<feature name='adx'/>
<feature name='aes'/>
<feature name='apic'/>
<feature name='arat'/>
<feature name='avx'/>
<feature name='avx2'/>
<feature name='avx512bw'/>
<feature name='avx512cd'/>
<feature name='avx512dq'/>
<feature name='avx512f'/>
<feature name='avx512vl'/>
<feature name='avx512vnni'/>
<feature name='bmi1'/>
<feature name='bmi2'/>
<feature name='clflush'/>
<feature name='clflushopt'/>
<feature name='clwb'/>
<feature name='cmov'/>
<feature name='cx16'/>
<feature name='cx8'/>
<feature name='de'/>
<feature name='erms'/>
<feature name='f16c'/>
<feature name='fma'/>
<feature name='fpu'/>
<feature name='fsgsbase'/>
<feature name='fxsr'/>
<feature name='invpcid'/>
<feature name='lahf_lm'/>
<feature name='lm'/>
<feature name='mca'/>
<feature name='mce'/>
<feature name='mmx'/>
<feature name='movbe'/>
<feature name='mpx'/>
<feature name='msr'/>
<feature name='mtrr'/>
<feature name='nx'/>
<feature name='pae'/>
<feature name='pat'/>
<feature name='pcid'/>
<feature name='pclmuldq'/>
<feature name='pdpe1gb'/>
<feature name='pge'/>
<feature name='pni'/>
<feature name='popcnt'/>
<feature name='pse'/>
<feature name='pse36'/>
<feature name='rdrand'/>
<feature name='rdseed'/>
<feature name='rdtscp'/>
<feature name='sep'/>
<feature name='smap'/>
<feature name='smep'/>
<feature name='spec-ctrl'/>
<feature name='ssbd'/>
<feature name='sse'/>
<feature name='sse2'/>
<feature name='sse4.1'/>
<feature name='sse4.2'/>
<feature name='ssse3'/>
<feature name='syscall'/>
<feature name='tsc'/>
<feature name='tsc-deadline'/>
<feature name='vme'/>
<feature name='x2apic'/>
<feature name='xgetbv1'/>
<feature name='xsave'/>
<feature name='xsavec'/>
<feature name='xsaveopt'/>
</model>
</cpus>
<cpus>
<model name='Cascadelake-Server'>
<decode host='on' guest='on'/>
<signature family='6' model='85'/> <!-- 050654 -->
<vendor name='Intel'/>
<feature name='3dnowprefetch'/>
......
<cpus>
<model name='Conroe'>
<decode host='on' guest='on'/>
<signature family='6' model='15'/> <!-- 0006f0 -->
<signature family='6' model='22'/> <!-- 010660 -->
<vendor name='Intel'/>
......
<cpus>
<model name='Dhyana'>
<decode host='on' guest='on'/>
<signature family='24' model='0'/> <!-- 900f00 -->
<vendor name='Hygon'/>
<feature name='3dnowprefetch'/>
......
<cpus>
<model name='EPYC-IBPB'>
<decode host='on' guest='on'/>
<signature family='23' model='1'/> <!-- 800f10 -->
<vendor name='AMD'/>
<feature name='3dnowprefetch'/>
......
<cpus>
<model name='EPYC'>
<decode host='on' guest='on'/>
<signature family='23' model='1'/> <!-- 800f10 -->
<vendor name='AMD'/>
<feature name='3dnowprefetch'/>
......
<cpus>
<model name='Haswell-IBRS'>
<decode host='on' guest='on'/>
<signature family='6' model='60'/> <!-- 0306c0 -->
<signature family='6' model='63'/> <!-- 0306f0 -->
<signature family='6' model='69'/> <!-- 040650 -->
......
<cpus>
<model name='Haswell-noTSX-IBRS'>
<decode host='on' guest='on'/>
<signature family='6' model='60'/> <!-- 0306c0 -->
<signature family='6' model='63'/> <!-- 0306f0 -->
<signature family='6' model='69'/> <!-- 040650 -->
......
<cpus>
<model name='Haswell-noTSX'>
<decode host='on' guest='on'/>
<signature family='6' model='60'/> <!-- 0306c0 -->
<signature family='6' model='63'/> <!-- 0306f0 -->
<signature family='6' model='69'/> <!-- 040650 -->
......
<cpus>
<model name='Haswell'>
<decode host='on' guest='on'/>
<signature family='6' model='60'/> <!-- 0306c0 -->
<signature family='6' model='63'/> <!-- 0306f0 -->
<signature family='6' model='69'/> <!-- 040650 -->
......
<cpus>
<model name='Icelake-Client-noTSX'>
<decode host='on' guest='off'/>
<signature family='6' model='126'/> <!-- 0706e0 -->
<vendor name='Intel'/>
<feature name='3dnowprefetch'/>
<feature name='abm'/>
<feature name='adx'/>
<feature name='aes'/>
<feature name='apic'/>
<feature name='arat'/>
<feature name='avx'/>
<feature name='avx2'/>
<feature name='avx512-vpopcntdq'/>
<feature name='avx512bitalg'/>
<feature name='avx512vbmi'/>
<feature name='avx512vbmi2'/>
<feature name='avx512vnni'/>
<feature name='bmi1'/>
<feature name='bmi2'/>
<feature name='clflush'/>
<feature name='cmov'/>
<feature name='cx16'/>
<feature name='cx8'/>
<feature name='de'/>
<feature name='erms'/>
<feature name='f16c'/>
<feature name='fma'/>
<feature name='fpu'/>
<feature name='fsgsbase'/>
<feature name='fxsr'/>
<feature name='gfni'/>
<feature name='intel-pt'/>
<feature name='invpcid'/>
<feature name='lahf_lm'/>
<feature name='lm'/>
<feature name='mca'/>
<feature name='mce'/>
<feature name='mmx'/>
<feature name='movbe'/>
<feature name='mpx'/>
<feature name='msr'/>
<feature name='mtrr'/>
<feature name='nx'/>
<feature name='pae'/>
<feature name='pat'/>
<feature name='pcid'/>
<feature name='pclmuldq'/>
<feature name='pge'/>
<feature name='pku'/>
<feature name='pni'/>
<feature name='popcnt'/>
<feature name='pse'/>
<feature name='pse36'/>
<feature name='rdrand'/>
<feature name='rdseed'/>
<feature name='rdtscp'/>
<feature name='sep'/>
<feature name='smap'/>
<feature name='smep'/>
<feature name='spec-ctrl'/>
<feature name='ssbd'/>
<feature name='sse'/>
<feature name='sse2'/>
<feature name='sse4.1'/>
<feature name='sse4.2'/>
<feature name='ssse3'/>
<feature name='syscall'/>
<feature name='tsc'/>
<feature name='tsc-deadline'/>
<feature name='umip'/>
<feature name='vaes'/>
<feature name='vme'/>
<feature name='vpclmulqdq'/>
<feature name='wbnoinvd'/>
<feature name='x2apic'/>
<feature name='xgetbv1'/>
<feature name='xsave'/>
<feature name='xsavec'/>
<feature name='xsaveopt'/>
</model>
</cpus>
<cpus>
<model name='Icelake-Client'>
<decode host='on' guest='on'/>
<signature family='6' model='126'/> <!-- 0706e0 -->
<vendor name='Intel'/>
<feature name='3dnowprefetch'/>
......
<cpus>
<model name='Icelake-Server-noTSX'>
<decode host='on' guest='off'/>
<signature family='6' model='134'/> <!-- 080660 -->
<vendor name='Intel'/>
<feature name='3dnowprefetch'/>
<feature name='abm'/>
<feature name='adx'/>
<feature name='aes'/>
<feature name='apic'/>
<feature name='arat'/>
<feature name='avx'/>
<feature name='avx2'/>
<feature name='avx512-vpopcntdq'/>
<feature name='avx512bitalg'/>
<feature name='avx512bw'/>
<feature name='avx512cd'/>
<feature name='avx512dq'/>
<feature name='avx512f'/>
<feature name='avx512vbmi'/>
<feature name='avx512vbmi2'/>
<feature name='avx512vl'/>
<feature name='avx512vnni'/>
<feature name='bmi1'/>
<feature name='bmi2'/>
<feature name='clflush'/>
<feature name='clflushopt'/>
<feature name='clwb'/>
<feature name='cmov'/>
<feature name='cx16'/>
<feature name='cx8'/>
<feature name='de'/>
<feature name='erms'/>
<feature name='f16c'/>
<feature name='fma'/>
<feature name='fpu'/>
<feature name='fsgsbase'/>
<feature name='fxsr'/>
<feature name='gfni'/>
<feature name='intel-pt'/>
<feature name='invpcid'/>
<feature name='la57'/>
<feature name='lahf_lm'/>
<feature name='lm'/>
<feature name='mca'/>
<feature name='mce'/>
<feature name='mmx'/>
<feature name='movbe'/>
<feature name='mpx'/>
<feature name='msr'/>
<feature name='mtrr'/>
<feature name='nx'/>
<feature name='pae'/>
<feature name='pat'/>
<feature name='pcid'/>
<feature name='pclmuldq'/>
<feature name='pdpe1gb'/>
<feature name='pge'/>
<feature name='pku'/>
<feature name='pni'/>
<feature name='popcnt'/>
<feature name='pse'/>
<feature name='pse36'/>
<feature name='rdrand'/>
<feature name='rdseed'/>
<feature name='rdtscp'/>
<feature name='sep'/>
<feature name='smap'/>
<feature name='smep'/>
<feature name='spec-ctrl'/>
<feature name='ssbd'/>
<feature name='sse'/>
<feature name='sse2'/>
<feature name='sse4.1'/>
<feature name='sse4.2'/>
<feature name='ssse3'/>
<feature name='syscall'/>
<feature name='tsc'/>
<feature name='tsc-deadline'/>
<feature name='umip'/>
<feature name='vaes'/>
<feature name='vme'/>
<feature name='vpclmulqdq'/>
<feature name='wbnoinvd'/>
<feature name='x2apic'/>
<feature name='xgetbv1'/>
<feature name='xsave'/>
<feature name='xsavec'/>
<feature name='xsaveopt'/>
</model>
</cpus>
<cpus>
<model name='Icelake-Server'>
<decode host='on' guest='on'/>
<signature family='6' model='134'/> <!-- 080660 -->
<vendor name='Intel'/>
<feature name='3dnowprefetch'/>
......
<cpus>
<model name='IvyBridge-IBRS'>
<decode host='on' guest='on'/>
<signature family='6' model='58'/> <!-- 0306a0 -->
<signature family='6' model='62'/> <!-- 0306e0 -->
<vendor name='Intel'/>
......
<cpus>
<model name='IvyBridge'>
<decode host='on' guest='on'/>
<signature family='6' model='58'/> <!-- 0306a0 -->
<signature family='6' model='62'/> <!-- 0306e0 -->
<vendor name='Intel'/>
......
<cpus>
<model name='Nehalem-IBRS'>
<decode host='on' guest='on'/>
<signature family='6' model='26'/> <!-- 0106a0 -->
<signature family='6' model='30'/> <!-- 0106e0 -->
<signature family='6' model='31'/> <!-- 0106f0 -->
......
<cpus>
<model name='Nehalem'>
<decode host='on' guest='on'/>
<signature family='6' model='26'/> <!-- 0106a0 -->
<signature family='6' model='30'/> <!-- 0106e0 -->
<signature family='6' model='31'/> <!-- 0106f0 -->
......
<cpus>
<model name='Opteron_G1'>
<decode host='on' guest='on'/>
<signature family='15' model='6'/> <!-- 100e60 -->
<vendor name='AMD'/>
<feature name='apic'/>
......
<cpus>
<model name='Opteron_G2'>
<decode host='on' guest='on'/>
<signature family='15' model='6'/> <!-- 100e60 -->
<vendor name='AMD'/>
<feature name='apic'/>
......
<cpus>
<model name='Opteron_G3'>
<decode host='on' guest='on'/>
<signature family='15' model='6'/> <!-- 100e60 -->
<vendor name='AMD'/>
<feature name='abm'/>
......
<cpus>
<model name='Opteron_G4'>
<decode host='on' guest='on'/>
<signature family='21' model='1'/> <!-- 600f10 -->
<vendor name='AMD'/>
<feature name='3dnowprefetch'/>
......
<cpus>
<model name='Opteron_G5'>
<decode host='on' guest='on'/>
<signature family='21' model='2'/> <!-- 600f20 -->
<vendor name='AMD'/>
<feature name='3dnowprefetch'/>
......
<cpus>
<model name='Penryn'>
<decode host='on' guest='on'/>
<signature family='6' model='23'/> <!-- 010670 -->
<signature family='6' model='29'/> <!-- 0106d0 -->
<vendor name='Intel'/>
......
<cpus>
<model name='SandyBridge-IBRS'>
<decode host='on' guest='on'/>
<signature family='6' model='42'/> <!-- 0206a0 -->
<signature family='6' model='45'/> <!-- 0206d0 -->
<vendor name='Intel'/>
......
<cpus>
<model name='SandyBridge'>
<decode host='on' guest='on'/>
<signature family='6' model='42'/> <!-- 0206a0 -->
<signature family='6' model='45'/> <!-- 0206d0 -->
<vendor name='Intel'/>
......
<cpus>
<model name='Skylake-Client-IBRS'>
<decode host='on' guest='on'/>
<signature family='6' model='94'/> <!-- 0506e0 -->
<signature family='6' model='78'/> <!-- 0406e0 -->
<!-- These are Kaby Lake and Coffee Lake successors to Skylake,
......
<cpus>
<model name='Skylake-Client-noTSX-IBRS'>
<decode host='on' guest='off'/>
<signature family='6' model='94'/> <!-- 0506e0 -->
<signature family='6' model='78'/> <!-- 0406e0 -->
<!-- These are Kaby Lake and Coffee Lake successors to Skylake,
but we don't have specific models for them. -->
<signature family='6' model='142'/> <!-- 0806e0 -->
<signature family='6' model='158'/> <!-- 0906e0 -->
<vendor name='Intel'/>
<feature name='3dnowprefetch'/>
<feature name='abm'/>
<feature name='adx'/>
<feature name='aes'/>
<feature name='apic'/>
<feature name='arat'/>
<feature name='avx'/>
<feature name='avx2'/>
<feature name='bmi1'/>
<feature name='bmi2'/>
<feature name='clflush'/>
<feature name='cmov'/>
<feature name='cx16'/>
<feature name='cx8'/>
<feature name='de'/>
<feature name='erms'/>
<feature name='f16c'/>
<feature name='fma'/>
<feature name='fpu'/>
<feature name='fsgsbase'/>
<feature name='fxsr'/>
<feature name='invpcid'/>
<feature name='lahf_lm'/>
<feature name='lm'/>
<feature name='mca'/>
<feature name='mce'/>
<feature name='mmx'/>
<feature name='movbe'/>
<feature name='mpx'/>
<feature name='msr'/>
<feature name='mtrr'/>
<feature name='nx'/>
<feature name='pae'/>
<feature name='pat'/>
<feature name='pcid'/>
<feature name='pclmuldq'/>
<feature name='pge'/>
<feature name='pni'/>
<feature name='popcnt'/>
<feature name='pse'/>
<feature name='pse36'/>
<feature name='rdrand'/>
<feature name='rdseed'/>
<feature name='rdtscp'/>
<feature name='sep'/>
<feature name='smap'/>
<feature name='smep'/>
<feature name='spec-ctrl'/>
<feature name='sse'/>
<feature name='sse2'/>
<feature name='sse4.1'/>
<feature name='sse4.2'/>
<feature name='ssse3'/>
<feature name='syscall'/>
<feature name='tsc'/>
<feature name='tsc-deadline'/>
<feature name='vme'/>
<feature name='x2apic'/>
<feature name='xgetbv1'/>
<feature name='xsave'/>
<feature name='xsavec'/>
<feature name='xsaveopt'/>
</model>
</cpus>
<cpus>
<model name='Skylake-Client'>
<decode host='on' guest='on'/>
<signature family='6' model='94'/> <!-- 0506e0 -->
<signature family='6' model='78'/> <!-- 0406e0 -->
<!-- These are Kaby Lake and Coffee Lake successors to Skylake,
......
<cpus>
<model name='Skylake-Server-IBRS'>
<decode host='on' guest='on'/>
<signature family='6' model='85'/> <!-- 050654 -->
<vendor name='Intel'/>
<feature name='3dnowprefetch'/>
......
<cpus>
<model name='Skylake-Server-noTSX-IBRS'>
<decode host='on' guest='off'/>
<signature family='6' model='85'/> <!-- 050654 -->
<vendor name='Intel'/>
<feature name='3dnowprefetch'/>
<feature name='abm'/>
<feature name='adx'/>
<feature name='aes'/>
<feature name='apic'/>
<feature name='arat'/>
<feature name='avx'/>
<feature name='avx2'/>
<feature name='avx512bw'/>
<feature name='avx512cd'/>
<feature name='avx512dq'/>
<feature name='avx512f'/>
<feature name='avx512vl'/>
<feature name='bmi1'/>
<feature name='bmi2'/>
<feature name='clflush'/>
<feature name='clwb'/>
<feature name='cmov'/>
<feature name='cx16'/>
<feature name='cx8'/>
<feature name='de'/>
<feature name='erms'/>
<feature name='f16c'/>
<feature name='fma'/>
<feature name='fpu'/>
<feature name='fsgsbase'/>
<feature name='fxsr'/>
<feature name='invpcid'/>
<feature name='lahf_lm'/>
<feature name='lm'/>
<feature name='mca'/>
<feature name='mce'/>
<feature name='mmx'/>
<feature name='movbe'/>
<feature name='mpx'/>
<feature name='msr'/>
<feature name='mtrr'/>
<feature name='nx'/>
<feature name='pae'/>
<feature name='pat'/>
<feature name='pcid'/>
<feature name='pclmuldq'/>
<feature name='pdpe1gb'/>
<feature name='pge'/>
<feature name='pni'/>
<feature name='popcnt'/>
<feature name='pse'/>
<feature name='pse36'/>
<feature name='rdrand'/>
<feature name='rdseed'/>
<feature name='rdtscp'/>
<feature name='sep'/>
<feature name='smap'/>
<feature name='smep'/>
<feature name='spec-ctrl'/>
<feature name='sse'/>
<feature name='sse2'/>
<feature name='sse4.1'/>
<feature name='sse4.2'/>
<feature name='ssse3'/>
<feature name='syscall'/>
<feature name='tsc'/>
<feature name='tsc-deadline'/>
<feature name='vme'/>
<feature name='x2apic'/>
<feature name='xgetbv1'/>
<feature name='xsave'/>
<feature name='xsavec'/>
<feature name='xsaveopt'/>
</model>
</cpus>
<cpus>
<model name='Skylake-Server'>
<decode host='on' guest='on'/>
<signature family='6' model='85'/> <!-- 050654 -->
<vendor name='Intel'/>
<feature name='3dnowprefetch'/>
......
<cpus>
<model name='Westmere-IBRS'>
<decode host='on' guest='on'/>
<signature family='6' model='44'/> <!-- 0206c0 -->
<vendor name='Intel'/>
<feature name='aes'/>
......
<cpus>
<model name='Westmere'>
<decode host='on' guest='on'/>
<signature family='6' model='44'/> <!-- 0206c0 -->
<signature family='6' model='47'/> <!-- 0206f0 -->
<signature family='6' model='37'/> <!-- 020650 -->
......
<cpus>
<model name='athlon'>
<decode host='on' guest='on'/>
<vendor name='AMD'/>
<feature name='3dnow'/>
<feature name='3dnowext'/>
......
<cpus>
<model name='core2duo'>
<decode host='on' guest='on'/>
<vendor name='Intel'/>
<feature name='apic'/>
<feature name='clflush'/>
......
<cpus>
<model name='coreduo'>
<decode host='on' guest='on'/>
<vendor name='Intel'/>
<feature name='apic'/>
<feature name='clflush'/>
......
<cpus>
<model name='cpu64-rhel5'>
<decode host='on' guest='on'/>
<feature name='apic'/>
<feature name='clflush'/>
<feature name='cmov'/>
......
<cpus>
<model name='cpu64-rhel6'>
<decode host='on' guest='on'/>
<feature name='apic'/>
<feature name='clflush'/>
<feature name='cmov'/>
......
<cpus>
<model name='kvm32'>
<decode host='on' guest='on'/>
<feature name='apic'/>
<feature name='clflush'/>
<feature name='cmov'/>
......
<cpus>
<model name='kvm64'>
<decode host='on' guest='on'/>
<feature name='apic'/>
<feature name='clflush'/>
<feature name='cmov'/>
......
<cpus>
<model name='n270'>
<decode host='on' guest='on'/>
<vendor name='Intel'/>
<feature name='apic'/>
<feature name='clflush'/>
......
<cpus>
<model name='pentium'>
<decode host='on' guest='on'/>
<feature name='cx8'/>
<feature name='de'/>
<feature name='fpu'/>
......
<cpus>
<model name='pentium2'>
<decode host='on' guest='on'/>
<feature name='cmov'/>
<feature name='cx8'/>
<feature name='de'/>
......
<cpus>
<model name='pentium3'>
<decode host='on' guest='on'/>
<feature name='cmov'/>
<feature name='cx8'/>
<feature name='de'/>
......
<cpus>
<model name='pentiumpro'>
<decode host='on' guest='on'/>
<feature name='apic'/>
<feature name='cmov'/>
<feature name='cx8'/>
......
<cpus>
<model name='phenom'>
<decode host='on' guest='on'/>
<vendor name='AMD'/>
<feature name='3dnow'/>
<feature name='3dnowext'/>
......
<cpus>
<model name='qemu32'>
<decode host='on' guest='on'/>
<feature name='apic'/>
<feature name='cmov'/>
<feature name='cx8'/>
......
<cpus>
<model name='qemu64'>
<decode host='on' guest='on'/>
<!-- These are supported only by TCG. KVM supports them only if the
host does. So we leave them out:
......
<cpu>
<arch>x86_64</arch>
<model>Broadwell-noTSX-IBRS</model>
<model>Skylake-Client-noTSX-IBRS</model>
<vendor>Intel</vendor>
<feature name='vme'/>
<feature name='ds'/>
<feature name='acpi'/>
<feature name='ss'/>
......@@ -18,22 +17,14 @@
<feature name='xtpr'/>
<feature name='pdcm'/>
<feature name='osxsave'/>
<feature name='f16c'/>
<feature name='rdrand'/>
<feature name='arat'/>
<feature name='tsc_adjust'/>
<feature name='mpx'/>
<feature name='clflushopt'/>
<feature name='intel-pt'/>
<feature name='md-clear'/>
<feature name='stibp'/>
<feature name='ssbd'/>
<feature name='xsaveopt'/>
<feature name='xsavec'/>
<feature name='xgetbv1'/>
<feature name='xsaves'/>
<feature name='pdpe1gb'/>
<feature name='abm'/>
<feature name='invtsc'/>
<feature name='skip-l1dfl-vmentry'/>
</cpu>
......@@ -63,8 +63,10 @@
<model usable='no'>athlon</model>
<model usable='yes'>Westmere-IBRS</model>
<model usable='yes'>Westmere</model>
<model usable='no'>Skylake-Server-noTSX-IBRS</model>
<model usable='no'>Skylake-Server-IBRS</model>
<model usable='no'>Skylake-Server</model>
<model usable='yes'>Skylake-Client-noTSX-IBRS</model>
<model usable='yes'>Skylake-Client-IBRS</model>
<model usable='yes'>Skylake-Client</model>
<model usable='yes'>SandyBridge-IBRS</model>
......@@ -79,7 +81,9 @@
<model usable='yes'>Nehalem</model>
<model usable='yes'>IvyBridge-IBRS</model>
<model usable='yes'>IvyBridge</model>
<model usable='no'>Icelake-Server-noTSX</model>
<model usable='no'>Icelake-Server</model>
<model usable='no'>Icelake-Client-noTSX</model>
<model usable='no'>Icelake-Client</model>
<model usable='yes'>Haswell-noTSX-IBRS</model>
<model usable='yes'>Haswell-noTSX</model>
......@@ -89,6 +93,7 @@
<model usable='no'>EPYC</model>
<model usable='no'>Dhyana</model>
<model usable='yes'>Conroe</model>
<model usable='no'>Cascadelake-Server-noTSX</model>
<model usable='no'>Cascadelake-Server</model>
<model usable='yes'>Broadwell-noTSX-IBRS</model>
<model usable='yes'>Broadwell-noTSX</model>
......
......@@ -73,8 +73,10 @@
<model usable='yes'>athlon</model>
<model usable='no'>Westmere-IBRS</model>
<model usable='no'>Westmere</model>
<model usable='no'>Skylake-Server-noTSX-IBRS</model>
<model usable='no'>Skylake-Server-IBRS</model>
<model usable='no'>Skylake-Server</model>
<model usable='no'>Skylake-Client-noTSX-IBRS</model>
<model usable='no'>Skylake-Client-IBRS</model>
<model usable='no'>Skylake-Client</model>
<model usable='no'>SandyBridge-IBRS</model>
......@@ -89,7 +91,9 @@
<model usable='no'>Nehalem</model>
<model usable='no'>IvyBridge-IBRS</model>
<model usable='no'>IvyBridge</model>
<model usable='no'>Icelake-Server-noTSX</model>
<model usable='no'>Icelake-Server</model>
<model usable='no'>Icelake-Client-noTSX</model>
<model usable='no'>Icelake-Client</model>
<model usable='no'>Haswell-noTSX-IBRS</model>
<model usable='no'>Haswell-noTSX</model>
......@@ -99,6 +103,7 @@
<model usable='no'>EPYC</model>
<model usable='no'>Dhyana</model>
<model usable='yes'>Conroe</model>
<model usable='no'>Cascadelake-Server-noTSX</model>
<model usable='no'>Cascadelake-Server</model>
<model usable='no'>Broadwell-noTSX-IBRS</model>
<model usable='no'>Broadwell-noTSX</model>
......
......@@ -62,8 +62,10 @@
<model usable='no'>athlon</model>
<model usable='yes'>Westmere-IBRS</model>
<model usable='yes'>Westmere</model>
<model usable='no'>Skylake-Server-noTSX-IBRS</model>
<model usable='no'>Skylake-Server-IBRS</model>
<model usable='no'>Skylake-Server</model>
<model usable='yes'>Skylake-Client-noTSX-IBRS</model>
<model usable='yes'>Skylake-Client-IBRS</model>
<model usable='yes'>Skylake-Client</model>
<model usable='yes'>SandyBridge-IBRS</model>
......@@ -78,7 +80,9 @@
<model usable='yes'>Nehalem</model>
<model usable='yes'>IvyBridge-IBRS</model>
<model usable='yes'>IvyBridge</model>
<model usable='no'>Icelake-Server-noTSX</model>
<model usable='no'>Icelake-Server</model>
<model usable='no'>Icelake-Client-noTSX</model>
<model usable='no'>Icelake-Client</model>
<model usable='yes'>Haswell-noTSX-IBRS</model>
<model usable='yes'>Haswell-noTSX</model>
......@@ -88,6 +92,7 @@
<model usable='no'>EPYC</model>
<model usable='no'>Dhyana</model>
<model usable='yes'>Conroe</model>
<model usable='no'>Cascadelake-Server-noTSX</model>
<model usable='no'>Cascadelake-Server</model>
<model usable='yes'>Broadwell-noTSX-IBRS</model>
<model usable='yes'>Broadwell-noTSX</model>
......
......@@ -63,8 +63,10 @@
<model usable='no'>athlon</model>
<model usable='yes'>Westmere-IBRS</model>
<model usable='yes'>Westmere</model>
<model usable='no'>Skylake-Server-noTSX-IBRS</model>
<model usable='no'>Skylake-Server-IBRS</model>
<model usable='no'>Skylake-Server</model>
<model usable='yes'>Skylake-Client-noTSX-IBRS</model>
<model usable='yes'>Skylake-Client-IBRS</model>
<model usable='yes'>Skylake-Client</model>
<model usable='yes'>SandyBridge-IBRS</model>
......@@ -79,7 +81,9 @@
<model usable='yes'>Nehalem</model>
<model usable='yes'>IvyBridge-IBRS</model>
<model usable='yes'>IvyBridge</model>
<model usable='no'>Icelake-Server-noTSX</model>
<model usable='no'>Icelake-Server</model>
<model usable='no'>Icelake-Client-noTSX</model>
<model usable='no'>Icelake-Client</model>
<model usable='yes'>Haswell-noTSX-IBRS</model>
<model usable='yes'>Haswell-noTSX</model>
......@@ -89,6 +93,7 @@
<model usable='no'>EPYC</model>
<model usable='no'>Dhyana</model>
<model usable='yes'>Conroe</model>
<model usable='no'>Cascadelake-Server-noTSX</model>
<model usable='no'>Cascadelake-Server</model>
<model usable='yes'>Broadwell-noTSX-IBRS</model>
<model usable='yes'>Broadwell-noTSX</model>
......
......@@ -72,8 +72,10 @@
<model usable='yes'>athlon</model>
<model usable='no'>Westmere-IBRS</model>
<model usable='yes'>Westmere</model>
<model usable='no'>Skylake-Server-noTSX-IBRS</model>
<model usable='no'>Skylake-Server-IBRS</model>
<model usable='no'>Skylake-Server</model>
<model usable='no'>Skylake-Client-noTSX-IBRS</model>
<model usable='no'>Skylake-Client-IBRS</model>
<model usable='no'>Skylake-Client</model>
<model usable='no'>SandyBridge-IBRS</model>
......@@ -88,7 +90,9 @@
<model usable='yes'>Nehalem</model>
<model usable='no'>IvyBridge-IBRS</model>
<model usable='no'>IvyBridge</model>
<model usable='no'>Icelake-Server-noTSX</model>
<model usable='no'>Icelake-Server</model>
<model usable='no'>Icelake-Client-noTSX</model>
<model usable='no'>Icelake-Client</model>
<model usable='no'>Haswell-noTSX-IBRS</model>
<model usable='no'>Haswell-noTSX</model>
......@@ -98,6 +102,7 @@
<model usable='no'>EPYC</model>
<model usable='no'>Dhyana</model>
<model usable='yes'>Conroe</model>
<model usable='no'>Cascadelake-Server-noTSX</model>
<model usable='no'>Cascadelake-Server</model>
<model usable='no'>Broadwell-noTSX-IBRS</model>
<model usable='no'>Broadwell-noTSX</model>
......
......@@ -62,8 +62,10 @@
<model usable='no'>athlon</model>
<model usable='yes'>Westmere-IBRS</model>
<model usable='yes'>Westmere</model>
<model usable='no'>Skylake-Server-noTSX-IBRS</model>
<model usable='no'>Skylake-Server-IBRS</model>
<model usable='no'>Skylake-Server</model>
<model usable='yes'>Skylake-Client-noTSX-IBRS</model>
<model usable='yes'>Skylake-Client-IBRS</model>
<model usable='yes'>Skylake-Client</model>
<model usable='yes'>SandyBridge-IBRS</model>
......@@ -78,7 +80,9 @@
<model usable='yes'>Nehalem</model>
<model usable='yes'>IvyBridge-IBRS</model>
<model usable='yes'>IvyBridge</model>
<model usable='no'>Icelake-Server-noTSX</model>
<model usable='no'>Icelake-Server</model>
<model usable='no'>Icelake-Client-noTSX</model>
<model usable='no'>Icelake-Client</model>
<model usable='yes'>Haswell-noTSX-IBRS</model>
<model usable='yes'>Haswell-noTSX</model>
......@@ -88,6 +92,7 @@
<model usable='no'>EPYC</model>
<model usable='no'>Dhyana</model>
<model usable='yes'>Conroe</model>
<model usable='no'>Cascadelake-Server-noTSX</model>
<model usable='no'>Cascadelake-Server</model>
<model usable='yes'>Broadwell-noTSX-IBRS</model>
<model usable='yes'>Broadwell-noTSX</model>
......