diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 43bd0fff40..70fb40650e 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -3997,6 +3997,30 @@ qemuDomainDeviceDefValidateController(const virDomainControllerDef *controller, } +static int +qemuDomainDeviceDefValidateMemory(const virDomainMemoryDef *memory ATTRIBUTE_UNUSED, + const virDomainDef *def) +{ + const long system_page_size = virGetSystemPageSizeKB(); + + /* We can't guarantee any other mem.access + * if no guest NUMA nodes are defined. */ + if (def->mem.nhugepages != 0 && + def->mem.hugepages[0].size != system_page_size && + virDomainNumaGetNodeCount(def->numa) == 0 && + def->mem.access != VIR_DOMAIN_MEMORY_ACCESS_DEFAULT && + def->mem.access != VIR_DOMAIN_MEMORY_ACCESS_PRIVATE) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("memory access mode '%s' not supported " + "without guest numa node"), + virDomainMemoryAccessTypeToString(def->mem.access)); + return -1; + } + + return 0; +} + + static int qemuDomainDeviceDefValidate(const virDomainDeviceDef *dev, const virDomainDef *def, @@ -4052,6 +4076,10 @@ qemuDomainDeviceDefValidate(const virDomainDeviceDef *dev, qemuCaps); break; + case VIR_DOMAIN_DEVICE_MEMORY: + ret = qemuDomainDeviceDefValidateMemory(dev->data.memory, def); + break; + case VIR_DOMAIN_DEVICE_LEASE: case VIR_DOMAIN_DEVICE_FS: case VIR_DOMAIN_DEVICE_INPUT: @@ -4063,7 +4091,6 @@ qemuDomainDeviceDefValidate(const virDomainDeviceDef *dev, case VIR_DOMAIN_DEVICE_SHMEM: case VIR_DOMAIN_DEVICE_TPM: case VIR_DOMAIN_DEVICE_PANIC: - case VIR_DOMAIN_DEVICE_MEMORY: case VIR_DOMAIN_DEVICE_IOMMU: case VIR_DOMAIN_DEVICE_NONE: case VIR_DOMAIN_DEVICE_LAST: diff --git a/tests/qemuxml2argvdata/hugepages-memaccess3.xml b/tests/qemuxml2argvdata/hugepages-memaccess3.xml new file mode 100644 index 0000000000..8ec38d802a --- /dev/null +++ b/tests/qemuxml2argvdata/hugepages-memaccess3.xml @@ -0,0 +1,87 @@ + + fedora + 63840878-0deb-4095-97e6-fc444d9bc9fa + 4194304 + 4194304 + + + + + 4 + + hvm + + + + + + + + + + + + + + + + destroy + restart + destroy + + + + + + /usr/bin/qemu-system-x86_64 + + + + + +
+ + +
+ + + +
+ + +
+ + +
+ + + + + + + + + + + +
+ + + + + + + + + +