From: Marc-André Lureau
QEMU 3.1 should only expose the property if the host is actually
capable of creating hugetable-backed memfd. However, it may fail
at runtime depending on requested "hugetlbsize".
Reviewed-by: John Ferlan
Signed-off-by: Marc-André Lureau
Signed-off-by: John Ferlan
---
src/qemu/qemu_capabilities.c | 8 ++
src/qemu/qemu_capabilities.h | 1 +
.../caps_2.12.0.aarch64.replies | 94 ---
.../caps_2.12.0.aarch64.xml | 3 +-
.../caps_2.12.0.ppc64.replies | 90 +++---
.../caps_2.12.0.ppc64.xml | 3 +-
.../caps_2.12.0.s390x.replies | 98
.../caps_2.12.0.s390x.xml | 3 +-
.../caps_2.12.0.x86_64.replies| 110 +-
.../caps_2.12.0.x86_64.xml| 3 +-
.../caps_3.0.0.ppc64.replies | 90 +++---
.../qemucapabilitiesdata/caps_3.0.0.ppc64.xml | 3 +-
.../caps_3.0.0.riscv32.replies| 86 +++---
.../caps_3.0.0.riscv32.xml| 1 +
.../caps_3.0.0.riscv64.replies| 86 +++---
.../caps_3.0.0.riscv64.xml| 1 +
.../caps_3.0.0.s390x.replies | 98
.../qemucapabilitiesdata/caps_3.0.0.s390x.xml | 4 +-
.../caps_3.0.0.x86_64.replies | 110 +-
.../caps_3.0.0.x86_64.xml | 3 +-
20 files changed, 718 insertions(+), 177 deletions(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 5d15e6d3fb..eab2444c5d 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -510,6 +510,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
"blockdev",
"vfio-ap",
"memory-backend-memfd",
+ "memory-backend-memfd.hugetlb",
);
@@ -1358,6 +1359,10 @@ static struct virQEMUCapsStringFlags
virQEMUCapsObjectPropsMemoryBackendFile[] =
{ "discard-data", QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD },
};
+static struct virQEMUCapsStringFlags
virQEMUCapsObjectPropsMemoryBackendMemfd[] = {
+{ "hugetlb", QEMU_CAPS_OBJECT_MEMORY_MEMFD_HUGETLB },
+};
+
static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsSPAPRMachine[] = {
{ "cap-hpt-max-page-size", QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE
},
{ "cap-htm", QEMU_CAPS_MACHINE_PSERIES_CAP_HTM },
@@ -1367,6 +1372,9 @@ static virQEMUCapsObjectTypeProps
virQEMUCapsObjectProps[] = {
{ "memory-backend-file", virQEMUCapsObjectPropsMemoryBackendFile,
ARRAY_CARDINALITY(virQEMUCapsObjectPropsMemoryBackendFile),
QEMU_CAPS_OBJECT_MEMORY_FILE },
+{ "memory-backend-memfd", virQEMUCapsObjectPropsMemoryBackendMemfd,
+ ARRAY_CARDINALITY(virQEMUCapsObjectPropsMemoryBackendMemfd),
+ QEMU_CAPS_OBJECT_MEMORY_FILE },
{ "spapr-machine", virQEMUCapsObjectPropsSPAPRMachine,
ARRAY_CARDINALITY(virQEMUCapsObjectPropsSPAPRMachine),
-1 },
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index a14aa0b7fc..c60bfa5a85 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -494,6 +494,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for
syntax-check */
QEMU_CAPS_BLOCKDEV, /* -blockdev and blockdev-add are supported */
QEMU_CAPS_DEVICE_VFIO_AP, /* -device vfio-ap */
QEMU_CAPS_OBJECT_MEMORY_MEMFD, /* -object memory-backend-memfd */
+QEMU_CAPS_OBJECT_MEMORY_MEMFD_HUGETLB, /* -object
memory-backend-memfd.hugetlb */
QEMU_CAPS_LAST /* this must always be the last item */
} virQEMUCapsFlags;
diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.replies
b/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.replies
index 4208a66156..2cd6705d78 100644
--- a/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.replies
+++ b/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.replies
@@ -5403,13 +5403,71 @@
{
"execute": "qom-list-properties",
"arguments": {
-"typename": "spapr-machine"
+"typename": "memory-backend-memfd"
},
"id": "libvirt-31"
}
{
- "id": "libvirt-31",
+ "return": [
+{
+ "name": "policy",
+ "type": "HostMemPolicy"
+},
+{
+ "name": "share",
+ "type": "bool"
+},
+{
+ "name": "host-nodes",
+ "type": "int"
+},
+{
+ "name": "prealloc",
+ "type": "bool"
+},
+{
+ "name": "dump",
+ "type": "bool"
+},
+{
+ "name": "size",
+ "type": "int"
+},
+{
+ "name": "merge",
+ "type": "bool"
+},
+{
+ "name": "seal",
+ "type": "bool"
+},
+{
+ "name": "hugetlbsize",
+ "type": "int"
+},
+{
+ "name": "hugetlb",
+ "type": "bool"
+},
+{
+ "name": "type",
+ "type": "string"
+}
+ ],
+ "id": "libvirt-31"
+}
+
+{
+ "execute":