qemu: Assume QEMU_CAPS_OBJECT_MEMORY_RAM

Introduced in QEMU's commit of v2.1.0-rc0~41^2~104 the
memory-backend-ram 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 <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Michal Privoznik 2022-11-03 10:52:40 +01:00
parent 35f3864090
commit fbbae04214
5 changed files with 17 additions and 73 deletions

View File

@ -3478,12 +3478,6 @@ qemuBuildMemoryBackendProps(virJSONValue **backendProps,
_("this qemu doesn't support the "
"memory-backend-file object"));
return -1;
} else if (STREQ(backendType, "memory-backend-ram") &&
!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_OBJECT_MEMORY_RAM)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("this qemu doesn't support the "
"memory-backend-ram object"));
return -1;
} else if (STREQ(backendType, "memory-backend-memfd") &&
!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_OBJECT_MEMORY_MEMFD)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
@ -7223,6 +7217,7 @@ qemuBuildNumaCommandLine(virQEMUDriverConfig *cfg,
int ret = -1;
size_t ncells = virDomainNumaGetNodeCount(def->numa);
ssize_t masterInitiator = -1;
int rc;
if (!virDomainNumatuneNodesetIsAvailable(def->numa, priv->autoNodeset))
goto cleanup;
@ -7239,21 +7234,13 @@ qemuBuildNumaCommandLine(virQEMUDriverConfig *cfg,
nodeBackends = g_new0(virJSONValue *, ncells);
/* using of -numa memdev= cannot be combined with -numa mem=, thus we
* need to check which approach to use */
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_RAM) ||
virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_FILE) ||
virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_MEMFD)) {
int rc;
for (i = 0; i < ncells; i++) {
if ((rc = qemuBuildMemoryCellBackendProps(def, cfg, i, priv,
&nodeBackends[i])) < 0)
goto cleanup;
for (i = 0; i < ncells; i++) {
if ((rc = qemuBuildMemoryCellBackendProps(def, cfg, i, priv,
&nodeBackends[i])) < 0)
goto cleanup;
if (rc == 0)
needBackend = true;
}
if (rc == 0)
needBackend = true;
}
if (!needBackend &&

View File

@ -986,17 +986,6 @@ qemuValidateDomainDefNuma(const virDomainDef *def,
const long system_page_size = virGetSystemPageSizeKB();
size_t ncells = virDomainNumaGetNodeCount(def->numa);
size_t i;
bool hasMemoryCap = virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_RAM) ||
virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_FILE) ||
virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_MEMFD);
bool needBacking = false;
if (virDomainNumatuneHasPerNodeBinding(def->numa) && !hasMemoryCap) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("Per-node memory binding is not supported "
"with this QEMU"));
return -1;
}
if (def->mem.nhugepages &&
def->mem.hugepages[0].size != system_page_size &&
@ -1010,14 +999,6 @@ qemuValidateDomainDefNuma(const virDomainDef *def,
for (i = 0; i < ncells; i++) {
virBitmap *cpumask = virDomainNumaGetNodeCpumask(def->numa, i);
if (!hasMemoryCap &&
virDomainNumaGetNodeMemoryAccessMode(def->numa, i)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("Shared memory mapping is not supported "
"with this QEMU"));
return -1;
}
if (cpumask) {
g_autofree char * cpumaskStr = NULL;
if (!(cpumaskStr = virBitmapFormat(cpumask)))
@ -1033,15 +1014,7 @@ qemuValidateDomainDefNuma(const virDomainDef *def,
}
}
if (!virQEMUCapsGetMachineNumaMemSupported(qemuCaps,
def->virtType,
def->os.machine)) {
needBacking = true;
}
if (virDomainNumaHasHMAT(def->numa)) {
needBacking = true;
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_NUMA_HMAT)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("HMAT is not supported with this QEMU"));
@ -1049,13 +1022,6 @@ qemuValidateDomainDefNuma(const virDomainDef *def,
}
}
if (needBacking && !hasMemoryCap) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("NUMA without specified memory backing is not "
"supported with this QEMU binary"));
return -1;
}
return 0;
}

View File

@ -1 +1 @@
unsupported configuration: Per-node memory binding is not supported with this QEMU
unsupported configuration: disjoint NUMA cpu ranges are not supported with this QEMU

View File

