提交 d9332c23 编写于 作者: J Jiri Denemark

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.
上级 4e0f648f
......@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册