qemu: Parse unavailable features for CPU models

query-cpu-definitions QMP command returns a list of unavailable features
which prevent CPU models from being usable on the current host. So far
we only checked whether the list was empty to mark CPU models as
(un)usable. This patch parses all unavailable features for each CPU
model and stores them in virDomainCapsCPUModel as a list of usability
blockers.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
Jiri Denemark 2017-09-20 10:45:49 +02:00
parent 1255fa877a
commit e9f8e1b8e6
8 changed files with 1556 additions and 123 deletions

View File

@ -3008,7 +3008,7 @@ virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps,
usable = VIR_DOMCAPS_CPU_USABLE_NO;
if (virDomainCapsCPUModelsAddSteal(models, &cpus[i]->name, usable,
NULL) < 0)
&cpus[i]->blockers) < 0)
goto cleanup;
}

View File

@ -3736,6 +3736,8 @@ qemuMonitorCPUDefInfoFree(qemuMonitorCPUDefInfoPtr cpu)
{
if (!cpu)
return;
virStringListFree(cpu->blockers);
VIR_FREE(cpu->name);
VIR_FREE(cpu);
}

View File

@ -973,6 +973,7 @@ typedef qemuMonitorCPUDefInfo *qemuMonitorCPUDefInfoPtr;
struct _qemuMonitorCPUDefInfo {
virTristateBool usable;
char *name;
char **blockers; /* NULL-terminated string list */
};
int qemuMonitorGetCPUDefinitions(qemuMonitorPtr mon,

View File

@ -5078,6 +5078,8 @@ qemuMonitorJSONGetCPUDefinitions(qemuMonitorPtr mon,
if (virJSONValueObjectHasKey(child, "unavailable-features")) {
virJSONValuePtr blockers;
size_t j;
int len;
blockers = virJSONValueObjectGetArray(child,
"unavailable-features");
@ -5088,10 +5090,30 @@ qemuMonitorJSONGetCPUDefinitions(qemuMonitorPtr mon,
goto cleanup;
}
if (virJSONValueArraySize(blockers) > 0)
cpu->usable = VIR_TRISTATE_BOOL_NO;
else
len = virJSONValueArraySize(blockers);
if (len == 0) {
cpu->usable = VIR_TRISTATE_BOOL_YES;
continue;
}
cpu->usable = VIR_TRISTATE_BOOL_NO;
if (VIR_ALLOC_N(cpu->blockers, len + 1) < 0)
goto cleanup;
for (j = 0; j < len; j++) {
virJSONValuePtr blocker = virJSONValueArrayGet(blockers, j);
if (blocker->type != VIR_JSON_TYPE_STRING) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("unexpected value in unavailable-features "
"array"));
goto cleanup;
}
if (VIR_STRDUP(cpu->blockers[j], virJSONValueGetString(blocker)) < 0)
goto cleanup;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -701,7 +701,14 @@
<cpu type='kvm' name='base' usable='yes'/>
<cpu type='kvm' name='qemu64' usable='yes'/>
<cpu type='kvm' name='qemu32' usable='yes'/>
<cpu type='kvm' name='phenom' usable='no'/>
<cpu type='kvm' name='phenom' usable='no'>
<blocker name='mmxext'/>
<blocker name='fxsr-opt'/>
<blocker name='3dnowext'/>
<blocker name='3dnow'/>
<blocker name='sse4a'/>
<blocker name='npt'/>
</cpu>
<cpu type='kvm' name='pentium3' usable='yes'/>
<cpu type='kvm' name='pentium2' usable='yes'/>
<cpu type='kvm' name='pentium' usable='yes'/>
@ -710,31 +717,104 @@
<cpu type='kvm' name='kvm32' usable='yes'/>
<cpu type='kvm' name='coreduo' usable='yes'/>
<cpu type='kvm' name='core2duo' usable='yes'/>
<cpu type='kvm' name='athlon' usable='no'/>
<cpu type='kvm' name='athlon' usable='no'>
<blocker name='mmxext'/>
<blocker name='3dnowext'/>
<blocker name='3dnow'/>
</cpu>
<cpu type='kvm' name='Westmere' usable='yes'/>
<cpu type='kvm' name='Skylake-Server' usable='no'/>
<cpu type='kvm' name='Skylake-Client' usable='no'/>
<cpu type='kvm' name='Skylake-Server' usable='no'>
<blocker name='hle'/>
<blocker name='rtm'/>
<blocker name='mpx'/>
<blocker name='avx512f'/>
<blocker name='avx512dq'/>
<blocker name='rdseed'/>
<blocker name='adx'/>
<blocker name='smap'/>
<blocker name='clwb'/>
<blocker name='avx512cd'/>
<blocker name='avx512bw'/>
<blocker name='avx512vl'/>
<blocker name='3dnowprefetch'/>
<blocker name='xsavec'/>
<blocker name='xgetbv1'/>
<blocker name='mpx'/>
<blocker name='mpx'/>
<blocker name='avx512f'/>
<blocker name='avx512f'/>
<blocker name='avx512f'/>
</cpu>
<cpu type='kvm' name='Skylake-Client' usable='no'>
<blocker name='hle'/>
<blocker name='rtm'/>
<blocker name='mpx'/>
<blocker name='rdseed'/>
<blocker name='adx'/>
<blocker name='smap'/>
<blocker name='3dnowprefetch'/>
<blocker name='xsavec'/>
<blocker name='xgetbv1'/>
<blocker name='mpx'/>
<blocker name='mpx'/>
</cpu>
<cpu type='kvm' name='SandyBridge' usable='yes'/>
<cpu type='kvm' name='Penryn' usable='yes'/>
<cpu type='kvm' name='Opteron_G5' usable='no'/>
<cpu type='kvm' name='Opteron_G4' usable='no'/>
<cpu type='kvm' name='Opteron_G3' usable='no'/>
<cpu type='kvm' name='Opteron_G5' usable='no'>
<blocker name='sse4a'/>
<blocker name='misalignsse'/>
<blocker name='3dnowprefetch'/>
<blocker name='xop'/>
<blocker name='fma4'/>
<blocker name='tbm'/>
</cpu>
<cpu type='kvm' name='Opteron_G4' usable='no'>
<blocker name='sse4a'/>
<blocker name='misalignsse'/>
<blocker name='3dnowprefetch'/>
<blocker name='xop'/>
<blocker name='fma4'/>
</cpu>
<cpu type='kvm' name='Opteron_G3' usable='no'>
<blocker name='sse4a'/>
<blocker name='misalignsse'/>
</cpu>
<cpu type='kvm' name='Opteron_G2' usable='yes'/>
<cpu type='kvm' name='Opteron_G1' usable='yes'/>
<cpu type='kvm' name='Nehalem' usable='yes'/>
<cpu type='kvm' name='IvyBridge' usable='yes'/>
<cpu type='kvm' name='Haswell' usable='no'/>
<cpu type='kvm' name='Haswell' usable='no'>
<blocker name='hle'/>
<blocker name='rtm'/>
</cpu>
<cpu type='kvm' name='Haswell-noTSX' usable='yes'/>
<cpu type='kvm' name='Conroe' usable='yes'/>
<cpu type='kvm' name='Broadwell' usable='no'/>
<cpu type='kvm' name='Broadwell-noTSX' usable='no'/>
<cpu type='kvm' name='Broadwell' usable='no'>
<blocker name='hle'/>
<blocker name='rtm'/>
<blocker name='rdseed'/>
<blocker name='adx'/>
<blocker name='smap'/>
<blocker name='3dnowprefetch'/>
</cpu>
<cpu type='kvm' name='Broadwell-noTSX' usable='no'>
<blocker name='rdseed'/>
<blocker name='adx'/>
<blocker name='smap'/>
<blocker name='3dnowprefetch'/>
</cpu>
<cpu type='kvm' name='486' usable='yes'/>
<cpu type='tcg' name='max' usable='yes'/>
<cpu type='tcg' name='host' usable='no'/>
<cpu type='tcg' name='host' usable='no'>
<blocker name='kvm'/>
</cpu>
<cpu type='tcg' name='base' usable='yes'/>
<cpu type='tcg' name='qemu64' usable='yes'/>
<cpu type='tcg' name='qemu32' usable='yes'/>
<cpu type='tcg' name='phenom' usable='no'/>
<cpu type='tcg' name='phenom' usable='no'>
<blocker name='fxsr-opt'/>
<blocker name='npt'/>
</cpu>
<cpu type='tcg' name='pentium3' usable='yes'/>
<cpu type='tcg' name='pentium2' usable='yes'/>
<cpu type='tcg' name='pentium' usable='yes'/>
@ -745,22 +825,132 @@
<cpu type='tcg' name='core2duo' usable='yes'/>
<cpu type='tcg' name='athlon' usable='yes'/>
<cpu type='tcg' name='Westmere' usable='yes'/>
<cpu type='tcg' name='Skylake-Server' usable='no'/>
<cpu type='tcg' name='Skylake-Client' usable='no'/>
<cpu type='tcg' name='SandyBridge' usable='no'/>
<cpu type='tcg' name='Skylake-Server' usable='no'>
<blocker name='fma'/>
<blocker name='pcid'/>
<blocker name='x2apic'/>
<blocker name='tsc-deadline'/>
<blocker name='avx'/>
<blocker name='f16c'/>
<blocker name='rdrand'/>
<blocker name='hle'/>
<blocker name='avx2'/>
<blocker name='invpcid'/>
<blocker name='rtm'/>
<blocker name='avx512f'/>
<blocker name='avx512dq'/>
<blocker name='rdseed'/>
<blocker name='avx512cd'/>
<blocker name='avx512bw'/>
<blocker name='avx512vl'/>
<blocker name='3dnowprefetch'/>
<blocker name='xsavec'/>
</cpu>
<cpu type='tcg' name='Skylake-Client' usable='no'>
<blocker name='fma'/>
<blocker name='pcid'/>
<blocker name='x2apic'/>
<blocker name='tsc-deadline'/>
<blocker name='avx'/>
<blocker name='f16c'/>
<blocker name='rdrand'/>
<blocker name='hle'/>
<blocker name='avx2'/>
<blocker name='invpcid'/>
<blocker name='rtm'/>
<blocker name='rdseed'/>
<blocker name='3dnowprefetch'/>
<blocker name='xsavec'/>
</cpu>
<cpu type='tcg' name='SandyBridge' usable='no'>
<blocker name='x2apic'/>
<blocker name='tsc-deadline'/>
<blocker name='avx'/>
</cpu>
<cpu type='tcg' name='Penryn' usable='yes'/>
<cpu type='tcg' name='Opteron_G5' usable='no'/>
<cpu type='tcg' name='Opteron_G4' usable='no'/>
<cpu type='tcg' name='Opteron_G3' usable='no'/>
<cpu type='tcg' name='Opteron_G5' usable='no'>
<blocker name='fma'/>
<blocker name='avx'/>
<blocker name='f16c'/>
<blocker name='misalignsse'/>
<blocker name='3dnowprefetch'/>
<blocker name='xop'/>
<blocker name='fma4'/>
<blocker name='tbm'/>
</cpu>
<cpu type='tcg' name='Opteron_G4' usable='no'>
<blocker name='avx'/>
<blocker name='misalignsse'/>
<blocker name='3dnowprefetch'/>
<blocker name='xop'/>
<blocker name='fma4'/>
</cpu>
<cpu type='tcg' name='Opteron_G3' usable='no'>
<blocker name='misalignsse'/>
</cpu>
<cpu type='tcg' name='Opteron_G2' usable='yes'/>
<cpu type='tcg' name='Opteron_G1' usable='yes'/>
<cpu type='tcg' name='Nehalem' usable='yes'/>
<cpu type='tcg' name='IvyBridge' usable='no'/>
<cpu type='tcg' name='Haswell' usable='no'/>
<cpu type='tcg' name='Haswell-noTSX' usable='no'/>
<cpu type='tcg' name='IvyBridge' usable='no'>
<blocker name='x2apic'/>
<blocker name='tsc-deadline'/>
<blocker name='avx'/>
<blocker name='f16c'/>
<blocker name='rdrand'/>
</cpu>
<cpu type='tcg' name='Haswell' usable='no'>
<blocker name='fma'/>
<blocker name='pcid'/>
<blocker name='x2apic'/>
<blocker name='tsc-deadline'/>
<blocker name='avx'/>
<blocker name='f16c'/>
<blocker name='rdrand'/>
<blocker name='hle'/>
<blocker name='avx2'/>
<blocker name='invpcid'/>
<blocker name='rtm'/>
</cpu>
<cpu type='tcg' name='Haswell-noTSX' usable='no'>
<blocker name='fma'/>
<blocker name='pcid'/>
<blocker name='x2apic'/>
<blocker name='tsc-deadline'/>
<blocker name='avx'/>
<blocker name='f16c'/>
<blocker name='rdrand'/>
<blocker name='avx2'/>
<blocker name='invpcid'/>
</cpu>
<cpu type='tcg' name='Conroe' usable='yes'/>
<cpu type='tcg' name='Broadwell' usable='no'/>
<cpu type='tcg' name='Broadwell-noTSX' usable='no'/>
<cpu type='tcg' name='Broadwell' usable='no'>
<blocker name='fma'/>
<blocker name='pcid'/>
<blocker name='x2apic'/>
<blocker name='tsc-deadline'/>
<blocker name='avx'/>
<blocker name='f16c'/>
<blocker name='rdrand'/>
<blocker name='hle'/>
<blocker name='avx2'/>
<blocker name='invpcid'/>
<blocker name='rtm'/>
<blocker name='rdseed'/>
<blocker name='3dnowprefetch'/>
</cpu>
<cpu type='tcg' name='Broadwell-noTSX' usable='no'>
<blocker name='fma'/>
<blocker name='pcid'/>
<blocker name='x2apic'/>
<blocker name='tsc-deadline'/>
<blocker name='avx'/>
<blocker name='f16c'/>
<blocker name='rdrand'/>
<blocker name='avx2'/>
<blocker name='invpcid'/>
<blocker name='rdseed'/>
<blocker name='3dnowprefetch'/>
</cpu>
<cpu type='tcg' name='486' usable='yes'/>
<machine name='pc-i440fx-2.10' alias='pc' hotplugCpus='yes' maxCpus='255'/>
<machine name='pc-0.12' hotplugCpus='yes' maxCpus='255'/>

View File

@ -217,7 +217,14 @@
<cpu type='kvm' name='host' usable='yes'/>
<cpu type='kvm' name='qemu64' usable='yes'/>
<cpu type='kvm' name='qemu32' usable='yes'/>
<cpu type='kvm' name='phenom' usable='no'/>
<cpu type='kvm' name='phenom' usable='no'>
<blocker name='mmxext'/>
<blocker name='fxsr-opt'/>
<blocker name='3dnowext'/>
<blocker name='3dnow'/>
<blocker name='sse4a'/>
<blocker name='npt'/>
</cpu>
<cpu type='kvm' name='pentium3' usable='yes'/>
<cpu type='kvm' name='pentium2' usable='yes'/>
<cpu type='kvm' name='pentium' usable='yes'/>
@ -226,14 +233,32 @@
<cpu type='kvm' name='kvm32' usable='yes'/>
<cpu type='kvm' name='coreduo' usable='yes'/>
<cpu type='kvm' name='core2duo' usable='yes'/>
<cpu type='kvm' name='athlon' usable='no'/>
<cpu type='kvm' name='athlon' usable='no'>
<blocker name='mmxext'/>
<blocker name='3dnowext'/>
<blocker name='3dnow'/>
</cpu>
<cpu type='kvm' name='Westmere' usable='yes'/>
<cpu type='kvm' name='Skylake-Client' usable='yes'/>
<cpu type='kvm' name='SandyBridge' usable='yes'/>
<cpu type='kvm' name='Penryn' usable='yes'/>
<cpu type='kvm' name='Opteron_G5' usable='no'/>
<cpu type='kvm' name='Opteron_G4' usable='no'/>
<cpu type='kvm' name='Opteron_G3' usable='no'/>
<cpu type='kvm' name='Opteron_G5' usable='no'>
<blocker name='sse4a'/>
<blocker name='misalignsse'/>
<blocker name='xop'/>
<blocker name='fma4'/>
<blocker name='tbm'/>
</cpu>
<cpu type='kvm' name='Opteron_G4' usable='no'>
<blocker name='sse4a'/>
<blocker name='misalignsse'/>
<blocker name='xop'/>
<blocker name='fma4'/>
</cpu>
<cpu type='kvm' name='Opteron_G3' usable='no'>
<blocker name='sse4a'/>
<blocker name='misalignsse'/>
</cpu>
<cpu type='kvm' name='Opteron_G2' usable='yes'/>
<cpu type='kvm' name='Opteron_G1' usable='yes'/>
<cpu type='kvm' name='Nehalem' usable='yes'/>
@ -244,10 +269,15 @@
<cpu type='kvm' name='Broadwell' usable='yes'/>
<cpu type='kvm' name='Broadwell-noTSX' usable='yes'/>
<cpu type='kvm' name='486' usable='yes'/>
<cpu type='tcg' name='host' usable='no'/>
<cpu type='tcg' name='host' usable='no'>
<blocker name='kvm'/>
</cpu>
<cpu type='tcg' name='qemu64' usable='yes'/>
<cpu type='tcg' name='qemu32' usable='yes'/>
<cpu type='tcg' name='phenom' usable='no'/>
<cpu type='tcg' name='phenom' usable='no'>
<blocker name='fxsr-opt'/>
<blocker name='npt'/>
</cpu>
<cpu type='tcg' name='pentium3' usable='yes'/>
<cpu type='tcg' name='pentium2' usable='yes'/>
<cpu type='tcg' name='pentium' usable='yes'/>
@ -258,21 +288,111 @@
<cpu type='tcg' name='core2duo' usable='yes'/>
<cpu type='tcg' name='athlon' usable='yes'/>
<cpu type='tcg' name='Westmere' usable='yes'/>
<cpu type='tcg' name='Skylake-Client' usable='no'/>
<cpu type='tcg' name='SandyBridge' usable='no'/>
<cpu type='tcg' name='Skylake-Client' usable='no'>
<blocker name='fma'/>
<blocker name='pcid'/>
<blocker name='x2apic'/>
<blocker name='tsc-deadline'/>
<blocker name='avx'/>
<blocker name='f16c'/>
<blocker name='rdrand'/>
<blocker name='hle'/>
<blocker name='avx2'/>
<blocker name='invpcid'/>
<blocker name='rtm'/>
<blocker name='rdseed'/>
<blocker name='3dnowprefetch'/>
<blocker name='xsavec'/>
</cpu>
<cpu type='tcg' name='SandyBridge' usable='no'>
<blocker name='x2apic'/>
<blocker name='tsc-deadline'/>
<blocker name='avx'/>
</cpu>
<cpu type='tcg' name='Penryn' usable='yes'/>
<cpu type='tcg' name='Opteron_G5' usable='no'/>
<cpu type='tcg' name='Opteron_G4' usable='no'/>
<cpu type='tcg' name='Opteron_G3' usable='no'/>
<cpu type='tcg' name='Opteron_G5' usable='no'>
<blocker name='fma'/>
<blocker name='avx'/>
<blocker name='f16c'/>
<blocker name='misalignsse'/>
<blocker name='3dnowprefetch'/>
<blocker name='xop'/>
<blocker name='fma4'/>
<blocker name='tbm'/>
</cpu>
<cpu type='tcg' name='Opteron_G4' usable='no'>
<blocker name='avx'/>
<blocker name='misalignsse'/>
<blocker name='3dnowprefetch'/>
<blocker name='xop'/>
<blocker name='fma4'/>
</cpu>
<cpu type='tcg' name='Opteron_G3' usable='no'>
<blocker name='misalignsse'/>
</cpu>
<cpu type='tcg' name='Opteron_G2' usable='yes'/>
<cpu type='tcg' name='Opteron_G1' usable='yes'/>
<cpu type='tcg' name='Nehalem' usable='yes'/>
<cpu type='tcg' name='IvyBridge' usable='no'/>
<cpu type='tcg' name='Haswell' usable='no'/>
<cpu type='tcg' name='Haswell-noTSX' usable='no'/>
<cpu type='tcg' name='IvyBridge' usable='no'>
<blocker name='x2apic'/>
<blocker name='tsc-deadline'/>
<blocker name='avx'/>
<blocker name='f16c'/>
<blocker name='rdrand'/>
</cpu>
<cpu type='tcg' name='Haswell' usable='no'>
<blocker name='fma'/>
<blocker name='pcid'/>
<blocker name='x2apic'/>
<blocker name='tsc-deadline'/>
<blocker name='avx'/>
<blocker name='f16c'/>
<blocker name='rdrand'/>
<blocker name='hle'/>
<blocker name='avx2'/>
<blocker name='invpcid'/>
<blocker name='rtm'/>
</cpu>
<cpu type='tcg' name='Haswell-noTSX' usable='no'>
<blocker name='fma'/>
<blocker name='pcid'/>
<blocker name='x2apic'/>
<blocker name='tsc-deadline'/>
<blocker name='avx'/>
<blocker name='f16c'/>
<blocker name='rdrand'/>
<blocker name='avx2'/>
<blocker name='invpcid'/>
</cpu>
<cpu type='tcg' name='Conroe' usable='yes'/>
<cpu type='tcg' name='Broadwell' usable='no'/>
<cpu type='tcg' name='Broadwell-noTSX' usable='no'/>
<cpu type='tcg' name='Broadwell' usable='no'>
<blocker name='fma'/>
<blocker name='pcid'/>
<blocker name='x2apic'/>
<blocker name='tsc-deadline'/>
<blocker name='avx'/>
<blocker name='f16c'/>
<blocker name='rdrand'/>
<blocker name='hle'/>
<blocker name='avx2'/>
<blocker name='invpcid'/>
<blocker name='rtm'/>
<blocker name='rdseed'/>
<blocker name='3dnowprefetch'/>
</cpu>
<cpu type='tcg' name='Broadwell-noTSX' usable='no'>
<blocker name='fma'/>
<blocker name='pcid'/>
<blocker name='x2apic'/>
<blocker name='tsc-deadline'/>
<blocker name='avx'/>
<blocker name='f16c'/>
<blocker name='rdrand'/>
<blocker name='avx2'/>
<blocker name='invpcid'/>
<blocker name='rdseed'/>
<blocker name='3dnowprefetch'/>
</cpu>
<cpu type='tcg' name='486' usable='yes'/>
<machine name='pc-i440fx-2.8' alias='pc' hotplugCpus='yes' maxCpus='255'/>
<machine name='pc-0.12' hotplugCpus='yes' maxCpus='255'/>

View File

@ -694,7 +694,14 @@
<cpu type='kvm' name='base' usable='yes'/>
<cpu type='kvm' name='qemu64' usable='yes'/>
<cpu type='kvm' name='qemu32' usable='yes'/>
<cpu type='kvm' name='phenom' usable='no'/>
<cpu type='kvm' name='phenom' usable='no'>
<blocker name='mmxext'/>
<blocker name='fxsr-opt'/>
<blocker name='3dnowext'/>
<blocker name='3dnow'/>
<blocker name='sse4a'/>
<blocker name='npt'/>
</cpu>
<cpu type='kvm' name='pentium3' usable='yes'/>
<cpu type='kvm' name='pentium2' usable='yes'/>
<cpu type='kvm' name='pentium' usable='yes'/>
@ -703,14 +710,32 @@
<cpu type='kvm' name='kvm32' usable='yes'/>
<cpu type='kvm' name='coreduo' usable='yes'/>
<cpu type='kvm' name='core2duo' usable='yes'/>
<cpu type='kvm' name='athlon' usable='no'/>
<cpu type='kvm' name='athlon' usable='no'>
<blocker name='mmxext'/>
<blocker name='3dnowext'/>
<blocker name='3dnow'/>
</cpu>
<cpu type='kvm' name='Westmere' usable='yes'/>
<cpu type='kvm' name='Skylake-Client' usable='yes'/>
<cpu type='kvm' name='SandyBridge' usable='yes'/>
<cpu type='kvm' name='Penryn' usable='yes'/>
<cpu type='kvm' name='Opteron_G5' usable='no'/>
<cpu type='kvm' name='Opteron_G4' usable='no'/>
<cpu type='kvm' name='Opteron_G3' usable='no'/>
<cpu type='kvm' name='Opteron_G5' usable='no'>
<blocker name='sse4a'/>
<blocker name='misalignsse'/>
<blocker name='xop'/>
<blocker name='fma4'/>
<blocker name='tbm'/>
</cpu>
<cpu type='kvm' name='Opteron_G4' usable='no'>
<blocker name='sse4a'/>
<blocker name='misalignsse'/>
<blocker name='xop'/>
<blocker name='fma4'/>
</cpu>
<cpu type='kvm' name='Opteron_G3' usable='no'>
<blocker name='sse4a'/>
<blocker name='misalignsse'/>
</cpu>
<cpu type='kvm' name='Opteron_G2' usable='yes'/>
<cpu type='kvm' name='Opteron_G1' usable='yes'/>
<cpu type='kvm' name='Nehalem' usable='yes'/>
@ -722,11 +747,16 @@
<cpu type='kvm' name='Broadwell-noTSX' usable='yes'/>
<cpu type='kvm' name='486' usable='yes'/>
<cpu type='tcg' name='max' usable='yes'/>
<cpu type='tcg' name='host' usable='no'/>
<cpu type='tcg' name='host' usable='no'>
<blocker name='kvm'/>
</cpu>
<cpu type='tcg' name='base' usable='yes'/>
<cpu type='tcg' name='qemu64' usable='yes'/>
<cpu type='tcg' name='qemu32' usable='yes'/>
<cpu type='tcg' name='phenom' usable='no'/>
<cpu type='tcg' name='phenom' usable='no'>
<blocker name='fxsr-opt'/>
<blocker name='npt'/>
</cpu>
<cpu type='tcg' name='pentium3' usable='yes'/>
<cpu type='tcg' name='pentium2' usable='yes'/>
<cpu type='tcg' name='pentium' usable='yes'/>
@ -737,21 +767,111 @@
<cpu type='tcg' name='core2duo' usable='yes'/>
<cpu type='tcg' name='athlon' usable='yes'/>
<cpu type='tcg' name='Westmere' usable='yes'/>
<cpu type='tcg' name='Skylake-Client' usable='no'/>
<cpu type='tcg' name='SandyBridge' usable='no'/>
<cpu type='tcg' name='Skylake-Client' usable='no'>
<blocker name='fma'/>
<blocker name='pcid'/>
<blocker name='x2apic'/>
<blocker name='tsc-deadline'/>
<blocker name='avx'/>
<blocker name='f16c'/>
<blocker name='rdrand'/>
<blocker name='hle'/>
<blocker name='avx2'/>
<blocker name='invpcid'/>
<blocker name='rtm'/>
<blocker name='rdseed'/>
<blocker name='3dnowprefetch'/>
<blocker name='xsavec'/>
</cpu>
<cpu type='tcg' name='SandyBridge' usable='no'>
<blocker name='x2apic'/>
<blocker name='tsc-deadline'/>
<blocker name='avx'/>
</cpu>
<cpu type='tcg' name='Penryn' usable='yes'/>
<cpu type='tcg' name='Opteron_G5' usable='no'/>
<cpu type='tcg' name='Opteron_G4' usable='no'/>
<cpu type='tcg' name='Opteron_G3' usable='no'/>
<cpu type='tcg' name='Opteron_G5' usable='no'>
<blocker name='fma'/>
<blocker name='avx'/>
<blocker name='f16c'/>
<blocker name='misalignsse'/>
<blocker name='3dnowprefetch'/>
<blocker name='xop'/>
<blocker name='fma4'/>
<blocker name='tbm'/>
</cpu>
<cpu type='tcg' name='Opteron_G4' usable='no'>
<blocker name='avx'/>
<blocker name='misalignsse'/>
<blocker name='3dnowprefetch'/>
<blocker name='xop'/>
<blocker name='fma4'/>
</cpu>
<cpu type='tcg' name='Opteron_G3' usable='no'>
<blocker name='misalignsse'/>
</cpu>
<cpu type='tcg' name='Opteron_G2' usable='yes'/>
<cpu type='tcg' name='Opteron_G1' usable='yes'/>
<cpu type='tcg' name='Nehalem' usable='yes'/>
<cpu type='tcg' name='IvyBridge' usable='no'/>
<cpu type='tcg' name='Haswell' usable='no'/>
<cpu type='tcg' name='Haswell-noTSX' usable='no'/>
<cpu type='tcg' name='IvyBridge' usable='no'>
<blocker name='x2apic'/>
<blocker name='tsc-deadline'/>
<blocker name='avx'/>
<blocker name='f16c'/>
<blocker name='rdrand'/>
</cpu>
<cpu type='tcg' name='Haswell' usable='no'>
<blocker name='fma'/>
<blocker name='pcid'/>
<blocker name='x2apic'/>
<blocker name='tsc-deadline'/>
<blocker name='avx'/>
<blocker name='f16c'/>
<blocker name='rdrand'/>
<blocker name='hle'/>
<blocker name='avx2'/>
<blocker name='invpcid'/>
<blocker name='rtm'/>
</cpu>
<cpu type='tcg' name='Haswell-noTSX' usable='no'>
<blocker name='fma'/>
<blocker name='pcid'/>
<blocker name='x2apic'/>
<blocker name='tsc-deadline'/>
<blocker name='avx'/>
<blocker name='f16c'/>
<blocker name='rdrand'/>
<blocker name='avx2'/>
<blocker name='invpcid'/>
</cpu>
<cpu type='tcg' name='Conroe' usable='yes'/>
<cpu type='tcg' name='Broadwell' usable='no'/>
<cpu type='tcg' name='Broadwell-noTSX' usable='no'/>
<cpu type='tcg' name='Broadwell' usable='no'>
<blocker name='fma'/>
<blocker name='pcid'/>
<blocker name='x2apic'/>
<blocker name='tsc-deadline'/>
<blocker name='avx'/>
<blocker name='f16c'/>
<blocker name='rdrand'/>
<blocker name='hle'/>
<blocker name='avx2'/>
<blocker name='invpcid'/>
<blocker name='rtm'/>
<blocker name='rdseed'/>
<blocker name='3dnowprefetch'/>
</cpu>
<cpu type='tcg' name='Broadwell-noTSX' usable='no'>
<blocker name='fma'/>
<blocker name='pcid'/>
<blocker name='x2apic'/>
<blocker name='tsc-deadline'/>
<blocker name='avx'/>
<blocker name='f16c'/>
<blocker name='rdrand'/>
<blocker name='avx2'/>
<blocker name='invpcid'/>
<blocker name='rdseed'/>
<blocker name='3dnowprefetch'/>
</cpu>
<cpu type='tcg' name='486' usable='yes'/>
<machine name='pc-i440fx-2.9' alias='pc' hotplugCpus='yes' maxCpus='255'/>
<machine name='pc-0.12' hotplugCpus='yes' maxCpus='255'/>