Discussion:
[libvirt] [PATCH 2/2] conf: Add check/error for domain supports cold/hotplug
John Ferlan
2018-12-07 17:27:04 UTC
Permalink
https://bugzilla.redhat.com/show_bug.cgi?id=1624336

Add a check during virDomainDefCompatibleDevice whether the
domain supports cold/hotplug of a memory module even though
this duplicates the qemuDomainDefValidateMemoryHotplug check.

Without this check, the cold/hot plug would fail on the
subsequent mem_memory check (since it's 0). Adding a check
for max_memory > 0 would allow the subsequent hotplug check
to fail, but would cause coldplug to fail with the somewhat
opaque message "no free memory device slot available".

Signed-off-by: John Ferlan <***@redhat.com>
---
src/conf/domain_conf.c | 7 +++++++
1 file changed, 7 insertions(+)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 2a17214f38..b83368a43a 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -28898,6 +28898,13 @@ virDomainDefCompatibleDevice(virDomainDefPtr def,
if (dev->type == VIR_DOMAIN_DEVICE_MEMORY) {
unsigned long long sz = dev->data.memory->size;

+ if (!virDomainDefHasMemoryHotplug(def)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("cannot use/hotplug a memory device when domain "
+ "'maxMemory' is not defined"));
+ return -1;
+ }
+
if ((virDomainDefGetMemoryTotal(def) + sz) > def->mem.max_memory) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("Attaching memory device with size '%llu' would "
--
2.17.2
John Ferlan
2018-12-07 17:27:03 UTC
Permalink
If virDomainDefCompatibleDevice fails because there is insufficient
domain def->mem.max_memory, then let's also print out that value in
the error message.

Signed-off-by: John Ferlan <***@redhat.com>
---
src/conf/domain_conf.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index b70dca6c61..2a17214f38 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -28901,7 +28901,8 @@ virDomainDefCompatibleDevice(virDomainDefPtr def,
if ((virDomainDefGetMemoryTotal(def) + sz) > def->mem.max_memory) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("Attaching memory device with size '%llu' would "
- "exceed domain's maxMemory config"), sz);
+ "exceed domain's maxMemory config size '%llu'"),
+ sz, def->mem.max_memory);
return -1;
}
}
--
2.17.2
Loading...