]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
xen: make direct call when there is only one subdriver
authorEric Blake <eblake@redhat.com>
Thu, 21 Jul 2011 21:11:32 +0000 (15:11 -0600)
committerEric Blake <eblake@redhat.com>
Thu, 28 Jul 2011 20:44:45 +0000 (14:44 -0600)
No need to use a for loop if we know there is exactly one client.
Found by:

for f in $(sed -n 's/.*Drv[^ ]* \([^;]*\);.*/\1/p' src/xen/xen_driver.h)
do
  git grep "\(\.\|->\)$f\b" src/xen
done | cat

and looking through the resulting list to see which callback struct
members are used exactly once.  The next patch will ensure that we
don't reintroduce uses of these callbacks.

* src/xen/xen_driver.c (xenUnifiedClose): Call close
unconditionally, to match xenUnifiedOpen.
(xenUnifiedNodeGetInfo, xenUnifiedDomainCreateXML)
(xenUnifiedDomainSave, xenUnifiedDomainRestore)
(xenUnifiedDomainCoreDump, xenUnifiedDomainUpdateDeviceFlags):
Make direct call to lone implementation.
* src/xen/xend_internal.h (xenDaemonDomainCoreDump)
(xenDaemonUpdateDeviceFlags, xenDaemonCreateXML): Add prototypes.
* src/xen/xend_internal.c (xenDaemonDomainCoreDump)
(xenDaemonUpdateDeviceFlags, xenDaemonCreateXML): Export.

src/xen/xen_driver.c
src/xen/xen_driver.h
src/xen/xend_internal.c
src/xen/xend_internal.h

index 451d3430dc81fa7581b8e43caaa92f94e356ebb7..76506fb9c878234eb00e27afed03bb46fe6650a0 100644 (file)
@@ -414,7 +414,8 @@ fail:
 clean:
     VIR_DEBUG("Failed to activate a mandatory sub-driver");
     for (i = 0 ; i < XEN_UNIFIED_NR_DRIVERS ; i++)
-        if (priv->opened[i]) drivers[i]->xenClose(conn);
+        if (priv->opened[i])
+            drivers[i]->xenClose(conn);
     virMutexDestroy(&priv->lock);
     VIR_FREE(priv);
     conn->privateData = NULL;
@@ -434,8 +435,8 @@ xenUnifiedClose (virConnectPtr conn)
     virDomainEventCallbackListFree(priv->domainEventCallbacks);
 
     for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
-        if (priv->opened[i] && drivers[i]->xenClose)
-            (void) drivers[i]->xenClose (conn);
+        if (priv->opened[i])
+            drivers[i]->xenClose(conn);
 
     virMutexDestroy(&priv->lock);
     VIR_FREE(conn->privateData);
@@ -537,14 +538,9 @@ static int
 xenUnifiedNodeGetInfo (virConnectPtr conn, virNodeInfoPtr info)
 {
     GET_PRIVATE(conn);
-    int i;
-
-    for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
-        if (priv->opened[i] &&
-            drivers[i]->xenNodeGetInfo &&
-            drivers[i]->xenNodeGetInfo (conn, info) == 0)
-            return 0;
 
+    if (priv->opened[XEN_UNIFIED_XEND_OFFSET])
+        return xenDaemonNodeGetInfo(conn, info);
     return -1;
 }
 
@@ -621,15 +617,9 @@ xenUnifiedDomainCreateXML (virConnectPtr conn,
                            const char *xmlDesc, unsigned int flags)
 {
     GET_PRIVATE(conn);
-    int i;
-    virDomainPtr ret;
-
-    for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
-        if (priv->opened[i] && drivers[i]->xenDomainCreateXML) {
-            ret = drivers[i]->xenDomainCreateXML (conn, xmlDesc, flags);
-            if (ret) return ret;
-        }
 
+    if (priv->opened[XEN_UNIFIED_XEND_OFFSET])
+        return xenDaemonCreateXML(conn, xmlDesc, flags);
     return NULL;
 }
 
