]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
conf: drop virCapsPtr param from basic post parse callback
authorDaniel P. Berrangé <berrange@redhat.com>
Tue, 26 Nov 2019 16:53:53 +0000 (16:53 +0000)
committerDaniel P. Berrangé <berrange@redhat.com>
Mon, 9 Dec 2019 10:17:19 +0000 (10:17 +0000)
The QEMU impl of the callback can directly use the QEMU capabilities
cache to resolve the emulator binary name, allowing virCapsPtr to be
dropped.

Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
src/conf/domain_conf.c
src/conf/domain_conf.h
src/qemu/qemu_capabilities.c
src/qemu/qemu_capabilities.h
src/qemu/qemu_domain.c
tests/testutilsqemu.c

index b1685a2852a9921a8fea14319f0fcf76fe414c25..b59b43f33da1ea8140fcb26ba6e4e8ff94fff9fb 100644 (file)
@@ -5832,7 +5832,7 @@ virDomainDefPostParse(virDomainDefPtr def,
 
     /* call the basic post parse callback */
     if (xmlopt->config.domainPostParseBasicCallback) {
-        ret = xmlopt->config.domainPostParseBasicCallback(def, caps,
+        ret = xmlopt->config.domainPostParseBasicCallback(def,
                                                           xmlopt->config.priv);
 
         if (virDomainDefPostParseCheckFailure(def, parseFlags, ret) < 0)
index 09a36264649a8e2ecc5d5e761f8b03a5f403cb4b..bbce0a20597135b3d4be784658ef811e090ff45b 100644 (file)
@@ -2627,7 +2627,6 @@ typedef enum {
  * parseOpaque is used. This callback is run prior to
  * virDomainDefPostParseCallback. */
 typedef int (*virDomainDefPostParseBasicCallback)(virDomainDefPtr def,
-                                                  virCapsPtr caps,
                                                   void *opaque);
 
 /* Called once after everything else has been parsed, for adjusting
index 7a62dfb1a273496c6eb37b8cc03d2475aeea7759..bfe59a1eff798e8efca2b08be433d4e5d3b73ecf 100644 (file)
@@ -799,16 +799,12 @@ virQEMUCapsFindBinaryForArch(virArch hostarch,
     return ret;
 }
 
-static int
-virQEMUCapsInitGuest(virCapsPtr caps,
-                     virFileCachePtr cache,
-                     virArch hostarch,
-                     virArch guestarch)
+
+char *
+virQEMUCapsGetDefaultEmulator(virArch hostarch,
+                              virArch guestarch)
 {
     char *binary = NULL;
-    virQEMUCapsPtr qemuCaps = NULL;
-    int ret = -1;
-
     /* Check for existence of base emulator, or alternate base
      * which can be used with magic cpu choice
      */
@@ -819,6 +815,22 @@ virQEMUCapsInitGuest(virCapsPtr caps,
     if (virQEMUCapsGuestIsNative(hostarch, guestarch) && !binary)
         binary = g_strdup("/usr/libexec/qemu-kvm");
 
+    return binary;
+}
+
+
+static int
+virQEMUCapsInitGuest(virCapsPtr caps,
+                     virFileCachePtr cache,
+                     virArch hostarch,
+                     virArch guestarch)
+{
+    char *binary = NULL;
+    virQEMUCapsPtr qemuCaps = NULL;
+    int ret = -1;
+
+    binary = virQEMUCapsGetDefaultEmulator(hostarch, guestarch);
+
     /* Ignore binary if extracting version info fails */
     if (binary) {
         if (!(qemuCaps = virQEMUCapsCacheLookup(cache, binary))) {
index a8a5c38d73cb243e2b5706fc460fc12e652a8abc..9b380574f5e1612c265e014bd968eb6f275da7d8 100644 (file)
@@ -627,6 +627,8 @@ const char *virQEMUCapsGetMachineDefaultCPU(virQEMUCapsPtr qemuCaps,
 void virQEMUCapsFilterByMachineType(virQEMUCapsPtr qemuCaps,
                                     virDomainVirtType virtType,
                                     const char *machineType);
+char * virQEMUCapsGetDefaultEmulator(virArch hostarch,
+                                     virArch guestarch);
 
 virFileCachePtr virQEMUCapsCacheNew(const char *libDir,
                                     const char *cacheDir,
index 461fadc3d73ad44cdbb38f16be1c3c0bc80c01f0..45c4ca3995665e0f10b9c1aab3143ed74d46de43 100644 (file)
@@ -4677,13 +4677,16 @@ qemuDomainDefTsegPostParse(virDomainDefPtr def,
 
 static int
 qemuDomainDefPostParseBasic(virDomainDefPtr def,
-                            virCapsPtr caps,
                             void *opaque G_GNUC_UNUSED)
 {
+    virQEMUDriverPtr driver = opaque;
+
     /* check for emulator and create a default one if needed */
-    if (!def->emulator &&
-        !(def->emulator = virDomainDefGetDefaultEmulator(def, caps)))
-        return 1;
+    if (!def->emulator) {
+        if (!(def->emulator = virQEMUCapsGetDefaultEmulator(
+                  driver->hostarch, def->os.arch)))
+            return 1;
+    }
 
     return 0;
 }
index c24b3098a57e34d416313c4f15d56a0b436a0bfe..d7020746796951bc52dd122a673be62f5a9057f4 100644 (file)
@@ -93,6 +93,22 @@ static const char *const *kvm_machines[VIR_ARCH_LAST] = {
     [VIR_ARCH_S390X] = s390x_machines,
 };
 
+
+char *
+virFindFileInPath(const char *file)
+{
+    if (g_str_has_prefix(file, "qemu-system") ||
+        g_str_equal(file, "qemu-kvm")) {
+        return g_strdup_printf("/usr/bin/%s", file);
+    }
+
+    /* Nothing in tests should be relying on real files
+     * in host OS, so we return NULL to try to force
+     * an error in such a case
+     */
+    return NULL;
+}
+
 static int
 testQemuAddGuest(virCapsPtr caps,
                  virArch arch)