|
|
7a3408 |
From 739c64c914deae4be776f255540187793a3dc1de Mon Sep 17 00:00:00 2001
|
|
|
7a3408 |
Message-Id: <739c64c914deae4be776f255540187793a3dc1de@dist-git>
|
|
|
7a3408 |
From: Martin Kletzander <mkletzan@redhat.com>
|
|
|
7a3408 |
Date: Thu, 13 Aug 2015 15:11:48 +0200
|
|
|
7a3408 |
Subject: [PATCH] qemu: Use numad information when getting pin information
|
|
|
7a3408 |
|
|
|
7a3408 |
Pinning information returned for emulatorpin and vcpupin calls is being
|
|
|
7a3408 |
returned from our data without querying cgroups for some time. However,
|
|
|
7a3408 |
not all the data were utilized. When automatic placement is used the
|
|
|
7a3408 |
information is not returned for the calls mentioned above. Since the
|
|
|
7a3408 |
numad hint in private data is properly saved/restored, we can safely use
|
|
|
7a3408 |
it to return true information.
|
|
|
7a3408 |
|
|
|
7a3408 |
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1162947
|
|
|
7a3408 |
|
|
|
7a3408 |
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
|
|
|
7a3408 |
(cherry picked from commit 776924e37649f2d47acd805746d5fd9325212ea5)
|
|
|
7a3408 |
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
|
|
|
7a3408 |
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
|
|
7a3408 |
---
|
|
|
7a3408 |
src/qemu/qemu_driver.c | 11 +++++++++++
|
|
|
7a3408 |
1 file changed, 11 insertions(+)
|
|
|
7a3408 |
|
|
|
7a3408 |
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
|
|
7a3408 |
index 48857ce..748f16a 100644
|
|
|
7a3408 |
--- a/src/qemu/qemu_driver.c
|
|
|
7a3408 |
+++ b/src/qemu/qemu_driver.c
|
|
|
7a3408 |
@@ -5244,6 +5244,7 @@ qemuDomainGetVcpuPinInfo(virDomainPtr dom,
|
|
|
7a3408 |
int ret = -1;
|
|
|
7a3408 |
int hostcpus, vcpu;
|
|
|
7a3408 |
virBitmapPtr allcpumap = NULL;
|
|
|
7a3408 |
+ qemuDomainObjPrivatePtr priv = NULL;
|
|
|
7a3408 |
|
|
|
7a3408 |
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
|
|
|
7a3408 |
VIR_DOMAIN_AFFECT_CONFIG, -1);
|
|
|
7a3408 |
@@ -5264,6 +5265,7 @@ qemuDomainGetVcpuPinInfo(virDomainPtr dom,
|
|
|
7a3408 |
goto cleanup;
|
|
|
7a3408 |
|
|
|
7a3408 |
virBitmapSetAll(allcpumap);
|
|
|
7a3408 |
+ priv = vm->privateData;
|
|
|
7a3408 |
|
|
|
7a3408 |
/* Clamp to actual number of vcpus */
|
|
|
7a3408 |
if (ncpumaps > def->vcpus)
|
|
|
7a3408 |
@@ -5282,6 +5284,9 @@ qemuDomainGetVcpuPinInfo(virDomainPtr dom,
|
|
|
7a3408 |
|
|
|
7a3408 |
if (pininfo && pininfo->cpumask)
|
|
|
7a3408 |
bitmap = pininfo->cpumask;
|
|
|
7a3408 |
+ else if (vm->def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO &&
|
|
|
7a3408 |
+ priv->autoCpuset)
|
|
|
7a3408 |
+ bitmap = priv->autoCpuset;
|
|
|
7a3408 |
else
|
|
|
7a3408 |
bitmap = allcpumap;
|
|
|
7a3408 |
|
|
|
7a3408 |
@@ -5432,6 +5437,7 @@ qemuDomainGetEmulatorPinInfo(virDomainPtr dom,
|
|
|
7a3408 |
int hostcpus;
|
|
|
7a3408 |
virBitmapPtr cpumask = NULL;
|
|
|
7a3408 |
virBitmapPtr bitmap = NULL;
|
|
|
7a3408 |
+ qemuDomainObjPrivatePtr priv = NULL;
|
|
|
7a3408 |
|
|
|
7a3408 |
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
|
|
|
7a3408 |
VIR_DOMAIN_AFFECT_CONFIG, -1);
|
|
|
7a3408 |
@@ -5448,10 +5454,15 @@ qemuDomainGetEmulatorPinInfo(virDomainPtr dom,
|
|
|
7a3408 |
if ((hostcpus = nodeGetCPUCount(NULL)) < 0)
|
|
|
7a3408 |
goto cleanup;
|
|
|
7a3408 |
|
|
|
7a3408 |
+ priv = vm->privateData;
|
|
|
7a3408 |
+
|
|
|
7a3408 |
if (def->cputune.emulatorpin) {
|
|
|
7a3408 |
cpumask = def->cputune.emulatorpin;
|
|
|
7a3408 |
} else if (def->cpumask) {
|
|
|
7a3408 |
cpumask = def->cpumask;
|
|
|
7a3408 |
+ } else if (vm->def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO &&
|
|
|
7a3408 |
+ priv->autoCpuset) {
|
|
|
7a3408 |
+ cpumask = priv->autoCpuset;
|
|
|
7a3408 |
} else {
|
|
|
7a3408 |
if (!(bitmap = virBitmapNew(hostcpus)))
|
|
|
7a3408 |
goto cleanup;
|
|
|
7a3408 |
--
|
|
|
7a3408 |
2.5.0
|
|
|
7a3408 |
|