On Wed, Sep 16, 2020 at 11:04:58 +0800, Zhenyu Zheng wrote: > Modify virCPUarmCompare in cpu_arm.c to perform compare action. > This patch only adds host to host CPU compare, the rest cases > remains the same. This is useful for source and destination host > compare during migrations to avoid migration between different > CPU models that have different CPU freatures. > > Signed-off-by: Zhenyu Zheng <zheng.zhenyu@xxxxxxxxxxx> > --- > src/cpu/cpu_arm.c | 51 +++++++++++++++++++++++++++++++++++++++++++---- > 1 file changed, 47 insertions(+), 4 deletions(-) > > diff --git a/src/cpu/cpu_arm.c b/src/cpu/cpu_arm.c > index 939a3b8390..e8581ec31f 100644 > --- a/src/cpu/cpu_arm.c > +++ b/src/cpu/cpu_arm.c > @@ -463,11 +463,54 @@ virCPUarmBaseline(virCPUDefPtr *cpus, > } > > static virCPUCompareResult > -virCPUarmCompare(virCPUDefPtr host G_GNUC_UNUSED, > - virCPUDefPtr cpu G_GNUC_UNUSED, > - bool failMessages G_GNUC_UNUSED) > +virCPUarmCompare(virCPUDefPtr host, > + virCPUDefPtr cpu, > + bool failIncompatible > +) > { > - return VIR_CPU_COMPARE_IDENTICAL; > + g_autofree char *message = NULL; > + virCPUCompareResult ret = VIR_CPU_COMPARE_IDENTICAL; > + > + /* Only support host to host CPU compare for ARM*/ > + if (cpu->type != VIR_CPU_TYPE_HOST) > + return ret; > + > + if (!host || !host->model) { > + if (failIncompatible) { > + virReportError(VIR_ERR_CPU_INCOMPATIBLE, "%s", > + _("unknown host CPU")); > + ret = VIR_CPU_COMPARE_ERROR; > + } else { > + VIR_WARN("unknown host CPU"); > + ret = VIR_CPU_COMPARE_INCOMPATIBLE; > + } > + return ret; > + } > + > + /* Compare vendor and model to check if CPUs are identical */ > + if (STRNEQ(host->vendor, cpu->vendor) || > + STRNEQ(host->model, cpu->model)) { > + VIR_DEBUG("host CPU model does not match required CPU model %s", > + cpu->model); > + if (message) { 'message' was initialized to NULL here so this code won't ever be executed. > + message = g_strdup_printf(_("host CPU model does not match required " > + "CPU model %s"), > + cpu->model); > + } > + > + ret = VIR_CPU_COMPARE_INCOMPATIBLE; > + } > + > + if (failIncompatible && ret == VIR_CPU_COMPARE_INCOMPATIBLE) { > + ret = VIR_CPU_COMPARE_ERROR; > + if (message) { > + virReportError(VIR_ERR_CPU_INCOMPATIBLE, "%s", message); Neither this code since it will still be NULL. Also please don't store the error message in a random variable, but rather use a specific virReportError call. If you want to omit it in certain cases, just skip the whole virReportError call. > + } else { > + virReportError(VIR_ERR_CPU_INCOMPATIBLE, NULL); > + } > + } > + > + return ret; > } > > static int > -- > 2.20.1 > >