Re: [libvirt] [PATCH 09/10] qemu: Remove special case for virDomainSuspend

2011-07-26 Thread Eric Blake

On 07/18/2011 06:27 PM, Jiri Denemark wrote:

---
  src/qemu/qemu_domain.h|1 -
  src/qemu/qemu_driver.c|   46 ++--
  src/qemu/qemu_migration.c |6 +
  3 files changed, 24 insertions(+), 29 deletions(-)



ACK.

--
Eric Blake   ebl...@redhat.com+1-801-349-2682
Libvirt virtualization library http://libvirt.org

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH 09/10] qemu: Remove special case for virDomainSuspend

2011-07-18 Thread Jiri Denemark
---
 src/qemu/qemu_domain.h|1 -
 src/qemu/qemu_driver.c|   46 ++--
 src/qemu/qemu_migration.c |6 +
 3 files changed, 24 insertions(+), 29 deletions(-)

diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
index 1593257..503b9ad 100644
--- a/src/qemu/qemu_domain.h
+++ b/src/qemu/qemu_domain.h
@@ -74,7 +74,6 @@ enum qemuDomainAsyncJob {
 
 enum qemuDomainJobSignals {
 QEMU_JOB_SIGNAL_CANCEL  = 1  0, /* Request job cancellation */
-QEMU_JOB_SIGNAL_SUSPEND = 1  1, /* Request VM suspend to finish live 
migration offline */
 };
 
 struct qemuDomainJobObj {
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 99fab1a..6b8cbc9 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -1327,6 +1327,8 @@ static int qemudDomainSuspend(virDomainPtr dom) {
 int ret = -1;
 virDomainEventPtr event = NULL;
 qemuDomainObjPrivatePtr priv;
+virDomainPausedReason reason;
+int eventDetail;
 
 qemuDriverLock(driver);
 vm = virDomainFindByUUID(driver-domains, dom-uuid);
@@ -1353,34 +1355,32 @@ static int qemudDomainSuspend(virDomainPtr dom) {
 priv = vm-privateData;
 
 if (priv-job.asyncJob == QEMU_ASYNC_JOB_MIGRATION_OUT) {
-if (virDomainObjGetState(vm, NULL) != VIR_DOMAIN_PAUSED) {
-VIR_DEBUG(Requesting domain pause on %s,
-  vm-def-name);
-priv-job.signals |= QEMU_JOB_SIGNAL_SUSPEND;
-}
-ret = 0;
-goto cleanup;
+reason = VIR_DOMAIN_PAUSED_MIGRATION;
+eventDetail = VIR_DOMAIN_EVENT_SUSPENDED_MIGRATED;
 } else {
-if (qemuDomainObjBeginJobWithDriver(driver, vm, QEMU_JOB_SUSPEND)  0)
-goto cleanup;
+reason = VIR_DOMAIN_PAUSED_USER;
+eventDetail = VIR_DOMAIN_EVENT_SUSPENDED_PAUSED;
+}
 
-if (!virDomainObjIsActive(vm)) {
-qemuReportError(VIR_ERR_OPERATION_INVALID,
-%s, _(domain is not running));
+if (qemuDomainObjBeginJobWithDriver(driver, vm, QEMU_JOB_SUSPEND)  0)
+goto cleanup;
+
+if (!virDomainObjIsActive(vm)) {
+qemuReportError(VIR_ERR_OPERATION_INVALID,
+%s, _(domain is not running));
+goto endjob;
+}
+if (virDomainObjGetState(vm, NULL) != VIR_DOMAIN_PAUSED) {
+if (qemuProcessStopCPUs(driver, vm, reason)  0) {
 goto endjob;
 }
-if (virDomainObjGetState(vm, NULL) != VIR_DOMAIN_PAUSED) {
-if (qemuProcessStopCPUs(driver, vm, VIR_DOMAIN_PAUSED_USER)  0) {
-goto endjob;
-}
-event = virDomainEventNewFromObj(vm,
- VIR_DOMAIN_EVENT_SUSPENDED,
- 
VIR_DOMAIN_EVENT_SUSPENDED_PAUSED);
-}
-if (virDomainSaveStatus(driver-caps, driver-stateDir, vm)  0)
-goto endjob;
-ret = 0;
+event = virDomainEventNewFromObj(vm,
+ VIR_DOMAIN_EVENT_SUSPENDED,
+ eventDetail);
 }
+if (virDomainSaveStatus(driver-caps, driver-stateDir, vm)  0)
+goto endjob;
+ret = 0;
 
 endjob:
 if (qemuDomainObjEndJob(driver, vm) == 0)
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index dbf0412..bcd020f 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -770,11 +770,6 @@ qemuMigrationProcessJobSignals(struct qemud_driver *driver,
 if (ret  0) {
 VIR_WARN(Unable to cancel job);
 }
-} else if (priv-job.signals  QEMU_JOB_SIGNAL_SUSPEND) {
-priv-job.signals ^= QEMU_JOB_SIGNAL_SUSPEND;
-VIR_DEBUG(Pausing domain for non-live migration);
-if (qemuMigrationSetOffline(driver, vm)  0)
-VIR_WARN(Unable to pause domain);
 } else {
 ret = 0;
 }
@@ -2843,6 +2838,7 @@ qemuMigrationJobStart(struct qemud_driver *driver,
 qemuDomainObjSetAsyncJobMask(vm, QEMU_JOB_NONE);
 } else {
 qemuDomainObjSetAsyncJobMask(vm, DEFAULT_JOB_MASK |
+ JOB_MASK(QEMU_JOB_SUSPEND) |
  JOB_MASK(QEMU_JOB_MIGRATION_OP));
 }
 
-- 
1.7.6

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list