* src/qemu/qemu_monitor.c, src/qemu/qemu_monitor.h: Add a new qemuMonitorStopCPUs() API * src/qemu/qemu_driver.c: Replace direct monitor commands for 'stop' with qemuMonitorStopCPUs() --- src/qemu/qemu_driver.c | 28 ++++------------------------ src/qemu/qemu_monitor_text.c | 13 +++++++++++++ src/qemu/qemu_monitor_text.h | 1 + 3 files changed, 18 insertions(+), 24 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 1717cbd..5ebd4b7 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -2749,7 +2749,6 @@ cleanup: static int qemudDomainSuspend(virDomainPtr dom) { struct qemud_driver *driver = dom->conn->privateData; - char *info; virDomainObjPtr vm; int ret = -1; virDomainEventPtr event = NULL; @@ -2770,17 +2769,12 @@ static int qemudDomainSuspend(virDomainPtr dom) { goto cleanup; } if (vm->state != VIR_DOMAIN_PAUSED) { - if (qemudMonitorCommand(vm, "stop", &info) < 0) { - qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED, - "%s", _("suspend operation failed")); + if (qemuMonitorStopCPUs(vm) < 0) goto cleanup; - } vm->state = VIR_DOMAIN_PAUSED; - qemudDebug("Reply %s", info); event = virDomainEventNewFromObj(vm, VIR_DOMAIN_EVENT_SUSPENDED, VIR_DOMAIN_EVENT_SUSPENDED_PAUSED); - VIR_FREE(info); } if (virDomainSaveStatus(dom->conn, driver->stateDir, vm) < 0) goto cleanup; @@ -3365,13 +3359,9 @@ static int qemudDomainSave(virDomainPtr dom, /* Pause */ if (vm->state == VIR_DOMAIN_RUNNING) { header.was_running = 1; - if (qemudMonitorCommand(vm, "stop", &info) < 0) { - qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED, - "%s", _("suspend operation failed")); + if (qemuMonitorStopCPUs(vm) < 0) goto cleanup; - } vm->state = VIR_DOMAIN_PAUSED; - qemudDebug("Reply %s", info); VIR_FREE(info); } @@ -3527,13 +3517,8 @@ static int qemudDomainCoreDump(virDomainPtr dom, /* Pause domain for non-live dump */ if (vm->state == VIR_DOMAIN_RUNNING) { - if (qemudMonitorCommand (vm, "stop", &info) < 0) { - qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED, - "%s", _("suspending before dump failed")); + if (qemuMonitorStopCPUs(vm) < 0) goto cleanup; - } - DEBUG ("%s: stop reply: %s", vm->def->name, info); - VIR_FREE(info); paused = 1; } @@ -6747,13 +6732,8 @@ qemudDomainMigratePerform (virDomainPtr dom, if (!(flags & VIR_MIGRATE_LIVE)) { /* Pause domain for non-live migration */ - if (qemudMonitorCommand (vm, "stop", &info) < 0) { - qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED, - "%s", _("off-line migration specified, but suspend operation failed")); + if (qemuMonitorStopCPUs(vm) < 0) goto cleanup; - } - DEBUG ("%s: stop reply: %s", vm->def->name, info); - VIR_FREE(info); paused = 1; event = virDomainEventNewFromObj(vm, diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c index 3c12073..ec30e72 100644 --- a/src/qemu/qemu_monitor_text.c +++ b/src/qemu/qemu_monitor_text.c @@ -438,6 +438,19 @@ qemuMonitorStartCPUs(virConnectPtr conn, } +int +qemuMonitorStopCPUs(const virDomainObjPtr vm) { + char *info; + + if (qemudMonitorCommand(vm, "stop", &info) < 0) { + qemudReportError(NULL, NULL, NULL, VIR_ERR_OPERATION_FAILED, + "%s", _("cannot stop CPU execution")); + return -1; + } + VIR_FREE(info); + return 0; +} + int qemuMonitorGetCPUInfo(const virDomainObjPtr vm, int **pids) { diff --git a/src/qemu/qemu_monitor_text.h b/src/qemu/qemu_monitor_text.h index 2632ecf..eb1ba44 100644 --- a/src/qemu/qemu_monitor_text.h +++ b/src/qemu/qemu_monitor_text.h @@ -67,6 +67,7 @@ int qemudMonitorCommandExtra(const virDomainObjPtr vm, int qemuMonitorStartCPUs(virConnectPtr conn, const virDomainObjPtr vm); +int qemuMonitorStopCPUs(const virDomainObjPtr vm); int qemuMonitorGetCPUInfo(const virDomainObjPtr vm, int **pids); -- 1.6.2.5 -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list