priv->qemuCaps, vm->def, mem, NULL, true) < 0)
goto cleanup;
+ if (qemuProcessBuildDestroyHugepagesPath(driver, vm, mem, true) < 0)
+ goto cleanup;
+
if (qemuDomainNamespaceSetupMemory(driver, vm, mem) < 0)
goto cleanup;
teardowndevice = true;
static bool
-qemuProcessNeedHugepagesPath(virDomainDefPtr def)
+qemuProcessNeedHugepagesPath(virDomainDefPtr def,
+ virDomainMemoryDefPtr mem)
{
const long system_pagesize = virGetSystemPageSizeKB();
size_t i;
return true;
}
+ if (mem &&
+ mem->model == VIR_DOMAIN_MEMORY_MODEL_DIMM &&
+ mem->pagesize &&
+ mem->pagesize != system_pagesize)
+ return true;
+
return false;
}
-static int
+int
qemuProcessBuildDestroyHugepagesPath(virQEMUDriverPtr driver,
virDomainObjPtr vm,
+ virDomainMemoryDefPtr mem,
bool build)
{
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
int ret = -1;
if (build)
- shouldBuild = qemuProcessNeedHugepagesPath(vm->def);
+ shouldBuild = qemuProcessNeedHugepagesPath(vm->def, mem);
if (!build || shouldBuild) {
for (i = 0; i < cfg->nhugetlbfs; i++) {
goto cleanup;
if (build) {
+ if (virFileExists(hugepagePath)) {
+ ret = 0;
+ goto cleanup;
+ }
+
if (virFileMakePathWithMode(hugepagePath, 0700) < 0) {
virReportSystemError(errno,
_("Unable to create %s"),
goto cleanup;
}
- if (qemuProcessBuildDestroyHugepagesPath(driver, obj, true) < 0)
+ if (qemuProcessBuildDestroyHugepagesPath(driver, obj, NULL, true) < 0)
goto error;
if ((qemuDomainAssignAddresses(obj->def, priv->qemuCaps,
NULL) < 0)
goto cleanup;
- if (qemuProcessBuildDestroyHugepagesPath(driver, vm, true) < 0)
+ if (qemuProcessBuildDestroyHugepagesPath(driver, vm, NULL, true) < 0)
goto cleanup;
/* Ensure no historical cgroup for this VM is lying around bogus
goto endjob;
}
- qemuProcessBuildDestroyHugepagesPath(driver, vm, false);
+ qemuProcessBuildDestroyHugepagesPath(driver, vm, NULL, false);
vm->def->id = -1;
virDomainPausedReason reason,
qemuDomainAsyncJob asyncJob);
+int qemuProcessBuildDestroyHugepagesPath(virQEMUDriverPtr driver,
+ virDomainObjPtr vm,
+ virDomainMemoryDefPtr mem,
+ bool build);
+
void qemuProcessAutostartAll(virQEMUDriverPtr driver);
void qemuProcessReconnectAll(virConnectPtr conn, virQEMUDriverPtr driver);