qemu: Save numad advice into qemuDomainObjPrivate

Thanks to that we don't need to drag the pointer everywhere and future
code will get cleaner.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
This commit is contained in:
Martin Kletzander 2014-12-12 15:23:12 +01:00
parent f801a81208
commit c74d58ad47
5 changed files with 22 additions and 28 deletions

View File

@ -608,8 +608,7 @@ qemuSetupDevicesCgroup(virQEMUDriverPtr driver,
int int
qemuSetupCpusetMems(virDomainObjPtr vm, qemuSetupCpusetMems(virDomainObjPtr vm)
virBitmapPtr nodemask)
{ {
virCgroupPtr cgroup_temp = NULL; virCgroupPtr cgroup_temp = NULL;
qemuDomainObjPrivatePtr priv = vm->privateData; qemuDomainObjPrivatePtr priv = vm->privateData;
@ -624,7 +623,7 @@ qemuSetupCpusetMems(virDomainObjPtr vm,
return 0; return 0;
if (virDomainNumatuneMaybeFormatNodeset(vm->def->numatune, if (virDomainNumatuneMaybeFormatNodeset(vm->def->numatune,
nodemask, priv->autoNodeset,
&mem_mask, -1) < 0) &mem_mask, -1) < 0)
goto cleanup; goto cleanup;
@ -644,7 +643,6 @@ qemuSetupCpusetMems(virDomainObjPtr vm,
static int static int
qemuSetupCpusetCgroup(virDomainObjPtr vm, qemuSetupCpusetCgroup(virDomainObjPtr vm,
virBitmapPtr nodemask,
virCapsPtr caps) virCapsPtr caps)
{ {
qemuDomainObjPrivatePtr priv = vm->privateData; qemuDomainObjPrivatePtr priv = vm->privateData;
@ -659,7 +657,7 @@ qemuSetupCpusetCgroup(virDomainObjPtr vm,
if (vm->def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) { if (vm->def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) {
virBitmapPtr cpumap; virBitmapPtr cpumap;
if (!(cpumap = virCapabilitiesGetCpusForNodemask(caps, nodemask))) if (!(cpumap = virCapabilitiesGetCpusForNodemask(caps, priv->autoNodeset)))
goto cleanup; goto cleanup;
cpu_mask = virBitmapFormat(cpumap); cpu_mask = virBitmapFormat(cpumap);
virBitmapFree(cpumap); virBitmapFree(cpumap);
@ -823,8 +821,7 @@ qemuConnectCgroup(virQEMUDriverPtr driver,
int int
qemuSetupCgroup(virQEMUDriverPtr driver, qemuSetupCgroup(virQEMUDriverPtr driver,
virDomainObjPtr vm, virDomainObjPtr vm)
virBitmapPtr nodemask)
{ {
qemuDomainObjPrivatePtr priv = vm->privateData; qemuDomainObjPrivatePtr priv = vm->privateData;
virCapsPtr caps = NULL; virCapsPtr caps = NULL;
@ -857,7 +854,7 @@ qemuSetupCgroup(virQEMUDriverPtr driver,
if (qemuSetupCpuCgroup(driver, vm) < 0) if (qemuSetupCpuCgroup(driver, vm) < 0)
goto cleanup; goto cleanup;
if (qemuSetupCpusetCgroup(vm, nodemask, caps) < 0) if (qemuSetupCpusetCgroup(vm, caps) < 0)
goto cleanup; goto cleanup;
ret = 0; ret = 0;
@ -1042,8 +1039,7 @@ qemuSetupCgroupForVcpu(virDomainObjPtr vm)
int int
qemuSetupCgroupForEmulator(virQEMUDriverPtr driver, qemuSetupCgroupForEmulator(virQEMUDriverPtr driver,
virDomainObjPtr vm, virDomainObjPtr vm)
virBitmapPtr nodemask)
{ {
virBitmapPtr cpumask = NULL; virBitmapPtr cpumask = NULL;
virBitmapPtr cpumap = NULL; virBitmapPtr cpumap = NULL;
@ -1079,7 +1075,7 @@ qemuSetupCgroupForEmulator(virQEMUDriverPtr driver,
goto cleanup; goto cleanup;
if (def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) { if (def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) {
if (!(cpumap = qemuPrepareCpumap(driver, nodemask))) if (!(cpumap = qemuPrepareCpumap(driver, priv->autoNodeset)))
goto cleanup; goto cleanup;
cpumask = cpumap; cpumask = cpumap;
} else if (def->cputune.emulatorpin) { } else if (def->cputune.emulatorpin) {

View File

@ -45,10 +45,8 @@ int qemuTeardownHostdevCgroup(virDomainObjPtr vm,
int qemuConnectCgroup(virQEMUDriverPtr driver, int qemuConnectCgroup(virQEMUDriverPtr driver,
virDomainObjPtr vm); virDomainObjPtr vm);
int qemuSetupCgroup(virQEMUDriverPtr driver, int qemuSetupCgroup(virQEMUDriverPtr driver,
virDomainObjPtr vm, virDomainObjPtr vm);
virBitmapPtr nodemask); int qemuSetupCpusetMems(virDomainObjPtr vm);
int qemuSetupCpusetMems(virDomainObjPtr vm,
virBitmapPtr nodemask);
int qemuSetupCgroupVcpuBW(virCgroupPtr cgroup, int qemuSetupCgroupVcpuBW(virCgroupPtr cgroup,
unsigned long long period, unsigned long long period,
long long quota); long long quota);
@ -64,8 +62,7 @@ int qemuSetupCgroupIOThreadsPin(virCgroupPtr cgroup,
int qemuSetupCgroupForVcpu(virDomainObjPtr vm); int qemuSetupCgroupForVcpu(virDomainObjPtr vm);
int qemuSetupCgroupForIOThreads(virDomainObjPtr vm); int qemuSetupCgroupForIOThreads(virDomainObjPtr vm);
int qemuSetupCgroupForEmulator(virQEMUDriverPtr driver, int qemuSetupCgroupForEmulator(virQEMUDriverPtr driver,
virDomainObjPtr vm, virDomainObjPtr vm);
virBitmapPtr nodemask);
int qemuRemoveCgroup(virQEMUDriverPtr driver, virDomainObjPtr vm); int qemuRemoveCgroup(virQEMUDriverPtr driver, virDomainObjPtr vm);
int qemuAddToCgroup(virDomainObjPtr vm); int qemuAddToCgroup(virDomainObjPtr vm);

View File

@ -451,6 +451,7 @@ qemuDomainObjPrivateFree(void *data)
qemuAgentClose(priv->agent); qemuAgentClose(priv->agent);
} }
VIR_FREE(priv->cleanupCallbacks); VIR_FREE(priv->cleanupCallbacks);
virBitmapFree(priv->autoNodeset);
VIR_FREE(priv); VIR_FREE(priv);
} }

View File

@ -187,6 +187,7 @@ struct _qemuDomainObjPrivate {
char **qemuDevices; /* NULL-terminated list of devices aliases known to QEMU */ char **qemuDevices; /* NULL-terminated list of devices aliases known to QEMU */
bool hookRun; /* true if there was a hook run over this domain */ bool hookRun; /* true if there was a hook run over this domain */
virBitmapPtr autoNodeset;
}; };
typedef enum { typedef enum {

View File

@ -2377,12 +2377,12 @@ qemuPrepareCpumap(virQEMUDriverPtr driver,
*/ */
static int static int
qemuProcessInitCpuAffinity(virQEMUDriverPtr driver, qemuProcessInitCpuAffinity(virQEMUDriverPtr driver,
virDomainObjPtr vm, virDomainObjPtr vm)
virBitmapPtr nodemask)
{ {
int ret = -1; int ret = -1;
virBitmapPtr cpumap = NULL; virBitmapPtr cpumap = NULL;
virBitmapPtr cpumapToSet = NULL; virBitmapPtr cpumapToSet = NULL;
qemuDomainObjPrivatePtr priv = vm->privateData;
if (!vm->pid) { if (!vm->pid) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
@ -2390,7 +2390,7 @@ qemuProcessInitCpuAffinity(virQEMUDriverPtr driver,
return -1; return -1;
} }
if (!(cpumap = qemuPrepareCpumap(driver, nodemask))) if (!(cpumap = qemuPrepareCpumap(driver, priv->autoNodeset)))
return -1; return -1;
if (vm->def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) { if (vm->def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) {
@ -3041,13 +3041,13 @@ struct qemuProcessHookData {
virConnectPtr conn; virConnectPtr conn;
virDomainObjPtr vm; virDomainObjPtr vm;
virQEMUDriverPtr driver; virQEMUDriverPtr driver;
virBitmapPtr nodemask;
virQEMUDriverConfigPtr cfg; virQEMUDriverConfigPtr cfg;
}; };
static int qemuProcessHook(void *data) static int qemuProcessHook(void *data)
{ {
struct qemuProcessHookData *h = data; struct qemuProcessHookData *h = data;
qemuDomainObjPrivatePtr priv = h->vm->privateData;
int ret = -1; int ret = -1;
int fd; int fd;
virBitmapPtr nodeset = NULL; virBitmapPtr nodeset = NULL;
@ -3084,7 +3084,7 @@ static int qemuProcessHook(void *data)
mode = virDomainNumatuneGetMode(h->vm->def->numatune, -1); mode = virDomainNumatuneGetMode(h->vm->def->numatune, -1);
nodeset = virDomainNumatuneGetNodeset(h->vm->def->numatune, nodeset = virDomainNumatuneGetNodeset(h->vm->def->numatune,
h->nodemask, -1); priv->autoNodeset, -1);
if (virNumaSetupMemoryPolicy(mode, nodeset) < 0) if (virNumaSetupMemoryPolicy(mode, nodeset) < 0)
goto cleanup; goto cleanup;
@ -4426,7 +4426,7 @@ int qemuProcessStart(virConnectPtr conn,
if (virBitmapParse(nodeset, 0, &nodemask, VIR_DOMAIN_CPUMASK_LEN) < 0) if (virBitmapParse(nodeset, 0, &nodemask, VIR_DOMAIN_CPUMASK_LEN) < 0)
goto cleanup; goto cleanup;
} }
hookData.nodemask = nodemask; priv->autoNodeset = nodemask;
/* "volume" type disk's source must be translated before /* "volume" type disk's source must be translated before
* cgroup and security setting. * cgroup and security setting.
@ -4630,13 +4630,13 @@ int qemuProcessStart(virConnectPtr conn,
} }
VIR_DEBUG("Setting up domain cgroup (if required)"); VIR_DEBUG("Setting up domain cgroup (if required)");
if (qemuSetupCgroup(driver, vm, nodemask) < 0) if (qemuSetupCgroup(driver, vm) < 0)
goto cleanup; goto cleanup;
/* This must be done after cgroup placement to avoid resetting CPU /* This must be done after cgroup placement to avoid resetting CPU
* affinity */ * affinity */
if (!vm->def->cputune.emulatorpin && if (!vm->def->cputune.emulatorpin &&
qemuProcessInitCpuAffinity(driver, vm, nodemask) < 0) qemuProcessInitCpuAffinity(driver, vm) < 0)
goto cleanup; goto cleanup;
VIR_DEBUG("Setting domain security labels"); VIR_DEBUG("Setting domain security labels");
@ -4683,7 +4683,7 @@ int qemuProcessStart(virConnectPtr conn,
goto cleanup; goto cleanup;
VIR_DEBUG("Setting cgroup for emulator (if required)"); VIR_DEBUG("Setting cgroup for emulator (if required)");
if (qemuSetupCgroupForEmulator(driver, vm, nodemask) < 0) if (qemuSetupCgroupForEmulator(driver, vm) < 0)
goto cleanup; goto cleanup;
VIR_DEBUG("Setting affinity of emulator threads"); VIR_DEBUG("Setting affinity of emulator threads");
@ -4710,7 +4710,7 @@ int qemuProcessStart(virConnectPtr conn,
goto cleanup; goto cleanup;
VIR_DEBUG("Setting up post-init cgroup restrictions"); VIR_DEBUG("Setting up post-init cgroup restrictions");
if (qemuSetupCpusetMems(vm, nodemask) < 0) if (qemuSetupCpusetMems(vm) < 0)
goto cleanup; goto cleanup;
VIR_DEBUG("Detecting VCPU PIDs"); VIR_DEBUG("Detecting VCPU PIDs");
@ -4848,7 +4848,6 @@ int qemuProcessStart(virConnectPtr conn,
* if we failed to initialize the now running VM. kill it off and * if we failed to initialize the now running VM. kill it off and
* pretend we never started it */ * pretend we never started it */
VIR_FREE(nodeset); VIR_FREE(nodeset);
virBitmapFree(nodemask);
virCommandFree(cmd); virCommandFree(cmd);
VIR_FORCE_CLOSE(logfile); VIR_FORCE_CLOSE(logfile);
if (priv->mon) if (priv->mon)