mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 03:12:22 +00:00
qemu: Move mem validation into post parse validator
There is this function qemuDomainDefValidateMemoryHotplug() which is called explicitly from hotplug path and the qemu's domain def validator. This is not really necessary because we can move the part that validates feature against qemuCaps into device validator which is called implicitly (from qemu driver's POV). Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com> Tested-by: Daniel Henrique Barboza <danielhb413@gmail.com> Tested-by: Han Han <hhan@redhat.com>
This commit is contained in:
parent
917006cbb9
commit
2df92ec4e5
@ -8544,14 +8544,12 @@ qemuDomainDefValidateMemoryHotplugDevice(const virDomainMemoryDef *mem,
|
||||
*/
|
||||
int
|
||||
qemuDomainDefValidateMemoryHotplug(const virDomainDef *def,
|
||||
virQEMUCapsPtr qemuCaps,
|
||||
virQEMUCapsPtr qemuCaps G_GNUC_UNUSED,
|
||||
const virDomainMemoryDef *mem)
|
||||
{
|
||||
unsigned int nmems = def->nmems;
|
||||
unsigned long long hotplugSpace;
|
||||
unsigned long long hotplugMemory = 0;
|
||||
bool needPCDimmCap = false;
|
||||
bool needNvdimmCap = false;
|
||||
size_t i;
|
||||
|
||||
hotplugSpace = def->mem.max_memory - virDomainDefGetMemoryInitial(def);
|
||||
@ -8598,40 +8596,12 @@ qemuDomainDefValidateMemoryHotplug(const virDomainDef *def,
|
||||
for (i = 0; i < def->nmems; i++) {
|
||||
hotplugMemory += def->mems[i]->size;
|
||||
|
||||
switch (def->mems[i]->model) {
|
||||
case VIR_DOMAIN_MEMORY_MODEL_DIMM:
|
||||
needPCDimmCap = true;
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_MEMORY_MODEL_NVDIMM:
|
||||
needNvdimmCap = true;
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_MEMORY_MODEL_NONE:
|
||||
case VIR_DOMAIN_MEMORY_MODEL_LAST:
|
||||
break;
|
||||
}
|
||||
|
||||
/* already existing devices don't need to be checked on hotplug */
|
||||
if (!mem &&
|
||||
qemuDomainDefValidateMemoryHotplugDevice(def->mems[i], def) < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (needPCDimmCap &&
|
||||
!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_PC_DIMM)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("memory hotplug isn't supported by this QEMU binary"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (needNvdimmCap &&
|
||||
!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_NVDIMM)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("nvdimm isn't supported by this QEMU binary"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (hotplugMemory > hotplugSpace) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("memory device total size exceeds hotplug space"));
|
||||
|
@ -4595,7 +4595,16 @@ static int
|
||||
qemuValidateDomainDeviceDefMemory(virDomainMemoryDefPtr mem,
|
||||
virQEMUCapsPtr qemuCaps)
|
||||
{
|
||||
if (mem->model == VIR_DOMAIN_MEMORY_MODEL_NVDIMM) {
|
||||
switch (mem->model) {
|
||||
case VIR_DOMAIN_MEMORY_MODEL_DIMM:
|
||||
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_PC_DIMM)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("memory hotplug isn't supported by this QEMU binary"));
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_MEMORY_MODEL_NVDIMM:
|
||||
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_NVDIMM)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("nvdimm isn't supported by this QEMU binary"));
|
||||
@ -4609,6 +4618,11 @@ qemuValidateDomainDeviceDefMemory(virDomainMemoryDefPtr mem,
|
||||
"with this QEMU binary"));
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_MEMORY_MODEL_NONE:
|
||||
case VIR_DOMAIN_MEMORY_MODEL_LAST:
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user