|
|
6ae9ed |
From f613684014782419a1e4951443658403193f458f Mon Sep 17 00:00:00 2001
|
|
|
6ae9ed |
Message-Id: <f613684014782419a1e4951443658403193f458f@dist-git>
|
|
|
6ae9ed |
From: Peter Krempa <pkrempa@redhat.com>
|
|
|
6ae9ed |
Date: Wed, 24 Aug 2016 16:11:12 -0400
|
|
|
6ae9ed |
Subject: [PATCH] qemu: setcpus: Report better errors
|
|
|
6ae9ed |
|
|
|
6ae9ed |
https://bugzilla.redhat.com/show_bug.cgi?id=1097930
|
|
|
6ae9ed |
https://bugzilla.redhat.com/show_bug.cgi?id=1224341
|
|
|
6ae9ed |
|
|
|
6ae9ed |
Mention whether it was the live or persistent definition which caused an
|
|
|
6ae9ed |
error reported and explicitly error out in case when attempting to set
|
|
|
6ae9ed |
maximum vcpu count for a live domain.
|
|
|
6ae9ed |
|
|
|
6ae9ed |
(cherry picked from commit e96041ff1ac270b719e43bf0e3d5a224fe61c26a)
|
|
|
6ae9ed |
---
|
|
|
6ae9ed |
src/qemu/qemu_driver.c | 43 ++++++++++++++++++++++++++++---------------
|
|
|
6ae9ed |
1 file changed, 28 insertions(+), 15 deletions(-)
|
|
|
6ae9ed |
|
|
|
6ae9ed |
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
|
|
6ae9ed |
index 1011bb8..4e703ae 100644
|
|
|
6ae9ed |
--- a/src/qemu/qemu_driver.c
|
|
|
6ae9ed |
+++ b/src/qemu/qemu_driver.c
|
|
|
6ae9ed |
@@ -4770,7 +4770,6 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
|
|
|
6ae9ed |
virDomainDefPtr def;
|
|
|
6ae9ed |
virDomainDefPtr persistentDef;
|
|
|
6ae9ed |
int ret = -1;
|
|
|
6ae9ed |
- unsigned int maxvcpus = 0;
|
|
|
6ae9ed |
virQEMUDriverConfigPtr cfg = NULL;
|
|
|
6ae9ed |
qemuDomainObjPrivatePtr priv;
|
|
|
6ae9ed |
size_t i;
|
|
|
6ae9ed |
@@ -4806,6 +4805,34 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
|
|
|
6ae9ed |
if (virDomainObjGetDefs(vm, flags, &def, &persistentDef) < 0)
|
|
|
6ae9ed |
goto endjob;
|
|
|
6ae9ed |
|
|
|
6ae9ed |
+ if (def) {
|
|
|
6ae9ed |
+ if (flags & VIR_DOMAIN_VCPU_MAXIMUM) {
|
|
|
6ae9ed |
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
|
|
|
6ae9ed |
+ _("maximum vcpu count of a live domain can't be "
|
|
|
6ae9ed |
+ "modified"));
|
|
|
6ae9ed |
+ goto endjob;
|
|
|
6ae9ed |
+ }
|
|
|
6ae9ed |
+
|
|
|
6ae9ed |
+ if (nvcpus > virDomainDefGetVcpusMax(def)) {
|
|
|
6ae9ed |
+ virReportError(VIR_ERR_INVALID_ARG,
|
|
|
6ae9ed |
+ _("requested vcpus is greater than max allowable"
|
|
|
6ae9ed |
+ " vcpus for the live domain: %u > %u"),
|
|
|
6ae9ed |
+ nvcpus, virDomainDefGetVcpusMax(def));
|
|
|
6ae9ed |
+ goto endjob;
|
|
|
6ae9ed |
+ }
|
|
|
6ae9ed |
+ }
|
|
|
6ae9ed |
+
|
|
|
6ae9ed |
+ if (persistentDef) {
|
|
|
6ae9ed |
+ if (!(flags & VIR_DOMAIN_VCPU_MAXIMUM) &&
|
|
|
6ae9ed |
+ nvcpus > virDomainDefGetVcpusMax(persistentDef)) {
|
|
|
6ae9ed |
+ virReportError(VIR_ERR_INVALID_ARG,
|
|
|
6ae9ed |
+ _("requested vcpus is greater than max allowable"
|
|
|
6ae9ed |
+ " vcpus for the persistent domain: %u > %u"),
|
|
|
6ae9ed |
+ nvcpus, virDomainDefGetVcpusMax(persistentDef));
|
|
|
6ae9ed |
+ goto endjob;
|
|
|
6ae9ed |
+ }
|
|
|
6ae9ed |
+ }
|
|
|
6ae9ed |
+
|
|
|
6ae9ed |
if (def && virNumaIsAvailable() &&
|
|
|
6ae9ed |
virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) {
|
|
|
6ae9ed |
if (virCgroupNewThread(priv->cgroup, VIR_CGROUP_THREAD_EMULATOR, 0,
|
|
|
6ae9ed |
@@ -4823,20 +4850,6 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
|
|
|
6ae9ed |
goto endjob;
|
|
|
6ae9ed |
}
|
|
|
6ae9ed |
|
|
|
6ae9ed |
- if (def)
|
|
|
6ae9ed |
- maxvcpus = virDomainDefGetVcpusMax(def);
|
|
|
6ae9ed |
- if (persistentDef) {
|
|
|
6ae9ed |
- if (!maxvcpus || maxvcpus > virDomainDefGetVcpusMax(persistentDef))
|
|
|
6ae9ed |
- maxvcpus = virDomainDefGetVcpusMax(persistentDef);
|
|
|
6ae9ed |
- }
|
|
|
6ae9ed |
- if (!(flags & VIR_DOMAIN_VCPU_MAXIMUM) && nvcpus > maxvcpus) {
|
|
|
6ae9ed |
- virReportError(VIR_ERR_INVALID_ARG,
|
|
|
6ae9ed |
- _("requested vcpus is greater than max allowable"
|
|
|
6ae9ed |
- " vcpus for the domain: %d > %d"),
|
|
|
6ae9ed |
- nvcpus, maxvcpus);
|
|
|
6ae9ed |
- goto endjob;
|
|
|
6ae9ed |
- }
|
|
|
6ae9ed |
-
|
|
|
6ae9ed |
if (def) {
|
|
|
6ae9ed |
if (nvcpus > virDomainDefGetVcpus(def)) {
|
|
|
6ae9ed |
for (i = virDomainDefGetVcpus(def); i < nvcpus; i++) {
|
|
|
6ae9ed |
--
|
|
|
6ae9ed |
2.10.0
|
|
|
6ae9ed |
|