@@ -1056,7 +1046,6 @@ xenUnifiedDomainSaveFlags(virDomainPtr dom, const char *to, const char *dxml,
                           unsigned int flags)
 {
     GET_PRIVATE(dom->conn);
-    int i;
 
     virCheckFlags(0, -1);
     if (dxml) {
@@ -1065,12 +1054,8 @@ xenUnifiedDomainSaveFlags(virDomainPtr dom, const char *to, const char *dxml,
         return -1;
     }
 
-    for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
-        if (priv->opened[i] &&
-            drivers[i]->xenDomainSave &&
-            drivers[i]->xenDomainSave (dom, to) == 0)
-            return 0;
-
+    if (priv->opened[XEN_UNIFIED_XEND_OFFSET])
+        return xenDaemonDomainSave(dom, to);
     return -1;
 }
 
@@ -1085,7 +1070,6 @@ xenUnifiedDomainRestoreFlags(virConnectPtr conn, const char *from,
                              const char *dxml, unsigned int flags)
 {
     GET_PRIVATE(conn);
-    int i;
 
     virCheckFlags(0, -1);
     if (dxml) {
@@ -1094,12 +1078,8 @@ xenUnifiedDomainRestoreFlags(virConnectPtr conn, const char *from,
         return -1;
     }
 
-    for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
-        if (priv->opened[i] &&
-            drivers[i]->xenDomainRestore &&
-            drivers[i]->xenDomainRestore (conn, from) == 0)
-            return 0;
-
+    if (priv->opened[XEN_UNIFIED_XEND_OFFSET])
+        return xenDaemonDomainRestore(conn, from);
     return -1;
 }
 
@@ -1113,14 +1093,9 @@ static int
 xenUnifiedDomainCoreDump (virDomainPtr dom, const char *to, unsigned int flags)
 {
     GET_PRIVATE(dom->conn);
-    int i;
-
-    for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
-        if (priv->opened[i] &&
-            drivers[i]->xenDomainCoreDump &&
-            drivers[i]->xenDomainCoreDump (dom, to, flags) == 0)
-            return 0;
 
+    if (priv->opened[XEN_UNIFIED_XEND_OFFSET])
+        return xenDaemonDomainCoreDump(dom, to, flags);
     return -1;
 }
 
@@ -1651,13 +1626,9 @@ xenUnifiedDomainUpdateDeviceFlags (virDomainPtr dom, const char *xml,
                                    unsigned int flags)
 {
     GET_PRIVATE(dom->conn);
-    int i;
-
-    for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
-        if (priv->opened[i] && drivers[i]->xenDomainUpdateDeviceFlags &&
-            drivers[i]->xenDomainUpdateDeviceFlags(dom, xml, flags) == 0)
-            return 0;
 
+    if (priv->opened[XEN_UNIFIED_XEND_OFFSET])
+        return xenDaemonUpdateDeviceFlags(dom, xml, flags);
     return -1;
 }
 
index 256d148d617d692a68159f552bddcbf9e8bf5c9f..79b8902811771c8ac36e76b1af25be584a31c14c 100644 (file)
@@ -81,8 +81,8 @@ extern int xenRegister (void);
  * structure with direct calls in xen_unified.c.
  */
 struct xenUnifiedDriver {
-    virDrvOpen xenOpen;
-    virDrvClose xenClose;
+    virDrvOpen xenOpen; /* Must not be NULL */
+    virDrvClose xenClose; /* Must not be NULL */
     virDrvGetVersion  xenVersion;
     virDrvGetHostname xenGetHostname;
     virDrvNodeGetInfo xenNodeGetInfo;
index bd641678e26fb4819161f7a0e229013e2e6147d2..f56beb90f287baa2e7d87cf3c00b4503ec716acf 100644 (file)
@@ -1638,7 +1638,7 @@ xenDaemonDomainSave(virDomainPtr domain, const char *filename)
  *
  * Returns 0 in case of success, -1 in case of error.
  */
-static int
+int
 xenDaemonDomainCoreDump(virDomainPtr domain, const char *filename,
                         unsigned int flags)
 {
@@ -2608,7 +2608,7 @@ xenDaemonLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
  *
  * Returns a new domain object or NULL in case of failure
  */
-static virDomainPtr
+virDomainPtr
 xenDaemonCreateXML(virConnectPtr conn, const char *xmlDesc,
                      unsigned int flags)
 {
@@ -2841,7 +2841,7 @@ cleanup:
  *
  * Returns 0 in case of success, -1 in case of failure.
  */
-static int
+int
 xenDaemonUpdateDeviceFlags(virDomainPtr domain, const char *xml,
                            unsigned int flags)
 {
index a5dd3590e066767414aa5c7ca37f18ae503884ce..eee67b5a1737b335e695df286698bbbace58509e 100644 (file)
@@ -107,6 +107,8 @@ int xenDaemonDomainShutdown(virDomainPtr domain);
 int xenDaemonDomainReboot(virDomainPtr domain, unsigned int flags);
 int xenDaemonDomainDestroyFlags(virDomainPtr domain, unsigned int flags);
 int xenDaemonDomainSave(virDomainPtr domain, const char *filename);
+int xenDaemonDomainCoreDump(virDomainPtr domain, const char *filename,
+                            unsigned int flags);
 int xenDaemonDomainRestore(virConnectPtr conn, const char *filename);
 int xenDaemonDomainSetMemory(virDomainPtr domain, unsigned long memory);
 int xenDaemonDomainSetMaxMemory(virDomainPtr domain, unsigned long memory);
@@ -140,6 +142,8 @@ int xenDaemonDomainGetVcpus         (virDomainPtr domain,
                                          int maxinfo,
                                          unsigned char *cpumaps,
                                          int maplen);
+int xenDaemonUpdateDeviceFlags(virDomainPtr domain, const char *xml,
+                               unsigned int flags);
 int xenDaemonDomainGetAutostart          (virDomainPtr dom,
                                           int *autostart);
 int xenDaemonDomainSetAutostart          (virDomainPtr domain,
@@ -149,6 +153,8 @@ int xenDaemonDomainSetAutostart          (virDomainPtr domain,
 extern struct xenUnifiedDriver xenDaemonDriver;
 int xenDaemonInit (void);
 
+virDomainPtr xenDaemonCreateXML(virConnectPtr conn, const char *xmlDesc,
+                                unsigned int flags);
 virDomainPtr xenDaemonLookupByID(virConnectPtr conn, int id);
 virDomainPtr xenDaemonLookupByUUID(virConnectPtr conn, const unsigned char *uuid);
 virDomainPtr xenDaemonLookupByName(virConnectPtr conn, const char *domname);