Re: [libvirt] [PATCH v3 2/3] qemu: check memory-backend-memfd.hugetlb capability

2018-11-15 Thread Michal Privoznik
On 11/15/2018 12:55 PM, marcandre.lur...@redhat.com wrote:
> 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 },

This needs to be QEMU_CAPS_OBJECT_MEMORY_MEMFD. This is conditional
capability, which means "memory-backend-memfd" object props will be
queried on if this capability is set. And since there are qemus which do
support memory-backend-file and do not support memory-backend-memfd this
would try to query the props even if it shouldn't.

>  { "spapr-machine", virQEMUCapsObjectPropsSPAPRMachine,
>ARRAY_CARDINALITY(virQEMUCapsObjectPropsSPAPRMachine),
>-1 },

Michal

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

[libvirt] [PATCH v3 2/3] qemu: check memory-backend-memfd.hugetlb capability

2018-11-15 Thread marcandre . lureau
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":