[PATCH V2] Modify virCPUarmCompare to perform compare actions
Zhenyu Zheng
zhengzhenyulixi at gmail.com
Wed Sep 16 07:49:15 UTC 2020
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 <pkrempa at 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.zhenyu at 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
> >
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20200916/8016badc/attachment-0001.htm>
More information about the libvir-list
mailing list