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:
Jiri Denemark 2010-07-02 17:51:40 +02:00
parent 4e0f648fbb
commit d9332c23b4

View File

@ -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 *
x86DataFromModel(const struct x86_model *model)
{
@ -1363,6 +1383,12 @@ x86Baseline(virCPUDefPtr *cpus,
if (!(data = x86DataFromModel(base_model)))
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)
goto error;