oh, yes, thanks for the correction, I've messed this up with another version of code.
On Wed, Sep 16, 2020 at 3:20 PM Peter Krempa <pkre...@redhat.com> wrote: > 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.zhe...@outlook.com> > > --- > > 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 > > > > > >