mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-24 06:35:24 +00:00
qemu: Implement VIR_DUMP_RESET
This patch extends qemudDomainCoreDump so it supports new VIR_DUMP_RESET flag. If this flag is set, domain is reset on successful dump. However, this is needed to be done after we start CPUs.
This commit is contained in:
parent
4dadfe59d5
commit
2050b61dec
@ -2923,11 +2923,13 @@ static int qemudDomainCoreDump(virDomainPtr dom,
|
||||
{
|
||||
struct qemud_driver *driver = dom->conn->privateData;
|
||||
virDomainObjPtr vm;
|
||||
qemuDomainObjPrivatePtr priv;
|
||||
int resume = 0, paused = 0;
|
||||
int ret = -1;
|
||||
virDomainEventPtr event = NULL;
|
||||
|
||||
virCheckFlags(VIR_DUMP_LIVE | VIR_DUMP_CRASH | VIR_DUMP_BYPASS_CACHE, -1);
|
||||
virCheckFlags(VIR_DUMP_LIVE | VIR_DUMP_CRASH |
|
||||
VIR_DUMP_BYPASS_CACHE | VIR_DUMP_RESET, -1);
|
||||
|
||||
qemuDriverLock(driver);
|
||||
vm = virDomainFindByUUID(&driver->domains, dom->uuid);
|
||||
@ -2988,10 +2990,18 @@ endjob:
|
||||
/* Since the monitor is always attached to a pty for libvirt, it
|
||||
will support synchronous operations so we always get here after
|
||||
the migration is complete. */
|
||||
else if (resume && paused && virDomainObjIsActive(vm)) {
|
||||
if (qemuProcessStartCPUs(driver, vm, dom->conn,
|
||||
VIR_DOMAIN_RUNNING_UNPAUSED,
|
||||
QEMU_ASYNC_JOB_DUMP) < 0) {
|
||||
else if (((resume && paused) || (flags & VIR_DUMP_RESET)) &&
|
||||
virDomainObjIsActive(vm)) {
|
||||
if ((ret == 0) && (flags & VIR_DUMP_RESET)) {
|
||||
priv = vm->privateData;
|
||||
qemuDomainObjEnterMonitorWithDriver(driver, vm);
|
||||
ret = qemuMonitorSystemReset(priv->mon);
|
||||
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
||||
}
|
||||
|
||||
if (resume && qemuProcessStartCPUs(driver, vm, dom->conn,
|
||||
VIR_DOMAIN_RUNNING_UNPAUSED,
|
||||
QEMU_ASYNC_JOB_DUMP) < 0) {
|
||||
if (virGetLastError() == NULL)
|
||||
qemuReportError(VIR_ERR_OPERATION_FAILED,
|
||||
"%s", _("resuming after dump failed"));
|
||||
|
Loading…
Reference in New Issue
Block a user