From 8641fcfa637f0ae2cc5eae629c82573324ecb5ac Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Thu, 3 Nov 2022 16:01:02 +0100 Subject: [PATCH] qemu: Assume QEMU_CAPS_OBJECT_MEMORY_FILE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Introduced in QEMU's commit of v2.1.0-rc0~41^2~26 only for Linux, and later in v3.1.0-rc0~71^2~10 for all POSIX, the memory-backend-file is going to be present for all QEMU versions we support (4.2.0, currently). Therefore, we can assume the capability is always set and thus doesn't need to be checked for. Signed-off-by: Michal Privoznik Reviewed-by: Ján Tomko --- src/qemu/qemu_capabilities.c | 9 ++--- src/qemu/qemu_command.c | 13 ++------ src/qemu/qemu_validate.c | 10 ------ .../hugepages-default-1G-nodeset-2M.err | 2 +- tests/qemuxml2argvtest.c | 33 ++++++------------- tests/qemuxml2xmltest.c | 26 +++++---------- 6 files changed, 26 insertions(+), 67 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 6e5037762a..329a120237 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -1725,7 +1725,7 @@ static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsMaxCPU[] = { static virQEMUCapsObjectTypeProps virQEMUCapsObjectProps[] = { { "memory-backend-file", virQEMUCapsObjectPropsMemoryBackendFile, G_N_ELEMENTS(virQEMUCapsObjectPropsMemoryBackendFile), - QEMU_CAPS_OBJECT_MEMORY_FILE }, + -1 }, { "memory-backend-memfd", virQEMUCapsObjectPropsMemoryBackendMemfd, G_N_ELEMENTS(virQEMUCapsObjectPropsMemoryBackendMemfd), QEMU_CAPS_OBJECT_MEMORY_MEMFD }, @@ -6096,12 +6096,9 @@ virQEMUCapsFillDomainMemoryBackingCaps(virQEMUCaps *qemuCaps, VIR_DOMAIN_CAPS_ENUM_SET(memoryBacking->sourceType, VIR_DOMAIN_MEMORY_SOURCE_MEMFD); - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_FILE)) - VIR_DOMAIN_CAPS_ENUM_SET(memoryBacking->sourceType, - VIR_DOMAIN_MEMORY_SOURCE_FILE); - VIR_DOMAIN_CAPS_ENUM_SET(memoryBacking->sourceType, - VIR_DOMAIN_MEMORY_SOURCE_ANONYMOUS); + VIR_DOMAIN_MEMORY_SOURCE_ANONYMOUS, + VIR_DOMAIN_MEMORY_SOURCE_FILE); } diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 2a7146e6df..bcd30ef4f3 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -3472,17 +3472,10 @@ qemuBuildMemoryBackendProps(virJSONValue **backendProps, rc = 1; } else { /* otherwise check the required capability */ - if (STREQ(backendType, "memory-backend-file") && - !virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_OBJECT_MEMORY_FILE)) { + if (STREQ(backendType, "memory-backend-memfd") && + !virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_OBJECT_MEMORY_MEMFD)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("this qemu doesn't support the " - "memory-backend-file object")); - return -1; - } else if (STREQ(backendType, "memory-backend-memfd") && - !virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_OBJECT_MEMORY_MEMFD)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("this qemu doesn't support the " - "memory-backend-memfd object")); + _("this qemu doesn't support the memory-backend-memfd object")); return -1; } diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 5cc3c92a1f..1192bf1804 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -983,19 +983,9 @@ static int qemuValidateDomainDefNuma(const virDomainDef *def, virQEMUCaps *qemuCaps) { - const long system_page_size = virGetSystemPageSizeKB(); size_t ncells = virDomainNumaGetNodeCount(def->numa); size_t i; - if (def->mem.nhugepages && - def->mem.hugepages[0].size != system_page_size && - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_FILE)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("huge pages per NUMA node are not " - "supported with this QEMU")); - return -1; - } - for (i = 0; i < ncells; i++) { virBitmap *cpumask = virDomainNumaGetNodeCpumask(def->numa, i); diff --git a/tests/qemuxml2argvdata/hugepages-default-1G-nodeset-2M.err b/tests/qemuxml2argvdata/hugepages-default-1G-nodeset-2M.err index 8c0706fb8b..b103478bb8 100644 --- a/tests/qemuxml2argvdata/hugepages-default-1G-nodeset-2M.err +++ b/tests/qemuxml2argvdata/hugepages-default-1G-nodeset-2M.err @@ -1 +1 @@ -unsupported configuration: huge pages per NUMA node are not supported with this QEMU +two master hugepages detected: 2048 and 1048576 diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 4d02b0f97c..bf3465ee15 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -1234,8 +1234,7 @@ mymain(void) DO_TEST_PARSE_ERROR_NOCAPS("hugepages-memaccess-invalid"); DO_TEST_CAPS_LATEST("hugepages-memaccess"); DO_TEST_CAPS_LATEST("hugepages-memaccess2"); - DO_TEST_PARSE_ERROR("hugepages-memaccess3", - QEMU_CAPS_OBJECT_MEMORY_FILE); + DO_TEST_PARSE_ERROR_NOCAPS("hugepages-memaccess3"); DO_TEST_CAPS_LATEST("hugepages-memaccess3"); DO_TEST_CAPS_LATEST("hugepages-nvdimm"); DO_TEST_NOCAPS("nosharepages"); @@ -1907,8 +1906,7 @@ mymain(void) DO_TEST_PARSE_ERROR_NOCAPS("cpu-numa3"); DO_TEST_PARSE_ERROR_NOCAPS("cpu-numa-disjoint"); DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA); - DO_TEST_FAILURE_NOCAPS("cpu-numa-memshared"); - DO_TEST("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_FILE); + DO_TEST_NOCAPS("cpu-numa-memshared"); DO_TEST("cpu-host-model", QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, @@ -1965,8 +1963,7 @@ mymain(void) DO_TEST_PARSE_ERROR_NOCAPS("cputune-vcpusched-overlap"); DO_TEST("cputune-numatune", QEMU_CAPS_KVM, - QEMU_CAPS_OBJECT_IOTHREAD, - QEMU_CAPS_OBJECT_MEMORY_FILE); + QEMU_CAPS_OBJECT_IOTHREAD); DO_TEST("vcpu-placement-static", QEMU_CAPS_KVM, QEMU_CAPS_OBJECT_IOTHREAD); @@ -1991,8 +1988,7 @@ mymain(void) DO_TEST_CAPS_LATEST("numatune-hmat"); DO_TEST_NOCAPS("numatune-auto-nodeset-invalid"); - DO_TEST("numatune-auto-prefer", - QEMU_CAPS_OBJECT_MEMORY_FILE); + DO_TEST_NOCAPS("numatune-auto-prefer"); DO_TEST_FAILURE_NOCAPS("numatune-static-nodeset-exceed-hostnode"); DO_TEST_PARSE_ERROR_NOCAPS("numatune-memnode-nocpu"); DO_TEST_PARSE_ERROR_NOCAPS("numatune-memnodes-problematic"); @@ -2637,18 +2633,15 @@ mymain(void) DO_TEST_PARSE_ERROR_NOCAPS("memory-hotplug-invalid-targetnode"); DO_TEST_NOCAPS("memory-hotplug"); DO_TEST("memory-hotplug", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA); - DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA, - QEMU_CAPS_OBJECT_MEMORY_FILE); + DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA); DO_TEST_CAPS_LATEST("memory-hotplug-dimm-addr"); DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA, - QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE, - QEMU_CAPS_OBJECT_MEMORY_FILE); + QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE); DO_TEST_FULL("memory-hotplug-ppc64-nonuma-abi-update", "", ARG_PARSEFLAGS, VIR_DOMAIN_DEF_PARSE_ABI_UPDATE, ARG_QEMU_CAPS, QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA, QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE, - QEMU_CAPS_OBJECT_MEMORY_FILE, QEMU_CAPS_LAST, ARG_END); DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm"); @@ -2662,13 +2655,11 @@ mymain(void) DO_TEST_CAPS_VER("memory-hotplug-nvdimm-readonly", "5.2.0"); DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-readonly"); DO_TEST("memory-hotplug-nvdimm-ppc64", QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE, - QEMU_CAPS_OBJECT_MEMORY_FILE, QEMU_CAPS_DEVICE_NVDIMM); DO_TEST_FULL("memory-hotplug-nvdimm-ppc64-abi-update", "", ARG_PARSEFLAGS, VIR_DOMAIN_DEF_PARSE_ABI_UPDATE, ARG_QEMU_CAPS, QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE, - QEMU_CAPS_OBJECT_MEMORY_FILE, QEMU_CAPS_DEVICE_NVDIMM, QEMU_CAPS_LAST, ARG_END); @@ -2840,16 +2831,12 @@ mymain(void) DO_TEST_CAPS_LATEST("virtio-options-video-packed"); DO_TEST_PARSE_ERROR_NOCAPS("virtio-options-memballoon-freepage-reporting"); - DO_TEST("fd-memory-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE, - QEMU_CAPS_KVM); - DO_TEST("fd-memory-numa-topology2", QEMU_CAPS_OBJECT_MEMORY_FILE, - QEMU_CAPS_KVM); - DO_TEST("fd-memory-numa-topology3", QEMU_CAPS_OBJECT_MEMORY_FILE, - QEMU_CAPS_KVM); + DO_TEST("fd-memory-numa-topology", QEMU_CAPS_KVM); + DO_TEST("fd-memory-numa-topology2", QEMU_CAPS_KVM); + DO_TEST("fd-memory-numa-topology3", QEMU_CAPS_KVM); DO_TEST_CAPS_LATEST("fd-memory-numa-topology4"); - DO_TEST("fd-memory-no-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE, - QEMU_CAPS_KVM); + DO_TEST("fd-memory-no-numa-topology", QEMU_CAPS_KVM); DO_TEST_CAPS_LATEST("memfd-memory-numa"); DO_TEST_CAPS_LATEST("memfd-memory-default-hugepage"); diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index 7c2f525c68..40763607ba 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -657,7 +657,6 @@ mymain(void) DO_TEST_NOCAPS("seclabel-device-multiple"); DO_TEST_FULL("seclabel-dynamic-none-relabel", "", WHEN_INACTIVE, ARG_QEMU_CAPS, QEMU_CAPS_DEVICE_CIRRUS_VGA, - QEMU_CAPS_OBJECT_MEMORY_FILE, QEMU_CAPS_SPICE, QEMU_CAPS_LAST, ARG_END); DO_TEST_NOCAPS("numad-static-vcpu-no-numatune"); @@ -926,11 +925,11 @@ mymain(void) DO_TEST_NOCAPS("cpu-numa-no-memory-element"); DO_TEST_NOCAPS("cpu-numa-disordered"); DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA); - DO_TEST("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_FILE); + DO_TEST_NOCAPS("cpu-numa-memshared"); DO_TEST_NOCAPS("numatune-auto-prefer"); - DO_TEST("numatune-memnode", QEMU_CAPS_NUMA, QEMU_CAPS_OBJECT_MEMORY_FILE); - DO_TEST("numatune-memnode-no-memory", QEMU_CAPS_OBJECT_MEMORY_FILE); + DO_TEST("numatune-memnode", QEMU_CAPS_NUMA); + DO_TEST_NOCAPS("numatune-memnode-no-memory"); DO_TEST("numatune-distances", QEMU_CAPS_NUMA); DO_TEST("numatune-no-vcpu", QEMU_CAPS_NUMA); DO_TEST("numatune-hmat", QEMU_CAPS_NUMA_HMAT); @@ -1025,14 +1024,13 @@ mymain(void) DO_TEST_CAPS_ARCH_LATEST("aarch64-features-sve", "aarch64"); DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA, - QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE, - QEMU_CAPS_OBJECT_MEMORY_FILE); + QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE); DO_TEST_FULL("memory-hotplug-ppc64-nonuma-abi-update", "", WHEN_BOTH, ARG_PARSEFLAGS, VIR_DOMAIN_DEF_PARSE_ABI_UPDATE, ARG_QEMU_CAPS, QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA, QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE, - QEMU_CAPS_OBJECT_MEMORY_FILE, QEMU_CAPS_LAST, ARG_END); + QEMU_CAPS_LAST, ARG_END); DO_TEST_NOCAPS("memory-hotplug"); DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM); DO_TEST_CAPS_LATEST("memory-hotplug-dimm-addr"); @@ -1044,13 +1042,11 @@ mymain(void) DO_TEST("memory-hotplug-nvdimm-readonly", QEMU_CAPS_DEVICE_NVDIMM, QEMU_CAPS_DEVICE_NVDIMM_UNARMED); DO_TEST("memory-hotplug-nvdimm-ppc64", QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE, - QEMU_CAPS_OBJECT_MEMORY_FILE, QEMU_CAPS_DEVICE_NVDIMM); DO_TEST_FULL("memory-hotplug-nvdimm-ppc64-abi-update", "", WHEN_BOTH, ARG_PARSEFLAGS, VIR_DOMAIN_DEF_PARSE_ABI_UPDATE, ARG_QEMU_CAPS, QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE, - QEMU_CAPS_OBJECT_MEMORY_FILE, QEMU_CAPS_DEVICE_NVDIMM, QEMU_CAPS_LAST, ARG_END); DO_TEST_CAPS_LATEST("memory-hotplug-virtio-pmem"); @@ -1087,16 +1083,12 @@ mymain(void) DO_TEST_CAPS_LATEST("virtio-options"); - DO_TEST("fd-memory-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE, - QEMU_CAPS_KVM); - DO_TEST("fd-memory-numa-topology2", QEMU_CAPS_OBJECT_MEMORY_FILE, - QEMU_CAPS_KVM); - DO_TEST("fd-memory-numa-topology3", QEMU_CAPS_OBJECT_MEMORY_FILE, - QEMU_CAPS_KVM); + DO_TEST("fd-memory-numa-topology", QEMU_CAPS_KVM); + DO_TEST("fd-memory-numa-topology2", QEMU_CAPS_KVM); + DO_TEST("fd-memory-numa-topology3", QEMU_CAPS_KVM); DO_TEST_CAPS_LATEST("fd-memory-numa-topology4"); - DO_TEST("fd-memory-no-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE, - QEMU_CAPS_KVM); + DO_TEST("fd-memory-no-numa-topology", QEMU_CAPS_KVM); DO_TEST_CAPS_LATEST("memfd-memory-numa"); DO_TEST_CAPS_LATEST("memfd-memory-default-hugepage");