In v6.8.0-27-g88957116c9 and friends I've switched the way the default RAM is specified for QEMU (from plain -m to memory-backend-*). This means, that even if a guest doesn't have any NUMA nodes configured we can use memory-backend-* attributes to translate user config requests. For instance, we can allow memory to be shared (<access mode='shared'/> under <memoryBacking/>). But what my original commits are missing is allowing such configuration in our validator. Fixes: 88957116c9d3cb4705380c3702c9d4315fb500bb Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1839034#c12 Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx> --- src/qemu/qemu_validate.c | 10 +++-- .../hugepages-memaccess3.x86_64-latest.args | 39 +++++++++++++++++++ tests/qemuxml2argvtest.c | 1 + 3 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 tests/qemuxml2argvdata/hugepages-memaccess3.x86_64-latest.args diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index bf8127a575..eadf3af8b3 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -754,6 +754,9 @@ static int qemuValidateDomainDefMemory(const virDomainDef *def, virQEMUCapsPtr qemuCaps) { + const char *defaultRAMid = virQEMUCapsGetMachineDefaultRAMid(qemuCaps, + def->virtType, + def->os.machine); const long system_page_size = virGetSystemPageSizeKB(); const virDomainMemtune *mem = &def->mem; @@ -781,9 +784,10 @@ qemuValidateDomainDefMemory(const virDomainDef *def, return -1; } - /* We can't guarantee any other mem.access - * if no guest NUMA nodes are defined. */ - if (mem->hugepages[0].size != system_page_size && + /* We can't guarantee any other mem.access if no guest NUMA + * nodes are defined, unless defaultRAMid is provided. */ + if (!defaultRAMid && + mem->hugepages[0].size != system_page_size && virDomainNumaGetNodeCount(def->numa) == 0 && mem->access != VIR_DOMAIN_MEMORY_ACCESS_DEFAULT && mem->access != VIR_DOMAIN_MEMORY_ACCESS_PRIVATE) { diff --git a/tests/qemuxml2argvdata/hugepages-memaccess3.x86_64-latest.args b/tests/qemuxml2argvdata/hugepages-memaccess3.x86_64-latest.args new file mode 100644 index 0000000000..6033950eab --- /dev/null +++ b/tests/qemuxml2argvdata/hugepages-memaccess3.x86_64-latest.args @@ -0,0 +1,39 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-fedora \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-fedora/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-fedora/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-fedora/.config \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-x86_64 \ +-name guest=fedora,debug-threads=on \ +-S \ +-object secret,id=masterKey0,format=raw,\ +file=/tmp/lib/domain--1-fedora/master-key.aes \ +-machine pc-i440fx-2.9,accel=kvm,usb=off,dump-guest-core=off,\ +memory-backend=pc.ram \ +-cpu EPYC-Rome,x2apic=on,tsc-deadline=on,hypervisor=on,tsc-adjust=on,stibp=on,\ +arch-capabilities=on,ssbd=on,xsaves=on,cmp-legacy=on,amd-ssbd=on,virt-ssbd=on,\ +rdctl-no=on,skip-l1dfl-vmentry=on,mds-no=on,pschange-mc-no=on \ +-m 4096 \ +-object memory-backend-file,id=pc.ram,\ +mem-path=/dev/hugepages2M/libvirt/qemu/-1-fedora,share=yes,prealloc=yes,\ +size=4294967296 \ +-overcommit mem-lock=off \ +-smp 4,sockets=4,cores=1,threads=1 \ +-uuid 63840878-0deb-4095-97e6-fc444d9bc9fa \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-no-acpi \ +-boot menu=on,strict=on \ +-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\ +resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 9b853c6d59..96a2b95331 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -1145,6 +1145,7 @@ mymain(void) DO_TEST_PARSE_ERROR("hugepages-memaccess3", QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE); + DO_TEST_CAPS_LATEST("hugepages-memaccess3"); DO_TEST_CAPS_LATEST("hugepages-nvdimm"); DO_TEST("nosharepages", QEMU_CAPS_MEM_MERGE); DO_TEST("disk-cdrom", NONE); -- 2.26.2