<div dir="ltr">Ping for reviews.<div><br></div><div>Thanks in advance</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Sep 16, 2020 at 4:59 PM Zhenyu Zheng <<a href="mailto:zheng.zhenyu@outlook.com">zheng.zhenyu@outlook.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Modify virCPUarmCompare in cpu_arm.c to perform compare action.<br>
This patch only adds host to host CPU compare, the rest cases<br>
remains the same. This is useful for source and destination host<br>
compare during migrations to avoid migration between different<br>
CPU models that have different CPU freatures.<br>
<br>
Signed-off-by: Zhenyu Zheng <<a href="mailto:zheng.zhenyu@outlook.com" target="_blank">zheng.zhenyu@outlook.com</a>><br>
---<br>
 src/cpu/cpu_arm.c | 43 +++++++++++++++++++++++++++++++++++++++----<br>
 1 file changed, 39 insertions(+), 4 deletions(-)<br>
<br>
diff --git a/src/cpu/cpu_arm.c b/src/cpu/cpu_arm.c<br>
index 939a3b8390..b420b14e86 100644<br>
--- a/src/cpu/cpu_arm.c<br>
+++ b/src/cpu/cpu_arm.c<br>
@@ -463,11 +463,46 @@ virCPUarmBaseline(virCPUDefPtr *cpus,<br>
 }<br>
<br>
 static virCPUCompareResult<br>
-virCPUarmCompare(virCPUDefPtr host G_GNUC_UNUSED,<br>
-                 virCPUDefPtr cpu G_GNUC_UNUSED,<br>
-                 bool failMessages G_GNUC_UNUSED)<br>
+virCPUarmCompare(virCPUDefPtr host,<br>
+                 virCPUDefPtr cpu,<br>
+                 bool failIncompatible<br>
+)<br>
 {<br>
-    return VIR_CPU_COMPARE_IDENTICAL;<br>
+    virCPUCompareResult ret = VIR_CPU_COMPARE_IDENTICAL;<br>
+<br>
+    /* Only support host to host CPU compare for ARM*/<br>
+    if (cpu->type != VIR_CPU_TYPE_HOST)<br>
+        return ret;<br>
+<br>
+    if (!host || !host->model) {<br>
+        if (failIncompatible) {<br>
+            virReportError(VIR_ERR_CPU_INCOMPATIBLE, "%s",<br>
+                           _("unknown host CPU"));<br>
+            ret = VIR_CPU_COMPARE_ERROR;<br>
+        } else {<br>
+            VIR_WARN("unknown host CPU");<br>
+            ret = VIR_CPU_COMPARE_INCOMPATIBLE;<br>
+        }<br>
+        return ret;<br>
+    }<br>
+<br>
+    /* Compare vendor and model to check if CPUs are identical */<br>
+    if (STRNEQ(host->vendor, cpu->vendor) ||<br>
+        STRNEQ(host->model, cpu->model)) {<br>
+        VIR_DEBUG("Host CPU model does not match required CPU model %s",<br>
+                  cpu->model);<br>
+<br>
+        if (failIncompatible) {<br>
+            ret = VIR_CPU_COMPARE_ERROR;<br>
+            virReportError(VIR_ERR_CPU_INCOMPATIBLE,<br>
+                           _("Host CPU model does not match required CPU model %s"),<br>
+                           cpu->model);<br>
+        } else {<br>
+            ret = VIR_CPU_COMPARE_INCOMPATIBLE;<br>
+        }<br>
+    }<br>
+<br>
+    return ret;<br>
 }<br>
<br>
 static int<br>
-- <br>
2.20.1<br>
<br>
<br>
</blockquote></div>