]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Prefer qemu-system-* binaries
authorAndrea Bolognani <abologna@redhat.com>
Fri, 14 Sep 2018 12:36:15 +0000 (14:36 +0200)
committerAndrea Bolognani <abologna@redhat.com>
Fri, 21 Sep 2018 13:54:03 +0000 (15:54 +0200)
We already prefer them in capabilities, and domcapabilities
should be consistent with that.

This commit is best viewed with 'git show -w'.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
src/qemu/qemu_capabilities.c

index e15286812494e47667f94dd4be2a0bca87e4aa67..29e07d263d73145905c253333ceb5c8469f01d8a 100644 (file)
@@ -583,6 +583,7 @@ struct _virQEMUCaps {
 
 struct virQEMUCapsSearchData {
     virArch arch;
+    const char *binaryFilter;
 };
 
 
@@ -4743,7 +4744,15 @@ virQEMUCapsCompareArch(const void *payload,
     struct virQEMUCapsSearchData *data = (struct virQEMUCapsSearchData *)opaque;
     const virQEMUCaps *qemuCaps = payload;
 
-    return qemuCaps->arch == data->arch;
+    if (qemuCaps->arch != data->arch)
+        return false;
+
+    if (data->binaryFilter &&
+        !strstr(qemuCaps->binary, data->binaryFilter)) {
+        return false;
+    }
+
+    return true;
 }
 
 
@@ -4752,20 +4761,28 @@ virQEMUCapsCacheLookupByArch(virFileCachePtr cache,
                              virArch arch)
 {
     virQEMUCapsPtr ret = NULL;
+    const char *binaryFilters[] = {
+        "qemu-system-",
+        NULL,
+    };
     virArch archs[] = {
         arch,
         virQEMUCapsFindTarget(virArchFromHost(), arch),
     };
+    size_t i;
     size_t j;
 
-    for (j = 0; j < ARRAY_CARDINALITY(archs); j++) {
-        struct virQEMUCapsSearchData data = {
-            .arch = archs[j],
-        };
+    for (i = 0; i < ARRAY_CARDINALITY(binaryFilters); i++) {
+        for (j = 0; j < ARRAY_CARDINALITY(archs); j++) {
+            struct virQEMUCapsSearchData data = {
+                .arch = archs[j],
+                .binaryFilter = binaryFilters[i],
+            };
 
-        ret = virFileCacheLookupByFunc(cache, virQEMUCapsCompareArch, &data);
-        if (ret)
-            goto done;
+            ret = virFileCacheLookupByFunc(cache, virQEMUCapsCompareArch, &data);
+            if (ret)
+                goto done;
+        }
     }
 
     virReportError(VIR_ERR_INVALID_ARG,