]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu & conf: move BeginAsyncJob & EndAsyncJob into src/conf
authorKristina Hanicova <khanicov@redhat.com>
Mon, 5 Sep 2022 13:57:14 +0000 (15:57 +0200)
committerJán Tomko <jtomko@redhat.com>
Wed, 7 Sep 2022 10:15:06 +0000 (12:15 +0200)
Signed-off-by: Kristina Hanicova <khanicov@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Ján Tomko <jtomko@redhat.com>
12 files changed:
docs/kbase/internals/qemu-threads.rst
src/conf/virdomainjob.c
src/conf/virdomainjob.h
src/libvirt_private.syms
src/qemu/qemu_backup.c
src/qemu/qemu_domain.c
src/qemu/qemu_domainjob.c
src/qemu/qemu_domainjob.h
src/qemu/qemu_driver.c
src/qemu/qemu_migration.c
src/qemu/qemu_process.c
src/qemu/qemu_snapshot.c

index afdf9e61ccc4be5fb648e4614be2d796a41884c4..95681d1b9d9309a5a8ef56fecb566246f8281aa3 100644 (file)
@@ -141,7 +141,7 @@ To acquire the agent job condition
 
 To acquire the asynchronous job condition
 
-  ``qemuDomainObjBeginAsyncJob()``
+  ``virDomainObjBeginAsyncJob()``
     - Waits until no async job is running
     - Waits for ``job.cond`` condition ``job.active != 0`` using ``virDomainObj``
       mutex
@@ -149,7 +149,7 @@ To acquire the asynchronous job condition
       and repeats waiting in that case
     - Sets ``job.asyncJob`` to the asynchronous job type
 
-  ``qemuDomainObjEndAsyncJob()``
+  ``virDomainObjEndAsyncJob()``
     - Sets ``job.asyncJob`` to 0
     - Broadcasts on ``job.asyncCond`` condition
 
@@ -277,7 +277,7 @@ Design patterns
 
      obj = qemuDomObjFromDomain(dom);
 
-     qemuDomainObjBeginAsyncJob(obj, VIR_ASYNC_JOB_TYPE);
+     virDomainObjBeginAsyncJob(obj, VIR_ASYNC_JOB_TYPE);
      qemuDomainObjSetAsyncJobMask(obj, allowedJobs);
 
      ...do prep work...
@@ -306,7 +306,7 @@ Design patterns
 
      ...do final work...
 
-     qemuDomainObjEndAsyncJob(obj);
+     virDomainObjEndAsyncJob(obj);
      virDomainObjEndAPI(&obj);
 
 
@@ -317,7 +317,7 @@ Design patterns
 
      obj = qemuDomObjFromDomain(dom);
 
-     qemuDomainObjBeginAsyncJob(obj, VIR_ASYNC_JOB_TYPE);
+     virDomainObjBeginAsyncJob(obj, VIR_ASYNC_JOB_TYPE);
 
      ...do prep work...
 
@@ -334,5 +334,5 @@ Design patterns
 
      ...do final work...
 
-     qemuDomainObjEndAsyncJob(obj);
+     virDomainObjEndAsyncJob(obj);
      virDomainObjEndAPI(&obj);
index dfb28df6f9fc97c78f13c505e58c94a35f8a04f8..feb8c0e971133cbebddfd90827254e8cfc392799 100644 (file)
@@ -544,6 +544,21 @@ virDomainObjBeginAgentJob(virDomainObj *obj,
                                         VIR_ASYNC_JOB_NONE, false);
 }
 
+int virDomainObjBeginAsyncJob(virDomainObj *obj,
+                              virDomainAsyncJob asyncJob,
+                              virDomainJobOperation operation,
+                              unsigned long apiFlags)
+{
+    if (virDomainObjBeginJobInternal(obj, obj->job, VIR_JOB_ASYNC,
+                                     VIR_AGENT_JOB_NONE,
+                                     asyncJob, false) < 0)
+        return -1;
+
+    obj->job->current->operation = operation;
+    obj->job->apiFlags = apiFlags;
+    return 0;
+}
+
 /*
  * obj must be locked and have a reference before calling
  *
@@ -589,3 +604,18 @@ virDomainObjEndAgentJob(virDomainObj *obj)
      * grabbing a job requires checking more variables. */
     virCondBroadcast(&obj->job->cond);
 }