@ -1235,7 +1235,6 @@ mymain(void)
DO_TEST_CAPS_LATEST("hugepages-memaccess");
DO_TEST_CAPS_LATEST("hugepages-memaccess2");
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");
@ -1869,7 +1868,6 @@ mymain(void)
ARG_MIGRATE_FD, 7,
ARG_QEMU_CAPS,
QEMU_CAPS_NUMA,
QEMU_CAPS_OBJECT_MEMORY_RAM,
QEMU_CAPS_LAST,
ARG_END);
@ -1909,7 +1907,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("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_RAM);
DO_TEST_FAILURE_NOCAPS("cpu-numa-memshared");
DO_TEST("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_FILE);
DO_TEST("cpu-host-model",
QEMU_CAPS_DEVICE_PCI_BRIDGE,
@ -1968,7 +1966,6 @@ mymain(void)
DO_TEST("cputune-numatune",
QEMU_CAPS_KVM,
QEMU_CAPS_OBJECT_IOTHREAD,
QEMU_CAPS_OBJECT_MEMORY_RAM,
QEMU_CAPS_OBJECT_MEMORY_FILE);
DO_TEST("vcpu-placement-static",
QEMU_CAPS_KVM,
@ -1978,8 +1975,7 @@ mymain(void)
DO_TEST_NOCAPS("numatune-memory");
DO_TEST_PARSE_ERROR_NOCAPS("numatune-memory-invalid-nodeset");
DO_TEST("numatune-memnode",
QEMU_CAPS_NUMA,
QEMU_CAPS_OBJECT_MEMORY_RAM);
QEMU_CAPS_NUMA);
DO_TEST_PARSE_ERROR_NOCAPS("numatune-memnode");
DO_TEST_CAPS_VER("numatune-memnode", "5.2.0");
DO_TEST_CAPS_LATEST("numatune-memnode");
@ -1988,19 +1984,16 @@ mymain(void)
DO_TEST_CAPS_LATEST("numatune-system-memory");
DO_TEST("numatune-memnode-no-memory",
QEMU_CAPS_NUMA,
QEMU_CAPS_OBJECT_MEMORY_RAM);
DO_TEST_PARSE_ERROR_NOCAPS("numatune-memnode-no-memory");
QEMU_CAPS_NUMA);
DO_TEST("numatune-distances", QEMU_CAPS_NUMA);
DO_TEST_NOCAPS("numatune-no-vcpu");
DO_TEST_CAPS_LATEST("numatune-hmat");
DO_TEST_NOCAPS("numatune-auto-nodeset-invalid");
DO_TEST("numatune-auto-prefer", QEMU_CAPS_OBJECT_MEMORY_RAM,
DO_TEST("numatune-auto-prefer",
QEMU_CAPS_OBJECT_MEMORY_FILE);
DO_TEST_FAILURE("numatune-static-nodeset-exceed-hostnode",
QEMU_CAPS_OBJECT_MEMORY_RAM);
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");
DO_TEST_NOCAPS("numad");
@ -2645,17 +2638,16 @@ mymain(void)
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_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
QEMU_CAPS_OBJECT_MEMORY_FILE);
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_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
QEMU_CAPS_OBJECT_MEMORY_FILE);
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_RAM,
QEMU_CAPS_OBJECT_MEMORY_FILE,
QEMU_CAPS_LAST,
ARG_END);

View File

@ -933,7 +933,7 @@ mymain(void)
DO_TEST("numatune-memnode-no-memory", QEMU_CAPS_OBJECT_MEMORY_FILE);
DO_TEST("numatune-distances", QEMU_CAPS_NUMA);
DO_TEST("numatune-no-vcpu", QEMU_CAPS_NUMA);
DO_TEST("numatune-hmat", QEMU_CAPS_NUMA_HMAT, QEMU_CAPS_OBJECT_MEMORY_RAM);
DO_TEST("numatune-hmat", QEMU_CAPS_NUMA_HMAT);
DO_TEST_CAPS_LATEST("numatune-memnode-restrictive-mode");
DO_TEST_NOCAPS("firmware-manual-bios");
@ -1026,13 +1026,12 @@ mymain(void)
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_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
QEMU_CAPS_OBJECT_MEMORY_FILE);
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_RAM,
QEMU_CAPS_OBJECT_MEMORY_FILE, QEMU_CAPS_LAST, ARG_END);
DO_TEST_NOCAPS("memory-hotplug");
DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM);