]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
qemu_capabilities: Introduce virQEMUCapsCacheLookupByArch
authorMichal Privoznik <mprivozn@redhat.com>
Mon, 30 Jun 2014 14:12:07 +0000 (16:12 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 3 Jul 2014 10:22:37 +0000 (12:22 +0200)
The API may come handy if somebody has an architecture and wants to
look through available qemus if the architecture is supported or not.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_capabilities.c
src/qemu/qemu_capabilities.h

index 751c14309aca8bf68e0544557fd6ee40d3eabcef..2f8378a42fb9678922ce7b79bd8a00c80155193e 100644 (file)
@@ -299,6 +299,10 @@ struct _virQEMUCapsCache {
     gid_t runGid;
 };
 
+struct virQEMUCapsSearchData {
+    virArch arch;
+};
+
 
 static virClassPtr virQEMUCapsClass;
 static void virQEMUCapsDispose(void *obj);
@@ -3465,6 +3469,35 @@ virQEMUCapsCacheLookupCopy(virQEMUCapsCachePtr cache, const char *binary)
 }
 
 
+static int
+virQEMUCapsCompareArch(const void *payload,
+                       const void *name ATTRIBUTE_UNUSED,
+                       const void *opaque)
+{
+    struct virQEMUCapsSearchData *data = (struct virQEMUCapsSearchData *) opaque;
+    const virQEMUCaps *qemuCaps = payload;
+
+    return qemuCaps->arch == data->arch;
+}
+
+
+virQEMUCapsPtr
+virQEMUCapsCacheLookupByArch(virQEMUCapsCachePtr cache,
+                             virArch arch)
+{
+    virQEMUCapsPtr ret = NULL;
+    struct virQEMUCapsSearchData data = { .arch = arch };
+
+    virMutexLock(&cache->lock);
+    ret = virHashSearch(cache->binaries, virQEMUCapsCompareArch, &data);
+    VIR_DEBUG("Returning caps %p for arch %s", ret, virArchToString(arch));
+    virObjectRef(ret);
+    virMutexUnlock(&cache->lock);
+
+    return ret;
+}
+
+
 void
 virQEMUCapsCacheFree(virQEMUCapsCachePtr cache)
 {
index 53ebe9044b27628cc223c69cb0305fbc27208ebf..1eb92b5231a5e2cb8602b3d5d666523271e53f29 100644 (file)
@@ -274,6 +274,8 @@ virQEMUCapsPtr virQEMUCapsCacheLookup(virQEMUCapsCachePtr cache,
                                       const char *binary);
 virQEMUCapsPtr virQEMUCapsCacheLookupCopy(virQEMUCapsCachePtr cache,
                                           const char *binary);
+virQEMUCapsPtr virQEMUCapsCacheLookupByArch(virQEMUCapsCachePtr cache,
+                                            virArch arch);
 void virQEMUCapsCacheFree(virQEMUCapsCachePtr cache);
 
 virCapsPtr virQEMUCapsInit(virQEMUCapsCachePtr cache);