]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
virDomainDefPostParse: Introduce @parseOpaque argument
authorMichal Privoznik <mprivozn@redhat.com>
Thu, 22 Sep 2016 14:41:33 +0000 (16:41 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Mon, 26 Sep 2016 14:50:12 +0000 (16:50 +0200)
Some callers might want to pass yet another pointer to opaque
data to post parse callbacks. The driver generic one is not
enough because two threads executing post parse callback might
want to see different data (e.g. domain object pointer that
domain def belongs to).

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
21 files changed:
src/bhyve/bhyve_domain.c
src/conf/domain_conf.c
src/conf/domain_conf.h
src/libxl/libxl_domain.c
src/lxc/lxc_domain.c
src/lxc/lxc_native.c
src/openvz/openvz_driver.c
src/phyp/phyp_driver.c
src/qemu/qemu_domain.c
src/qemu/qemu_driver.c
src/qemu/qemu_parse_command.c
src/uml/uml_driver.c
src/vbox/vbox_common.c
src/vmware/vmware_driver.c
src/vmx/vmx.c
src/vz/vz_driver.c
src/xen/xen_driver.c
src/xenapi/xenapi_driver.c
src/xenconfig/xen_sxpr.c
src/xenconfig/xen_xl.c
src/xenconfig/xen_xm.c

index 89cb171a9302f36f874ea551200aaf2485963d57..32734621853654f549f9bd233a91e97d46dff48c 100644 (file)
@@ -61,7 +61,8 @@ static int
 bhyveDomainDefPostParse(virDomainDefPtr def,
                         virCapsPtr caps ATTRIBUTE_UNUSED,
                         unsigned int parseFlags ATTRIBUTE_UNUSED,
-                        void *opaque ATTRIBUTE_UNUSED)
+                        void *opaque ATTRIBUTE_UNUSED,
+                        void *parseOpaque ATTRIBUTE_UNUSED)
 {
     /* Add an implicit PCI root controller */
     if (virDomainDefMaybeAddController(def, VIR_DOMAIN_CONTROLLER_TYPE_PCI, 0,
index dd34cec489beb1c0e29ecf48707f6f33d7944408..c8cb68f6f7203d6c2caa019c1d7a4aa375846c9d 100644 (file)
@@ -4562,7 +4562,8 @@ int
 virDomainDefPostParse(virDomainDefPtr def,
                       virCapsPtr caps,
                       unsigned int parseFlags,
-                      virDomainXMLOptionPtr xmlopt)
+                      virDomainXMLOptionPtr xmlopt,
+                      void *parseOpaque)
 {
     int ret;
     struct virDomainDefPostParseDeviceIteratorData data = {
@@ -4579,7 +4580,8 @@ virDomainDefPostParse(virDomainDefPtr def,
     /* call the domain config callback */
     if (xmlopt->config.domainPostParseCallback) {
         ret = xmlopt->config.domainPostParseCallback(def, caps, parseFlags,
-                                                     xmlopt->config.priv);
+                                                     xmlopt->config.priv,
+                                                     parseOpaque);
         if (ret < 0)
             return ret;
     }
@@ -17626,7 +17628,7 @@ virDomainDefParseXML(xmlDocPtr xml,
         goto error;
 
     /* callback to fill driver specific domain aspects */
-    if (virDomainDefPostParse(def, caps, flags, xmlopt) < 0)
+    if (virDomainDefPostParse(def, caps, flags, xmlopt, NULL) < 0)
         goto error;
 
     /* valdiate configuration */
index ce90c2764b4ced62dc3a8e5798fe0ca22f68512e..3326a8761ade403cd6990ad3fcbc471afd11a415 100644 (file)
@@ -2361,11 +2361,15 @@ typedef struct _virDomainXMLOption virDomainXMLOption;
 typedef virDomainXMLOption *virDomainXMLOptionPtr;
 
 /* Called once after everything else has been parsed, for adjusting
- * overall domain defaults.  */
+ * overall domain defaults.
+ * @parseOpaque is opaque data passed by virDomainDefParse* caller,
+ * @opaque is opaque data set by driver (usually pointer to driver
+ * private data). */
 typedef int (*virDomainDefPostParseCallback)(virDomainDefPtr def,
                                              virCapsPtr caps,
                                              unsigned int parseFlags,
-                                             void *opaque);
+                                             void *opaque,
+                                             void *parseOpaque);
 /* Called once per device, for adjusting per-device settings while
  * leaving the overall domain otherwise unchanged.  */
 typedef int (*virDomainDeviceDefPostParseCallback)(virDomainDeviceDefPtr dev,
@@ -2447,11 +2451,11 @@ virDomainXMLNamespacePtr
 virDomainXMLOptionGetNamespace(virDomainXMLOptionPtr xmlopt)
     ATTRIBUTE_NONNULL(1);
 
-int
-virDomainDefPostParse(virDomainDefPtr def,
-                      virCapsPtr caps,
-                      unsigned int parseFlags,
-                      virDomainXMLOptionPtr xmlopt);
+int virDomainDefPostParse(virDomainDefPtr def,
+                          virCapsPtr caps,
+                          unsigned int parseFlags,
+                          virDomainXMLOptionPtr xmlopt,
+                          void *parseOpaque);
 
 int virDomainDefValidate(virDomainDefPtr def,
                          virCapsPtr caps,
index 43f4a7f32b97a696f81a061415db91f96eb1918a..a53b97725a7f55b2077c4d8f171053f5504640cb 100644 (file)
@@ -380,7 +380,8 @@ static int
 libxlDomainDefPostParse(virDomainDefPtr def,
                         virCapsPtr caps ATTRIBUTE_UNUSED,
                         unsigned int parseFlags ATTRIBUTE_UNUSED,
-                        void *opaque ATTRIBUTE_UNUSED)
+                        void *opaque ATTRIBUTE_UNUSED,
+                        void *parseOpaque ATTRIBUTE_UNUSED)
 {
     /* Xen PV domains always have a PV console, so add one to the domain config
      * via post-parse callback if not explicitly specified in the XML. */
index 60db22926cbe2809a96132b4a74b9b8ede06beba..c2e362a00af8f5f51e4dc1d5f11ad634e3c3a5b5 100644 (file)
@@ -364,7 +364,8 @@ static int
 virLXCDomainDefPostParse(virDomainDefPtr def,
                          virCapsPtr caps,
                          unsigned int parseFlags ATTRIBUTE_UNUSED,
-                         void *opaque ATTRIBUTE_UNUSED)
+                         void *opaque ATTRIBUTE_UNUSED,
+                         void *parseOpaque ATTRIBUTE_UNUSED)
 {
     /* check for emulator and create a default one if needed */
     if (!def->emulator &&
index 94fb659221568876d27f241b5774151038813915..76b7922dd7fac49c3e1bf126891440034bafb3fa 100644 (file)
@@ -1095,7 +1095,7 @@ lxcParseConfigString(const char *config,
     lxcSetCapDrop(vmdef, properties);
 
     if (virDomainDefPostParse(vmdef, caps, VIR_DOMAIN_DEF_PARSE_ABI_UPDATE,
-                              xmlopt) < 0)
+                              xmlopt, NULL) < 0)
         goto cleanup;
 
     goto cleanup;
index 6c3edc9378f444a106bf6e42870d9e2b6c0b6d03..e1c008cbe3872cced27dd860efbd150a97cbb23e 100644 (file)
@@ -92,7 +92,8 @@ static int
 openvzDomainDefPostParse(virDomainDefPtr def,
                          virCapsPtr caps ATTRIBUTE_UNUSED,
                          unsigned int parseFlags ATTRIBUTE_UNUSED,
-                         void *opaque ATTRIBUTE_UNUSED)
+                         void *opaque ATTRIBUTE_UNUSED,
+                         void *parseOpaque ATTRIBUTE_UNUSED)
 {
     /* fill the init path */
     if (def->os.type == VIR_DOMAIN_OSTYPE_EXE && !def->os.init) {
index 3dd8927aee5d837cf6e981dd0dc3f2093cd38279..2c1a854fb658e4bbd67bb85e41e6665a00e78d86 100644 (file)
@@ -1097,7 +1097,8 @@ static int
 phypDomainDefPostParse(virDomainDefPtr def ATTRIBUTE_UNUSED,
                        virCapsPtr caps ATTRIBUTE_UNUSED,
                        unsigned int parseFlags ATTRIBUTE_UNUSED,
-                       void *opaque ATTRIBUTE_UNUSED)
+                       void *opaque ATTRIBUTE_UNUSED,
+                       void *parseOpaque ATTRIBUTE_UNUSED)
 {
     return 0;
 }
index 1fbad91714b10d984ec7253540ef7daa7f2da604..b33e0185d420ab95b0527e6e3a71b25df370e5fb 100644 (file)
@@ -2326,7 +2326,8 @@ static int
 qemuDomainDefPostParse(virDomainDefPtr def,
                        virCapsPtr caps,
                        unsigned int parseFlags,
-                       void *opaque)
+                       void *opaque,
+                       void *parseOpaque ATTRIBUTE_UNUSED)
 {
     virQEMUDriverPtr driver = opaque;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
index fb2a8f6b4c5ce64905f88311325e6297c5effcc7..238624a1122bde47c37ff2240ed639e636032ab0 100644 (file)
@@ -7920,7 +7920,7 @@ qemuDomainAttachDeviceConfig(virDomainDefPtr vmdef,
          return -1;
     }
 
-    if (virDomainDefPostParse(vmdef, caps, parse_flags, xmlopt) < 0)
+    if (virDomainDefPostParse(vmdef, caps, parse_flags, xmlopt, NULL) < 0)
         return -1;
 
     return 0;
@@ -8077,7 +8077,7 @@ qemuDomainDetachDeviceConfig(virDomainDefPtr vmdef,
         return -1;
     }
 
-    if (virDomainDefPostParse(vmdef, caps, parse_flags, xmlopt) < 0)
+    if (virDomainDefPostParse(vmdef, caps, parse_flags, xmlopt, NULL) < 0)
         return -1;
 
     return 0;
@@ -8176,7 +8176,7 @@ qemuDomainUpdateDeviceConfig(virDomainDefPtr vmdef,
         return -1;
     }
 
-    if (virDomainDefPostParse(vmdef, caps, parse_flags, xmlopt) < 0)
+    if (virDomainDefPostParse(vmdef, caps, parse_flags, xmlopt, NULL) < 0)
         return -1;
 
     return 0;
index e3a6a346529fde1f1ddcb4fc57812839b83d6093..279f3dadb6bbd7562e3e56991807c2e3608fbf21 100644 (file)
@@ -2628,7 +2628,7 @@ qemuParseCommandLine(virCapsPtr caps,
 
     VIR_FREE(nics);
 
-    if (virDomainDefPostParse(def, caps, 0, xmlopt) < 0)
+    if (virDomainDefPostParse(def, caps, 0, xmlopt, NULL) < 0)
         goto error;
 
     if (cmd->num_args || cmd->num_env) {
index 4f25f76c4e4b252bef362eeb531dc027dd178b52..90d2eae0695a79306179166927fe4d17398c0fbe 100644 (file)
@@ -435,7 +435,8 @@ static int
 umlDomainDefPostParse(virDomainDefPtr def ATTRIBUTE_UNUSED,
                       virCapsPtr caps ATTRIBUTE_UNUSED,
                       unsigned int parseFlags ATTRIBUTE_UNUSED,
-                      void *opaque ATTRIBUTE_UNUSED)
+                      void *opaque ATTRIBUTE_UNUSED,
+                      void *parseOpaque ATTRIBUTE_UNUSED)
 {
     return 0;
 }
index 3624a5e5f3fac7ef2c481e8a3053aa5b7bd9c749..dfade01b5f5bfa88a3c31fe4111f6ced48922425 100644 (file)
@@ -255,7 +255,8 @@ static int
 vboxDomainDefPostParse(virDomainDefPtr def ATTRIBUTE_UNUSED,
                        virCapsPtr caps ATTRIBUTE_UNUSED,
                        unsigned int parseFlags ATTRIBUTE_UNUSED,
-                       void *opaque ATTRIBUTE_UNUSED)
+                       void *opaque ATTRIBUTE_UNUSED,
+                       void *parseOpaque ATTRIBUTE_UNUSED)
 {
     return 0;
 }
index eea2d1b04008e0daad21aaabd0a73e5b2acde292..d44b8a3eb1c0ba48c7b06bdd695b86d0dd6f3d6d 100644 (file)
@@ -86,7 +86,8 @@ static int
 vmwareDomainDefPostParse(virDomainDefPtr def ATTRIBUTE_UNUSED,
                          virCapsPtr caps ATTRIBUTE_UNUSED,
                          unsigned int parseFlags ATTRIBUTE_UNUSED,
-                         void *opaque ATTRIBUTE_UNUSED)
+                         void *opaque ATTRIBUTE_UNUSED,
+                         void *parseOpaque ATTRIBUTE_UNUSED)
 {
     return 0;
 }
index 4a08b0ffb84919cefedebfb1661878ac34c516b7..3ae4b738dce732b68f6fcfe3740486de57fe94af 100644 (file)
@@ -528,7 +528,8 @@ static int
 virVMXDomainDefPostParse(virDomainDefPtr def ATTRIBUTE_UNUSED,
                          virCapsPtr caps ATTRIBUTE_UNUSED,
                          unsigned int parseFlags ATTRIBUTE_UNUSED,
-                         void *opaque ATTRIBUTE_UNUSED)
+                         void *opaque ATTRIBUTE_UNUSED,
+                         void *parseOpaque ATTRIBUTE_UNUSED)
 {
     return 0;
 }
@@ -1817,7 +1818,7 @@ virVMXParseConfig(virVMXContext *ctx,
     }
 
     if (virDomainDefPostParse(def, caps, VIR_DOMAIN_DEF_PARSE_ABI_UPDATE,
-                              xmlopt) < 0)
+                              xmlopt, NULL) < 0)
         goto cleanup;
 
     success = true;
index 819dad7f90aeb7c439b27cd3fdab339f49f24c7e..2f2be122dbd1578f6879e4b60d26fecde1f370d8 100644 (file)
@@ -263,7 +263,8 @@ static int
 vzDomainDefPostParse(virDomainDefPtr def,
                      virCapsPtr caps ATTRIBUTE_UNUSED,
                      unsigned int parseFlags ATTRIBUTE_UNUSED,
-                     void *opaque ATTRIBUTE_UNUSED)
+                     void *opaque ATTRIBUTE_UNUSED,
+                     void *parseOpaque ATTRIBUTE_UNUSED)
 {
     if (vzDomainDefAddDefaultInputDevices(def) < 0)
         return -1;
index 2bab61e39c295ff7f2fdf0d9e74d59f07c9c7f95..5c38bdf03e73cf12d827104e4bba3aee894c2723 100644 (file)
@@ -370,7 +370,8 @@ static int
 xenDomainDefPostParse(virDomainDefPtr def,
                       virCapsPtr caps ATTRIBUTE_UNUSED,
                       unsigned int parseFlags ATTRIBUTE_UNUSED,
-                      void *opaque ATTRIBUTE_UNUSED)
+                      void *opaque ATTRIBUTE_UNUSED,
+                      void *parseOpaque ATTRIBUTE_UNUSED)
 {
     if (!def->memballoon) {
         virDomainMemballoonDefPtr memballoon;
index 9a861c1dce892cf6a535d10773d42b0663b0a9ef..a58c10e1e54393d69ef727a990103e5a88cddfe5 100644 (file)
@@ -75,7 +75,8 @@ static int
 xenapiDomainDefPostParse(virDomainDefPtr def,
                          virCapsPtr caps ATTRIBUTE_UNUSED,
                          unsigned int parseFlags ATTRIBUTE_UNUSED,
-                         void *opaque ATTRIBUTE_UNUSED)
+                         void *opaque ATTRIBUTE_UNUSED,
+                         void *parseOpaque ATTRIBUTE_UNUSED)
 {
     /* add implicit input device */
     if (xenDomainDefAddImplicitInputDevice(def) < 0)
index 40dc53ced2fc6899d71065b05fe68b20f8971f67..0b04fc8b7ee9af39033b90dbb192dd0337a98051 100644 (file)
@@ -1458,7 +1458,7 @@ xenParseSxpr(const struct sexpr *root,
     }
 
     if (virDomainDefPostParse(def, caps, VIR_DOMAIN_DEF_PARSE_ABI_UPDATE,
-                              xmlopt) < 0)
+                              xmlopt, NULL) < 0)
         goto error;
 
     return def;
index 7774dfc0096b6e2d324289bbd4fb1d283c033199..4615bfd98c126f5b5ad32aa2ea0e559121fef7b4 100644 (file)
@@ -721,7 +721,7 @@ xenParseXL(virConfPtr conf,
         goto cleanup;
 
     if (virDomainDefPostParse(def, caps, VIR_DOMAIN_DEF_PARSE_ABI_UPDATE,
-                              xmlopt) < 0)
+                              xmlopt, NULL) < 0)
         goto cleanup;
 
     return def;
index 124c94a58873af645d0ae93423d8ca15d63ebce2..8ef68bbc0eea793848518411c0ba64b85c56c9b3 100644 (file)
@@ -461,7 +461,7 @@ xenParseXM(virConfPtr conf,
          goto cleanup;
 
     if (virDomainDefPostParse(def, caps, VIR_DOMAIN_DEF_PARSE_ABI_UPDATE,
-                              xmlopt) < 0)
+                              xmlopt, NULL) < 0)
         goto cleanup;
 
     return def;