[PATCHv1 7/7] qemu_driver: Baseline CPU model using QEMU

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



virsh cpu-baseline determines baseline from QEMU for some architectures
and libvirt for others.

Skip the QEMU attempt to save time on architectures QEMU baseline does
not support.
---
 src/qemu/qemu_driver.c | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 83fc191085..6096d46ab5 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -13166,6 +13166,15 @@ qemuConnectBaselineCPU(virConnectPtr conn ATTRIBUTE_UNUSED,
     virCPUDefPtr baseline = NULL;
     virCPUDefPtr cpu = NULL;
     char *cpustr = NULL;
+    virBuffer baseline_xml = VIR_BUFFER_INITIALIZER;
+    virArch arch = virArchFromHost();
+
+    VIR_DEBUG("ncpus=%i, flags=0x%x", ncpus, flags);
+
+    virQEMUDriverPtr driver = conn->privateData;
+    virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
+
+    bool migratable = !!(flags & VIR_CONNECT_BASELINE_CPU_MIGRATABLE);
 
     virCheckFlags(VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES |
                   VIR_CONNECT_BASELINE_CPU_MIGRATABLE, NULL);
@@ -13173,6 +13182,23 @@ qemuConnectBaselineCPU(virConnectPtr conn ATTRIBUTE_UNUSED,
     if (virConnectBaselineCPUEnsureACL(conn) < 0)
         goto cleanup;
 
+
+    if (!ARCH_IS_S390(arch))
+       goto libvirt_method;  /* Avoid starting QEMU */
+
+    /* Try QEMU method
+     */
+    if (virQEMUCapsQMPBaselineCPUModel(NULL,
+                                       cfg->libDir, cfg->user, cfg->group,
+                                       xmlCPUs, ncpus, migratable, &baseline_xml) < 0) {
+        /* Content Error */
+        goto cleanup;
+    }
+
+    if ((cpustr = virBufferContentAndReset(&baseline_xml)))
+        goto done;
+
+ libvirt_method:
     if (!(cpus = virCPUDefListParse(xmlCPUs, ncpus, VIR_CPU_TYPE_HOST)))
         goto cleanup;
 
@@ -13199,6 +13225,9 @@ qemuConnectBaselineCPU(virConnectPtr conn ATTRIBUTE_UNUSED,
     virCPUDefFree(baseline);
     virCPUDefFree(cpu);
 
+ done:
+    VIR_DEBUG("qemu cpustr = %s", NULLSTR(cpustr));
+
     return cpustr;
 }
 
-- 
2.14.1

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux