mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-24 22:55:23 +00:00
cpuBaseline: Detect empty set of common features
In case the set of CPUs has no features in common, report incompatible CPUs instead of returning the simplest CPU model with all features disabled.
This commit is contained in:
parent
4e0f648fbb
commit
d9332c23b4
@ -233,6 +233,26 @@ x86DataSubtract(union cpuData *data1,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static bool
|
||||||
|
x86DataIsEmpty(union cpuData *data)
|
||||||
|
{
|
||||||
|
struct cpuX86cpuid zero = { 0, 0, 0, 0, 0 };
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
for (i = 0; i < data->x86.basic_len; i++) {
|
||||||
|
if (!x86cpuidMatch(data->x86.basic + i, &zero))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < data->x86.extended_len; i++) {
|
||||||
|
if (!x86cpuidMatch(data->x86.extended + i, &zero))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static union cpuData *
|
static union cpuData *
|
||||||
x86DataFromModel(const struct x86_model *model)
|
x86DataFromModel(const struct x86_model *model)
|
||||||
{
|
{
|
||||||
@ -1363,6 +1383,12 @@ x86Baseline(virCPUDefPtr *cpus,
|
|||||||
if (!(data = x86DataFromModel(base_model)))
|
if (!(data = x86DataFromModel(base_model)))
|
||||||
goto no_memory;
|
goto no_memory;
|
||||||
|
|
||||||
|
if (x86DataIsEmpty(data)) {
|
||||||
|
virCPUReportError(VIR_ERR_OPERATION_FAILED,
|
||||||
|
"%s", _("CPUs are incompatible"));
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
if (x86Decode(cpu, data, models, nmodels, NULL) < 0)
|
if (x86Decode(cpu, data, models, nmodels, NULL) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user