]> xenbits.xensource.com Git - xen.git/commitdiff
libxl: multidev: Expose libxl__multidev_one_callback
authorIan Jackson <ian.jackson@eu.citrix.com>
Thu, 25 Sep 2014 15:04:01 +0000 (16:04 +0100)
committerIan Jackson <Ian.Jackson@eu.citrix.com>
Fri, 26 Sep 2014 14:12:30 +0000 (15:12 +0100)
Now a caller who wants to be able to do other work when the aodev
completes can put their own callback into the aodev, and make the
multidev machinery aware that the particular aodev is complete (from
the point of view that multidev should have) whenever it likes.

No functional change in this patch.

Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
tools/libxl/libxl_device.c
tools/libxl/libxl_internal.h

index 342544644e8ef7f3a8a94bb33bab00ccc005aac2..1f6514cc60942d8f8b8244a6dfc12692827766b1 100644 (file)
@@ -479,15 +479,13 @@ void libxl__multidev_begin(libxl__ao *ao, libxl__multidev *multidev)
     multidev->preparation = libxl__multidev_prepare(multidev);
 }
 
-static void multidev_one_callback(libxl__egc *egc, libxl__ao_device *aodev);
-
 libxl__ao_device *libxl__multidev_prepare(libxl__multidev *multidev) {
     STATE_AO_GC(multidev->ao);
     libxl__ao_device *aodev;
 
     GCNEW(aodev);
     aodev->multidev = multidev;
-    aodev->callback = multidev_one_callback;
+    aodev->callback = libxl__multidev_one_callback;
     libxl__prepare_ao_device(ao, aodev);
 
     if (multidev->used >= multidev->allocd) {
@@ -499,7 +497,7 @@ libxl__ao_device *libxl__multidev_prepare(libxl__multidev *multidev) {
     return aodev;
 }
 
-static void multidev_one_callback(libxl__egc *egc, libxl__ao_device *aodev)
+void libxl__multidev_one_callback(libxl__egc *egc, libxl__ao_device *aodev)
 {
     STATE_AO_GC(aodev->ao);
     libxl__multidev *multidev = aodev->multidev;
@@ -523,7 +521,7 @@ void libxl__multidev_prepared(libxl__egc *egc,
                               libxl__multidev *multidev, int rc)
 {
     multidev->preparation->rc = rc;
-    multidev_one_callback(egc, multidev->preparation);
+    libxl__multidev_one_callback(egc, multidev->preparation);
 }
 
 /******************************************************************************/
index 20aca4b24e6b3ac8614dd4c49783248f69b1042c..b19374e2aded562ea02f7ab4f4e77311dea3633e 100644 (file)
@@ -2161,7 +2161,8 @@ struct libxl__ao_device {
  * Then zero or more times
  *    libxl__multidev_prepare
  *    libxl__initiate_device_{remove/addition}
- *       (or some other thing which will eventually call aodev->callback)
+ *       (or some other thing which will eventually call
+ *        aodev->callback or libxl__multidev_one_callback)
  * Finally, once
  *    libxl__multidev_prepared
  * which will result (perhaps reentrantly) in one call to
@@ -2176,6 +2177,16 @@ _hidden void libxl__multidev_begin(libxl__ao *ao, libxl__multidev*);
  * had ->callback set.  The user should not mess with aodev->callback. */
 _hidden libxl__ao_device *libxl__multidev_prepare(libxl__multidev*);
 
+/* Indicates to multidev that this one device has been processed.
+ * Normally the multidev user does not need to touch this function, as
+ * multidev_prepare will name it in aodev->callback.  However, if you
+ * want to do something more complicated you can set aodev->callback
+ * yourself to something else, so long as you eventually call
+ * libxl__multidev_one_callback.
+ */
+_hidden void libxl__multidev_one_callback(libxl__egc *egc,
+                                          libxl__ao_device *aodev);
+
 /* Notifies the multidev machinery that we have now finished preparing
  * and initiating devices.  multidev->callback may then be called as
  * soon as there are no prepared but not completed operations