+
+void
+virDomainObjEndAsyncJob(virDomainObj *obj)
+{
+    obj->job->jobsQueued--;
+
+    VIR_DEBUG("Stopping async job: %s (vm=%p name=%s)",
+              virDomainAsyncJobTypeToString(obj->job->asyncJob),
+              obj, obj->def->name);
+
+    virDomainObjResetAsyncJob(obj->job);
+    if (obj->job->cb->saveStatusPrivate)
+        obj->job->cb->saveStatusPrivate(obj);
+    virCondBroadcast(&obj->job->asyncCond);
+}
index 6cec322af172f89db7127b09e8e1efd1de728bb7..3cd02ef4ae27eba2cf9c728e1e7fdff5407020d1 100644 (file)
@@ -252,6 +252,12 @@ int virDomainObjBeginJob(virDomainObj *obj,
 int virDomainObjBeginAgentJob(virDomainObj *obj,
                               virDomainAgentJob agentJob)
     G_GNUC_WARN_UNUSED_RESULT;
+int virDomainObjBeginAsyncJob(virDomainObj *obj,
+                              virDomainAsyncJob asyncJob,
+                              virDomainJobOperation operation,
+                              unsigned long apiFlags)
+    G_GNUC_WARN_UNUSED_RESULT;
 
 void virDomainObjEndJob(virDomainObj *obj);
 void virDomainObjEndAgentJob(virDomainObj *obj);
+void virDomainObjEndAsyncJob(virDomainObj *obj);
index 74988dec342ddd47ef24d8c9f93af833094675a4..254abd50840462f29029308a6ee4beb1b4471a0e 100644 (file)
@@ -1188,11 +1188,13 @@ virDomainJobTypeFromString;
 virDomainJobTypeToString;
 virDomainNestedJobAllowed;
 virDomainObjBeginAgentJob;
+virDomainObjBeginAsyncJob;
 virDomainObjBeginJob;
 virDomainObjBeginJobInternal;
 virDomainObjCanSetJob;
 virDomainObjClearJob;
 virDomainObjEndAgentJob;
+virDomainObjEndAsyncJob;
 virDomainObjEndJob;
 virDomainObjInitJob;
 virDomainObjPreserveJob;
index 2da520dbc7f27c376f2b328a3411173e5a829eb4..c7721812a57c4240aa1d6917630fa71f0603cee8 100644 (file)
@@ -618,7 +618,7 @@ qemuBackupJobTerminate(virDomainObj *vm,
     g_clear_pointer(&priv->backup, virDomainBackupDefFree);
 
     if (vm->job->asyncJob == VIR_ASYNC_JOB_BACKUP)
-        qemuDomainObjEndAsyncJob(vm);
+        virDomainObjEndAsyncJob(vm);
 }
 
 
@@ -786,7 +786,7 @@ qemuBackupBegin(virDomainObj *vm,
      * infrastructure for async jobs. We'll allow standard modify-type jobs
      * as the interlocking of conflicting operations is handled on the block
      * job level */
-    if (qemuDomainObjBeginAsyncJob(vm, VIR_ASYNC_JOB_BACKUP,
+    if (virDomainObjBeginAsyncJob(vm, VIR_ASYNC_JOB_BACKUP,
                                    VIR_DOMAIN_JOB_OPERATION_BACKUP, flags) < 0)
         return -1;
 
@@ -937,7 +937,7 @@ qemuBackupBegin(virDomainObj *vm,
     if (ret == 0)
         qemuDomainObjReleaseAsyncJob(vm);
     else
-        qemuDomainObjEndAsyncJob(vm);
+        virDomainObjEndAsyncJob(vm);
 
     return ret;
 }
index ab05bed456644b5ec2eebdb1e4adb465fb5fc414..83d78900a65daa885e6a089e268bfd78dd2123e2 100644 (file)
@@ -6037,7 +6037,7 @@ void qemuDomainObjEnterMonitor(virDomainObj *obj)
  * To be called immediately before any QEMU monitor API call.
  * Must have already either called virDomainObjBeginJob()
  * and checked that the VM is still active, with asyncJob of
- * VIR_ASYNC_JOB_NONE; or already called qemuDomainObjBeginAsyncJob,
+ * VIR_ASYNC_JOB_NONE; or already called virDomainObjBeginAsyncJob,
  * with the same asyncJob.
  *
  * Returns 0 if job was started, in which case this must be followed with
index 0775e04add7f22f2bf39636eacfea0ab86a1b393..99dcdb49b932d81d0cf344da2537a1758d8d2b0d 100644 (file)
@@ -655,21 +655,6 @@ qemuDomainObjReleaseAsyncJob(virDomainObj *obj)
     obj->job->asyncOwner = 0;
 }
 
-int qemuDomainObjBeginAsyncJob(virDomainObj *obj,
-                               virDomainAsyncJob asyncJob,
-                               virDomainJobOperation operation,
-                               unsigned long apiFlags)
-{
-    if (virDomainObjBeginJobInternal(obj, obj->job, VIR_JOB_ASYNC,
-                                     VIR_AGENT_JOB_NONE,
-                                     asyncJob, false) < 0)
-        return -1;
-
-    obj->job->current->operation = operation;
-    obj->job->apiFlags = apiFlags;
-    return 0;
-}
-
 int
 qemuDomainObjBeginNestedJob(virDomainObj *obj,
                             virDomainAsyncJob asyncJob)
@@ -714,20 +699,6 @@ qemuDomainObjBeginJobNowait(virDomainObj *obj,
                                         VIR_ASYNC_JOB_NONE, true);
 }
 
-void
-qemuDomainObjEndAsyncJob(virDomainObj *obj)
-{
-    obj->job->jobsQueued--;
-
-    VIR_DEBUG("Stopping async job: %s (vm=%p name=%s)",
-              virDomainAsyncJobTypeToString(obj->job->asyncJob),
-              obj, obj->def->name);
-
-    virDomainObjResetAsyncJob(obj->job);
-    qemuDomainSaveStatus(obj);
-    virCondBroadcast(&obj->job->asyncCond);
-}
-
 void
 qemuDomainObjAbortAsyncJob(virDomainObj *obj)
 {
index 0cc4dc44f364f1ddcf21eb77f1c4ad3176cdf87c..1cf9fcc113a47f3f19c7eaa11c4c7f710677ac02 100644 (file)
@@ -69,11 +69,6 @@ int qemuDomainAsyncJobPhaseFromString(virDomainAsyncJob job,
 void qemuDomainEventEmitJobCompleted(virQEMUDriver *driver,
                                      virDomainObj *vm);
 
-int qemuDomainObjBeginAsyncJob(virDomainObj *obj,
-                               virDomainAsyncJob asyncJob,
-                               virDomainJobOperation operation,
-                               unsigned long apiFlags)
-    G_GNUC_WARN_UNUSED_RESULT;
 int qemuDomainObjBeginNestedJob(virDomainObj *obj,
                                 virDomainAsyncJob asyncJob)
     G_GNUC_WARN_UNUSED_RESULT;
@@ -81,7 +76,6 @@ int qemuDomainObjBeginJobNowait(virDomainObj *obj,
                                 virDomainJob job)
     G_GNUC_WARN_UNUSED_RESULT;
 
-void qemuDomainObjEndAsyncJob(virDomainObj *obj);
 void qemuDomainObjAbortAsyncJob(virDomainObj *obj);
 void qemuDomainObjSetJobPhase(virDomainObj *obj,
                               int phase);
index 32efdf02b8369206e4a12ce71d700c7cb6d9d440..80b954920d0f76b6abbed06d75c6f8a44e5ed23d 100644 (file)
@@ -2637,8 +2637,8 @@ qemuDomainSaveInternal(virQEMUDriver *driver,
     virQEMUSaveData *data = NULL;
     g_autoptr(qemuDomainSaveCookie) cookie = NULL;
 
-    if (qemuDomainObjBeginAsyncJob(vm, VIR_ASYNC_JOB_SAVE,
-                                   VIR_DOMAIN_JOB_OPERATION_SAVE, flags) < 0)
+    if (virDomainObjBeginAsyncJob(vm, VIR_ASYNC_JOB_SAVE,
+                                  VIR_DOMAIN_JOB_OPERATION_SAVE, flags) < 0)
         goto cleanup;
 
     if (!qemuMigrationSrcIsAllowed(driver, vm, false, VIR_ASYNC_JOB_SAVE, 0))
@@ -2735,7 +2735,7 @@ qemuDomainSaveInternal(virQEMUDriver *driver,
             virErrorRestore(&save_err);
         }
     }
-    qemuDomainObjEndAsyncJob(vm);
+    virDomainObjEndAsyncJob(vm);
     if (ret == 0)
         qemuDomainRemoveInactive(driver, vm);
 
@@ -3209,7 +3209,7 @@ qemuDomainCoreDumpWithFormat(virDomainPtr dom,
     if (virDomainCoreDumpWithFormatEnsureACL(dom->conn, vm->def) < 0)
         goto cleanup;
 
-    if (qemuDomainObjBeginAsyncJob(vm, VIR_ASYNC_JOB_DUMP,
+    if (virDomainObjBeginAsyncJob(vm, VIR_ASYNC_JOB_DUMP,
                                    VIR_DOMAIN_JOB_OPERATION_DUMP,
                                    flags) < 0)
         goto cleanup;
@@ -3275,7 +3275,7 @@ qemuDomainCoreDumpWithFormat(virDomainPtr dom,
         }
     }
 
-    qemuDomainObjEndAsyncJob(vm);
+    virDomainObjEndAsyncJob(vm);
     if (ret == 0 && flags & VIR_DUMP_CRASH)
         qemuDomainRemoveInactive(driver, vm);
 
@@ -3447,7 +3447,7 @@ processWatchdogEvent(virQEMUDriver *driver,
 
     switch (action) {
     case VIR_DOMAIN_WATCHDOG_ACTION_DUMP:
-        if (qemuDomainObjBeginAsyncJob(vm, VIR_ASYNC_JOB_DUMP,
+        if (virDomainObjBeginAsyncJob(vm, VIR_ASYNC_JOB_DUMP,
                                        VIR_DOMAIN_JOB_OPERATION_DUMP,
                                        flags) < 0) {
             return;
@@ -3475,7 +3475,7 @@ processWatchdogEvent(virQEMUDriver *driver,
     }
 
  endjob:
-    qemuDomainObjEndAsyncJob(vm);
+    virDomainObjEndAsyncJob(vm);
 }
 
 static int
@@ -3523,7 +3523,7 @@ processGuestPanicEvent(virQEMUDriver *driver,
     bool removeInactive = false;
     unsigned long flags = VIR_DUMP_MEMORY_ONLY;
 
-    if (qemuDomainObjBeginAsyncJob(vm, VIR_ASYNC_JOB_DUMP,
+    if (virDomainObjBeginAsyncJob(vm, VIR_ASYNC_JOB_DUMP,
                                    VIR_DOMAIN_JOB_OPERATION_DUMP, flags) < 0)
         return;
 
@@ -3587,7 +3587,7 @@ processGuestPanicEvent(virQEMUDriver *driver,
     }
 
  endjob:
-    qemuDomainObjEndAsyncJob(vm);
+    virDomainObjEndAsyncJob(vm);
     if (removeInactive)
         qemuDomainRemoveInactive(driver, vm);
 }
index 4dfd247d001c4009a2aa4a1a6dfcc9040f81da8c..76a65bf2989ca49b788226cf5fa9b18fa7f57543 100644 (file)
@@ -120,7 +120,7 @@ qemuMigrationJobStart(virDomainObj *vm,
     }
     mask |= JOB_MASK(VIR_JOB_MODIFY_MIGRATION_SAFE);
 
-    if (qemuDomainObjBeginAsyncJob(vm, job, op, apiFlags) < 0)
+    if (virDomainObjBeginAsyncJob(vm, job, op, apiFlags) < 0)
         return -1;
 
     qemuDomainJobSetStatsType(vm->job->current,
@@ -203,7 +203,7 @@ qemuMigrationJobIsActive(virDomainObj *vm,
 static void ATTRIBUTE_NONNULL(1)
 qemuMigrationJobFinish(virDomainObj *vm)
 {
-    qemuDomainObjEndAsyncJob(vm);
+    virDomainObjEndAsyncJob(vm);
 }
 
 
index c05f01c410535ff419621cb27e0b68aa7dbfa779..8592d71cfec583d0d15c5c06ad731bbe59c6664f 100644 (file)
@@ -4675,7 +4675,7 @@ qemuProcessBeginJob(virDomainObj *vm,
                     virDomainJobOperation operation,
                     unsigned long apiFlags)
 {
-    if (qemuDomainObjBeginAsyncJob(vm, VIR_ASYNC_JOB_START,
+    if (virDomainObjBeginAsyncJob(vm, VIR_ASYNC_JOB_START,
                                    operation, apiFlags) < 0)
         return -1;
 
@@ -4687,7 +4687,7 @@ qemuProcessBeginJob(virDomainObj *vm,
 void
 qemuProcessEndJob(virDomainObj *vm)
 {
-    qemuDomainObjEndAsyncJob(vm);
+    virDomainObjEndAsyncJob(vm);
 }
 
 
index c5e5e3ed5bb534cff0b2882333d984e25a261237..d2835ab1a857a54900278339d48d50c87ec46f5a 100644 (file)
@@ -1794,7 +1794,7 @@ qemuSnapshotCreateXML(virDomainPtr domain,
      * a regular job, so we need to set the job mask to disallow query as
      * 'savevm' blocks the monitor. External snapshot will then modify the
      * job mask appropriately. */
-    if (qemuDomainObjBeginAsyncJob(vm, VIR_ASYNC_JOB_SNAPSHOT,
+    if (virDomainObjBeginAsyncJob(vm, VIR_ASYNC_JOB_SNAPSHOT,
                                    VIR_DOMAIN_JOB_OPERATION_SNAPSHOT, flags) < 0)
         return NULL;
 
@@ -1806,7 +1806,7 @@ qemuSnapshotCreateXML(virDomainPtr domain,
         snapshot = qemuSnapshotCreate(vm, domain, def, driver, cfg, flags);
     }
 
-    qemuDomainObjEndAsyncJob(vm);
+    virDomainObjEndAsyncJob(vm);
 
     return snapshot;
 }