virCheckFlags(VIR_DOMAIN_START_PAUSED |
VIR_DOMAIN_START_AUTODESTROY |
- VIR_DOMAIN_START_VALIDATE, NULL);
+ VIR_DOMAIN_START_VALIDATE |
+ VIR_DOMAIN_START_RESET_NVRAM, NULL);
if (flags & VIR_DOMAIN_START_VALIDATE)
parse_flags |= VIR_DOMAIN_DEF_PARSE_VALIDATE_SCHEMA;
start_flags |= VIR_QEMU_PROCESS_START_PAUSED;
if (flags & VIR_DOMAIN_START_AUTODESTROY)
start_flags |= VIR_QEMU_PROCESS_START_AUTODESTROY;
+ if (flags & VIR_DOMAIN_START_RESET_NVRAM)
+ start_flags |= VIR_QEMU_PROCESS_START_RESET_NVRAM;
virNWFilterReadLockFilterUpdates();
virQEMUSaveData *data = NULL;
virFileWrapperFd *wrapperFd = NULL;
bool hook_taint = false;
+ bool reset_nvram = false;
virCheckFlags(VIR_DOMAIN_SAVE_BYPASS_CACHE |
VIR_DOMAIN_SAVE_RUNNING |
- VIR_DOMAIN_SAVE_PAUSED, -1);
+ VIR_DOMAIN_SAVE_PAUSED |
+ VIR_DOMAIN_SAVE_RESET_NVRAM, -1);
+ if (flags & VIR_DOMAIN_SAVE_RESET_NVRAM)
+ reset_nvram = true;
virNWFilterReadLockFilterUpdates();
goto cleanup;
ret = qemuSaveImageStartVM(conn, driver, vm, &fd, data, path,
- false, QEMU_ASYNC_JOB_START);
+ false, reset_nvram, QEMU_ASYNC_JOB_START);
qemuProcessEndJob(driver, vm);
const char *path,
bool start_paused,
bool bypass_cache,
+ bool reset_nvram,
qemuDomainAsyncJob asyncJob)
{
g_autoptr(virDomainDef) def = NULL;
virDomainObjAssignDef(vm, &def, true, NULL);
ret = qemuSaveImageStartVM(conn, driver, vm, &fd, data, path,
- start_paused, asyncJob);
+ start_paused, reset_nvram, asyncJob);
cleanup:
virQEMUSaveDataFree(data);
bool autodestroy = (flags & VIR_DOMAIN_START_AUTODESTROY) != 0;
bool bypass_cache = (flags & VIR_DOMAIN_START_BYPASS_CACHE) != 0;
bool force_boot = (flags & VIR_DOMAIN_START_FORCE_BOOT) != 0;
+ bool reset_nvram = (flags & VIR_DOMAIN_START_RESET_NVRAM) != 0;
unsigned int start_flags = VIR_QEMU_PROCESS_START_COLD;
qemuDomainObjPrivate *priv = vm->privateData;
start_flags |= start_paused ? VIR_QEMU_PROCESS_START_PAUSED : 0;
start_flags |= autodestroy ? VIR_QEMU_PROCESS_START_AUTODESTROY : 0;
+ start_flags |= reset_nvram ? VIR_QEMU_PROCESS_START_RESET_NVRAM : 0;
/*
* If there is a managed saved state restore it instead of starting
priv->job.current->operation = VIR_DOMAIN_JOB_OPERATION_RESTORE;
ret = qemuDomainObjRestore(conn, driver, vm, managed_save,
- start_paused, bypass_cache, asyncJob);
+ start_paused, bypass_cache,
+ reset_nvram, asyncJob);
if (ret == 0) {
if (unlink(managed_save) < 0)
virCheckFlags(VIR_DOMAIN_START_PAUSED |
VIR_DOMAIN_START_AUTODESTROY |
VIR_DOMAIN_START_BYPASS_CACHE |
- VIR_DOMAIN_START_FORCE_BOOT, -1);
+ VIR_DOMAIN_START_FORCE_BOOT |
+ VIR_DOMAIN_START_RESET_NVRAM, -1);
virNWFilterReadLockFilterUpdates();
virQEMUSaveData *data,
const char *path,
bool start_paused,
+ bool reset_nvram,
qemuDomainAsyncJob asyncJob)
{
qemuDomainObjPrivate *priv = vm->privateData;
virQEMUSaveHeader *header = &data->header;
g_autoptr(qemuDomainSaveCookie) cookie = NULL;
int rc = 0;
+ unsigned int start_flags = VIR_QEMU_PROCESS_START_PAUSED |
+ VIR_QEMU_PROCESS_START_GEN_VMID;
+
+ if (reset_nvram)
+ start_flags |= VIR_QEMU_PROCESS_START_RESET_NVRAM;
if (virSaveCookieParseString(data->cookie, (virObject **)&cookie,
virDomainXMLOptionGetSaveCookie(driver->xmlopt)) < 0)
if (qemuProcessStart(conn, driver, vm, cookie ? cookie->cpu : NULL,
asyncJob, "stdio", *fd, path, NULL,
VIR_NETDEV_VPORT_PROFILE_OP_RESTORE,
- VIR_QEMU_PROCESS_START_PAUSED |
- VIR_QEMU_PROCESS_START_GEN_VMID) == 0)
+ start_flags) == 0)
started = true;
if (intermediatefd != -1) {