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. --- src/cpu/cpu_x86.c | 26 ++++++++++++++++++++++++++ 1 files changed, 26 insertions(+), 0 deletions(-) diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index 30a2db6..0266ce9 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -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; -- 1.7.1.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list