On 01.10.2015 14:10, Martin Kletzander wrote: > We are using memory-backing-file even when it's not needed, for example > if user requests hugepages for mamory backing, but does not specify any > pagesize, neither memory node pinning. This causes migrations to fail > when migrating from older libvirt that did not do this. So similarly to > commit 7832fac84741d65e851dbdbfaf474785cbfdcf3c which does it for > memory-backend-ram, this commit makes is more generic and > backend-agnostic, so the backend is not used if there is no specific > pagesize of hugepages requested, no nodeset the memory node should be > bound to, no memory access change required, and so on. > > Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1266856 > > Signed-off-by: Martin Kletzander <mkletzan@xxxxxxxxxx> > --- > src/qemu/qemu_command.c | 36 ++++++++++------------ > .../qemuxml2argv-hugepages-numa.args | 6 ++-- > 2 files changed, 19 insertions(+), 23 deletions(-) > > diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c > index 321a5e931350..7ff3e535a543 100644 > --- a/src/qemu/qemu_command.c > +++ b/src/qemu/qemu_command.c > @@ -5120,12 +5120,6 @@ qemuBuildMemoryBackendStr(unsigned long long size, > } > > if (pagesize || hugepage) { > - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_FILE)) { > - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", > - _("this qemu doesn't support hugepage memory backing")); > - goto cleanup; > - } > - > if (pagesize) { > /* Now lets see, if the huge page we want to use is even mounted > * and ready to use */ > @@ -5204,29 +5198,31 @@ qemuBuildMemoryBackendStr(unsigned long long size, > goto cleanup; > } > > - if (!hugepage && !pagesize) { > - > - if ((userNodeset || nodeSpecified || force) && > - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_RAM)) { > + /* If none of the following is requested... */ > + if (!pagesize && !userNodeset && !memAccess && !nodeSpecified && !force) { > + /* report back that using the new backend is not necessary > + * to achieve the desired configuration */ > + ret = 1; > + } else { > + /* otherwise check the required capability */ > + if (STREQ(*backendType, "memory-backend-file") && > + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_FILE)) { > virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", > _("this qemu doesn't support the " > - "memory-backend-ram object")); > + "memory-backend-file object")); > goto cleanup; > + } else if (STREQ(*backendType, "memory-backend-ram") && > + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_RAM)) { > + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", > + _("this qemu doesn't support the " > + "memory-backend-ram object")); goto cleanup; /* please */ > } > > - /* report back that using the new backend is not necessary to achieve > - * the desired configuration */ > - if (!userNodeset && !nodeSpecified) { > - *backendProps = props; > - props = NULL; > - ret = 1; > - goto cleanup; > - } > + ret = 0; > } > > *backendProps = props; > props = NULL; > - ret = 0; > > cleanup: > virJSONValueFree(props); > diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-numa.args b/tests/qemuxml2argvdata/qemuxml2argv-hugepages-numa.args > index 37511b109b6e..3496cf1a732d 100644 > --- a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-numa.args > +++ b/tests/qemuxml2argvdata/qemuxml2argv-hugepages-numa.args > @@ -4,9 +4,9 @@ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=spice \ > -M pc-i440fx-2.3 \ > -m size=1048576k,slots=16,maxmem=1099511627776k \ > -smp 2 \ > --object memory-backend-file,id=ram-node0,prealloc=yes,\ > -mem-path=/dev/hugepages2M/libvirt/qemu,size=1073741824 \ > --numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \ > +-mem-prealloc \ > +-mem-path /dev/hugepages2M/libvirt/qemu \ > +-numa node,nodeid=0,cpus=0-1,mem=1024 \ > -object memory-backend-file,id=memdimm0,prealloc=yes,\ > mem-path=/dev/hugepages1G/libvirt/qemu,size=1073741824,host-nodes=1-3,policy=bind \ > -device pc-dimm,node=0,memdev=memdimm0,id=dimm0 \ > Otherwise looking good. ACK series. Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list