
On Tue, Sep 22, 2015 at 14:29:02 +0200, Michal Privoznik wrote:
On 21.09.2015 19:21, Peter Krempa wrote:
When implementing memory hotplug I've opted to recalculate the initial memory size (contents of the <memory> element) as a sum of the sizes of NUMA nodes when NUMA was enabled. This was based on an assumption that qemu did not allow starting when the NUMA node size total didn't equal to the initial memory size. Unfortunately the check was introduced to qemu just lately.
This patch uses the new XML parser flag to decide whether it's safe to update the memory size total from the NUMA cell sizes or not.
As an additional improvement we now report an error in case when the size of hotplug memory would exceed the total memory size.
The rest of the changes assures that the function is called with correct flags. --- src/conf/domain_conf.c | 37 ++++++++++++++++++++++++++++++------- src/conf/domain_conf.h | 1 + src/qemu/qemu_command.c | 3 ++- 3 files changed, 33 insertions(+), 8 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index d2a13ca..64cfd8c 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -3726,15 +3726,36 @@ virDomainDefRemoveDuplicateMetadata(virDomainDefPtr def)
static int -virDomainDefPostParseMemory(virDomainDefPtr def) +virDomainDefPostParseMemory(virDomainDefPtr def, + unsigned int parseFlags) { size_t i; + unsigned long long numaMemory = 0; + unsigned long long hotplugMemory = 0;
- if ((def->mem.initial_memory = virDomainNumaGetMemorySize(def->numa)) == 0) { + /* Attempt to infer the initial memory size from the sum NUMA memory sizes + * in case ABI updates are allowed or the <memory> element wasn't specified */ + if (def->mem.total_memory == 0 || + parseFlags & VIR_DOMAIN_DEF_PARSE_ABI_UPDATE) + numaMemory = virDomainNumaGetMemorySize(def->numa); + + if (numaMemory) { + def->mem.initial_memory = numaMemory;
Is there a reason to not use the setter function you've introduced in previous patch?
Not really, it even saves a few lines of code. Peter