[PATCH V4] Modify virCPUarmCompare to perform compare actions

Daniel Henrique Barboza danielhb413 at gmail.com
Fri Oct 2 13:45:09 UTC 2020



On 9/24/20 11:12 AM, 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>
> ---

Reviewed-by: Daniel Henrique Barboza <danielhb413 at gmail.com>


>   src/cpu/cpu_arm.c | 39 ++++++++++++++++++++++++++++++++++++---
>   1 file changed, 36 insertions(+), 3 deletions(-)
> 
> diff --git a/src/cpu/cpu_arm.c b/src/cpu/cpu_arm.c
> index 939a3b8390..64bd0f03c2 100644
> --- a/src/cpu/cpu_arm.c
> +++ b/src/cpu/cpu_arm.c
> @@ -463,10 +463,43 @@ 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
> +)
>   {
> +    /* Only support host to host CPU compare for ARM*/
> +    if (cpu->type != VIR_CPU_TYPE_HOST)
> +        return VIR_CPU_COMPARE_IDENTICAL;
> +
> +    if (!host || !host->model) {
> +        if (failIncompatible) {
> +            virReportError(VIR_ERR_CPU_INCOMPATIBLE, "%s",
> +                           _("unknown host CPU"));
> +            return VIR_CPU_COMPARE_ERROR;
> +        } else {
> +            VIR_WARN("unknown host CPU");
> +            return VIR_CPU_COMPARE_INCOMPATIBLE;
> +        }
> +    }
> +
> +    /* Compare vendor and model to check if CPUs are identical */
> +    if (STRNEQ_NULLABLE(host->vendor, cpu->vendor) ||
> +        STRNEQ_NULLABLE(host->model, cpu->model)) {
> +        VIR_DEBUG("Host CPU model does not match required CPU "
> +                  "vendor %s or(and) model %s",
> +                  NULLSTR(cpu->vendor), NULLSTR(cpu->model));
> +
> +        if (failIncompatible) {
> +            virReportError(VIR_ERR_CPU_INCOMPATIBLE,
> +                           _("Host CPU model does not match required CPU "
> +                             "vendor %s or(and) model %s"),
> +                           NULLSTR(cpu->vendor), NULLSTR(cpu->model));
> +            return VIR_CPU_COMPARE_ERROR;
> +        } else {
> +            return VIR_CPU_COMPARE_INCOMPATIBLE;
> +        }
> +    }
>       return VIR_CPU_COMPARE_IDENTICAL;
>   }
>   
> 




More information about the libvir-list mailing list