Changeset
docs/formatdomain.html.in                          |   34 +-
docs/schemas/cputypes.rng                          |    5 +
docs/schemas/domaincommon.rng                      |   10 +
src/conf/domain_conf.c                             |  150 +-
src/conf/domain_conf.h                             |    3 +
src/conf/numa_conf.c                               |   27 +
src/conf/numa_conf.h                               |    3 +
src/libvirt_private.syms                           |    1 +
src/qemu/qemu_capabilities.c                       |   22 +
src/qemu/qemu_capabilities.h                       |    4 +
src/qemu/qemu_command.c                            |   27 +-
src/qemu/qemu_monitor.c                            |   13 +
src/qemu/qemu_monitor.h                            |    3 +
src/qemu/qemu_monitor_json.c                       |   89 +-
src/qemu/qemu_monitor_json.h                       |    4 +
.../caps_2.12.0.aarch64.replies                    |  416 +-
tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml |    4 +-
.../qemucapabilitiesdata/caps_2.12.0.ppc64.replies | 4454 ++++++++++----------
tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml   |    4 +-
.../qemucapabilitiesdata/caps_2.12.0.s390x.replies |   78 +-
tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml   |    2 +
.../caps_2.12.0.x86_64.replies                     |  804 ++--
tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml  |    4 +-
tests/qemuxml2argvdata/hugepages-pages.args        |   12 +-
tests/qemuxml2argvdata/hugepages-pages.xml         |    3 +-
tests/qemuxml2argvdata/hugepages-pages3.args       |    3 +-
tests/qemuxml2argvdata/hugepages-pages3.xml        |    4 +-
tests/qemuxml2argvdata/hugepages-pages7.args       |    3 +-
tests/qemuxml2argvdata/hugepages-pages7.xml        |    4 +-
tests/qemuxml2argvtest.c                           |    9 +-
tests/qemuxml2xmloutdata/hugepages-pages.xml       |    3 +-
tests/qemuxml2xmloutdata/hugepages-pages3.xml      |    4 +-
32 files changed, 3337 insertions(+), 2869 deletions(-)
Git apply log
Switched to a new branch 'cover.1526051215.git.mprivozn@redhat.com'
Applying: qemuMonitorJSONGetDeviceProps: Separate props processing
Applying: qemu_monitor: Introduce qemuMonitorGetObjectProps
Applying: qemu_capabilities: Introduce QEMU_CAPS_QOM_LIST_PROPERTIES
Applying: qemu_capabilities: Introduce QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD
Applying: conf: Move virDomainMemtune formatting into a separate function
Applying: conf: Introduce memoryBacking/discard
Applying: qemu: Implement memoryBacking/discard
To https://github.com/patchew-project/libvirt
 + 3b7d20d...84857d8 patchew/cover.1526051215.git.mprivozn@redhat.com -> patchew/cover.1526051215.git.mprivozn@redhat.com (forced update)
Test passed: syntax-check

loading

[libvirt] [PATCH v5 0/7] Enable memory-backend-file.discard-data
Posted by Michal Privoznik, 1 week ago
v5 of:
https://www.redhat.com/archives/libvir-list/2018-April/msg02029.html

diff to v4:
- last patch in the original series is split into two,
- more tests added
- couple of small changes (e.g. s/int/virTristateBool/)

Michal Privoznik (7):
  qemuMonitorJSONGetDeviceProps: Separate props processing
  qemu_monitor: Introduce qemuMonitorGetObjectProps
  qemu_capabilities: Introduce QEMU_CAPS_QOM_LIST_PROPERTIES
  qemu_capabilities: Introduce QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD
  conf: Move virDomainMemtune formatting into a separate function
  conf: Introduce memoryBacking/discard
  qemu: Implement memoryBacking/discard

 docs/formatdomain.html.in                          |   34 +-
 docs/schemas/cputypes.rng                          |    5 +
 docs/schemas/domaincommon.rng                      |   10 +
 src/conf/domain_conf.c                             |  150 +-
 src/conf/domain_conf.h                             |    3 +
 src/conf/numa_conf.c                               |   27 +
 src/conf/numa_conf.h                               |    3 +
 src/libvirt_private.syms                           |    1 +
 src/qemu/qemu_capabilities.c                       |   22 +
 src/qemu/qemu_capabilities.h                       |    4 +
 src/qemu/qemu_command.c                            |   27 +-
 src/qemu/qemu_monitor.c                            |   13 +
 src/qemu/qemu_monitor.h                            |    3 +
 src/qemu/qemu_monitor_json.c                       |   89 +-
 src/qemu/qemu_monitor_json.h                       |    4 +
 .../caps_2.12.0.aarch64.replies                    |  416 +-
 tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml |    4 +-
 .../qemucapabilitiesdata/caps_2.12.0.ppc64.replies | 4454 ++++++++++----------
 tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml   |    4 +-
 .../qemucapabilitiesdata/caps_2.12.0.s390x.replies |   78 +-
 tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml   |    2 +
 .../caps_2.12.0.x86_64.replies                     |  804 ++--
 tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml  |    4 +-
 tests/qemuxml2argvdata/hugepages-pages.args        |   12 +-
 tests/qemuxml2argvdata/hugepages-pages.xml         |    3 +-
 tests/qemuxml2argvdata/hugepages-pages3.args       |    3 +-
 tests/qemuxml2argvdata/hugepages-pages3.xml        |    4 +-
 tests/qemuxml2argvdata/hugepages-pages7.args       |    3 +-
 tests/qemuxml2argvdata/hugepages-pages7.xml        |    4 +-
 tests/qemuxml2argvtest.c                           |    9 +-
 tests/qemuxml2xmloutdata/hugepages-pages.xml       |    3 +-
 tests/qemuxml2xmloutdata/hugepages-pages3.xml      |    4 +-
 32 files changed, 3337 insertions(+), 2869 deletions(-)

-- 
2.16.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v5 1/7] qemuMonitorJSONGetDeviceProps: Separate props processing
Posted by Michal Privoznik, 1 week ago
The code that processes list of device properties is going to be
reused. Therefore put it into a separate function.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
---
 src/qemu/qemu_monitor_json.c | 81 +++++++++++++++++++++++++-------------------
 1 file changed, 47 insertions(+), 34 deletions(-)

diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index e0ea553c41..ce7bc9e8e3 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -6051,6 +6051,51 @@ int qemuMonitorJSONSetObjectProperty(qemuMonitorPtr mon,
 #undef MAKE_SET_CMD
 
 
+static int
+qemuMonitorJSONParsePropsList(virJSONValuePtr cmd,
+                              virJSONValuePtr reply,
+                              char ***props)
+{
+    virJSONValuePtr data;
+    char **proplist = NULL;
+    size_t n = 0;
+    size_t i;
+    int ret = -1;
+
+    if (qemuMonitorJSONCheckReply(cmd, reply, VIR_JSON_TYPE_ARRAY) < 0)
+        goto cleanup;
+
+    data = virJSONValueObjectGetArray(reply, "return");
+    n = virJSONValueArraySize(data);
+
+    /* null-terminated list */
+    if (VIR_ALLOC_N(proplist, n + 1) < 0)
+        goto cleanup;
+
+    for (i = 0; i < n; i++) {
+        virJSONValuePtr child = virJSONValueArrayGet(data, i);
+        const char *tmp;
+
+        if (!(tmp = virJSONValueObjectGetString(child, "name"))) {
+            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                           _("reply data was missing 'name'"));
+            goto cleanup;
+        }
+
+        if (VIR_STRDUP(proplist[i], tmp) < 0)
+            goto cleanup;
+    }
+
+    ret = n;
+    *props = proplist;
+    proplist = NULL;
+
+ cleanup:
+    virStringListFree(proplist);
+    return ret;
+}
+
+
 int qemuMonitorJSONGetDeviceProps(qemuMonitorPtr mon,
                                   const char *device,
                                   char ***props)
@@ -6058,10 +6103,6 @@ int qemuMonitorJSONGetDeviceProps(qemuMonitorPtr mon,
     int ret = -1;
     virJSONValuePtr cmd;
     virJSONValuePtr reply = NULL;
-    virJSONValuePtr data;
-    char **proplist = NULL;
-    size_t n = 0;
-    size_t i;
 
     *props = NULL;
 
@@ -6078,38 +6119,10 @@ int qemuMonitorJSONGetDeviceProps(qemuMonitorPtr mon,
         goto cleanup;
     }
 
-    if (qemuMonitorJSONCheckReply(cmd, reply, VIR_JSON_TYPE_ARRAY) < 0)
-        goto cleanup;
-
-    data = virJSONValueObjectGetArray(reply, "return");
-    n = virJSONValueArraySize(data);
-
-    /* null-terminated list */
-    if (VIR_ALLOC_N(proplist, n + 1) < 0)
-        goto cleanup;
-
-    for (i = 0; i < n; i++) {
-        virJSONValuePtr child = virJSONValueArrayGet(data, i);
-        const char *tmp;
-
-        if (!(tmp = virJSONValueObjectGetString(child, "name"))) {
-            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                           _("device-list-properties reply data was missing 'name'"));
-            goto cleanup;
-        }
-
-        if (VIR_STRDUP(proplist[i], tmp) < 0)
-            goto cleanup;
-    }
-
-    ret = n;
-    *props = proplist;
-    proplist = NULL;
-
+    ret = qemuMonitorJSONParsePropsList(cmd, reply, props);
  cleanup:
-    virStringListFree(proplist);
-    virJSONValueFree(cmd);
     virJSONValueFree(reply);
+    virJSONValueFree(cmd);
     return ret;
 }
 
-- 
2.16.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v5 2/7] qemu_monitor: Introduce qemuMonitorGetObjectProps
Posted by Michal Privoznik, 1 week ago
Now that we've gotten rid of misleading names we can introduce
qemuMonitorGetObjectProps() function which queries -object
properties. Again, some parts of code can be reused.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
---
 src/qemu/qemu_monitor.c      | 13 +++++++++++++
 src/qemu/qemu_monitor.h      |  3 +++
 src/qemu/qemu_monitor_json.c | 32 ++++++++++++++++++++++++++++++++
 src/qemu/qemu_monitor_json.h |  4 ++++
 4 files changed, 52 insertions(+)

diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
index 39187915b0..3d7ca3ccfc 100644
--- a/src/qemu/qemu_monitor.c
+++ b/src/qemu/qemu_monitor.c
@@ -3932,6 +3932,19 @@ qemuMonitorGetDeviceProps(qemuMonitorPtr mon,
 }
 
 
+int
+qemuMonitorGetObjectProps(qemuMonitorPtr mon,
+                          const char *object,
+                          char ***props)
+{
+    VIR_DEBUG("object=%s props=%p", object, props);
+
+    QEMU_CHECK_MONITOR_JSON(mon);
+
+    return qemuMonitorJSONGetObjectProps(mon, object, props);
+}
+
+
 char *
 qemuMonitorGetTargetArch(qemuMonitorPtr mon)
 {
diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
index a93844f77b..33dc521e83 100644
--- a/src/qemu/qemu_monitor.h
+++ b/src/qemu/qemu_monitor.h
@@ -1048,6 +1048,9 @@ int qemuMonitorGetObjectTypes(qemuMonitorPtr mon,
 int qemuMonitorGetDeviceProps(qemuMonitorPtr mon,
                               const char *device,
                               char ***props);
+int qemuMonitorGetObjectProps(qemuMonitorPtr mon,
+                              const char *object,
+                              char ***props);
 char *qemuMonitorGetTargetArch(qemuMonitorPtr mon);
 
 int qemuMonitorNBDServerStart(qemuMonitorPtr mon,
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index ce7bc9e8e3..e2e0004e4d 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -6127,6 +6127,38 @@ int qemuMonitorJSONGetDeviceProps(qemuMonitorPtr mon,
 }
 
 
+int
+qemuMonitorJSONGetObjectProps(qemuMonitorPtr mon,
+                              const char *object,
+                              char ***props)
+{
+    int ret = -1;
+    virJSONValuePtr cmd;
+    virJSONValuePtr reply = NULL;
+
+    *props = NULL;
+
+    if (!(cmd = qemuMonitorJSONMakeCommand("qom-list-properties",
+                                           "s:typename", object,
+                                           NULL)))
+        return -1;
+
+    if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
+        goto cleanup;
+
+    if (qemuMonitorJSONHasError(reply, "DeviceNotFound")) {
+        ret = 0;
+        goto cleanup;
+    }
+
+    ret = qemuMonitorJSONParsePropsList(cmd, reply, props);
+ cleanup:
+    virJSONValueFree(reply);
+    virJSONValueFree(cmd);
+    return ret;
+}
+
+
 char *
 qemuMonitorJSONGetTargetArch(qemuMonitorPtr mon)
 {
diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h
index ed5f29b20a..e86b58f7ea 100644
--- a/src/qemu/qemu_monitor_json.h
+++ b/src/qemu/qemu_monitor_json.h
@@ -445,6 +445,10 @@ int qemuMonitorJSONGetDeviceProps(qemuMonitorPtr mon,
                                   const char *device,
                                   char ***props)
     ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
+int qemuMonitorJSONGetObjectProps(qemuMonitorPtr mon,
+                                  const char *object,
+                                  char ***props)
+    ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
 char *qemuMonitorJSONGetTargetArch(qemuMonitorPtr mon);
 
 int qemuMonitorJSONNBDServerStart(qemuMonitorPtr mon,
-- 
2.16.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v5 3/7] qemu_capabilities: Introduce QEMU_CAPS_QOM_LIST_PROPERTIES
Posted by Michal Privoznik, 1 week ago
This capability tracks if qemu has "qom-list-properties" monitor
command.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
---
 src/qemu/qemu_capabilities.c                       | 4 ++++
 src/qemu/qemu_capabilities.h                       | 3 +++
 tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml | 1 +
 tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml   | 1 +
 tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml   | 1 +
 tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml  | 1 +
 6 files changed, 11 insertions(+)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 64f536b1b0..16a8aa92ab 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -476,6 +476,9 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
               "nbd-tls",
               "tpm-crb",
               "pr-manager-helper",
+
+              /* 295 */
+              "qom-list-properties",
     );
 
 
@@ -984,6 +987,7 @@ struct virQEMUCapsStringFlags virQEMUCapsCommands[] = {
     { "query-cpu-definitions", QEMU_CAPS_QUERY_CPU_DEFINITIONS },
     { "query-named-block-nodes", QEMU_CAPS_QUERY_NAMED_BLOCK_NODES },
     { "query-cpus-fast", QEMU_CAPS_QUERY_CPUS_FAST },
+    { "qom-list-properties", QEMU_CAPS_QOM_LIST_PROPERTIES },
 };
 
 struct virQEMUCapsStringFlags virQEMUCapsMigration[] = {
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index 6e3e2e0003..4a25fbb6f2 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -461,6 +461,9 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
     QEMU_CAPS_DEVICE_TPM_CRB, /* -device tpm-crb */
     QEMU_CAPS_PR_MANAGER_HELPER, /* -object pr-manager-helper */
 
+    /* 295 */
+    QEMU_CAPS_QOM_LIST_PROPERTIES, /* qom-list-properties monitor command */
+
     QEMU_CAPS_LAST /* this must always be the last item */
 } virQEMUCapsFlags;
 
diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml
index 6fbb105df7..9aa913c9ec 100644
--- a/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml
+++ b/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml
@@ -159,6 +159,7 @@
   <flag name='disk-write-cache'/>
   <flag name='nbd-tls'/>
   <flag name='pr-manager-helper'/>
+  <flag name='qom-list-properties'/>
   <version>2011090</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>342346</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml
index b03bf59d30..5bee534353 100644
--- a/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml
+++ b/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml
@@ -156,6 +156,7 @@
   <flag name='disk-write-cache'/>
   <flag name='nbd-tls'/>
   <flag name='pr-manager-helper'/>
+  <flag name='qom-list-properties'/>
   <version>2011090</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>419215</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml
index 81a4acf966..3dc65d77ae 100644
--- a/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml
+++ b/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml
@@ -121,6 +121,7 @@
   <flag name='disk-write-cache'/>
   <flag name='nbd-tls'/>
   <flag name='pr-manager-helper'/>
+  <flag name='qom-list-properties'/>
   <version>2011090</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>0</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml
index 0dce649e90..66fc7782b8 100644
--- a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml
@@ -197,6 +197,7 @@
   <flag name='nbd-tls'/>
   <flag name='tpm-crb'/>
   <flag name='pr-manager-helper'/>
+  <flag name='qom-list-properties'/>
   <version>2011090</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>390060</microcodeVersion>
-- 
2.16.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v5 4/7] qemu_capabilities: Introduce QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD
Posted by Michal Privoznik, 1 week ago
This capability tracks if memory-backend-file has discard-data
attribute or not.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
---
 src/qemu/qemu_capabilities.c                       |   18 +
 src/qemu/qemu_capabilities.h                       |    1 +
 .../caps_2.12.0.aarch64.replies                    |  416 +-
 tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml |    3 +-
 .../qemucapabilitiesdata/caps_2.12.0.ppc64.replies | 4454 ++++++++++----------
 tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml   |    3 +-
 .../qemucapabilitiesdata/caps_2.12.0.s390x.replies |   78 +-
 tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml   |    1 +
 .../caps_2.12.0.x86_64.replies                     |  804 ++--
 tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml  |    3 +-
 10 files changed, 3010 insertions(+), 2771 deletions(-)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 16a8aa92ab..2e2190e80f 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -479,6 +479,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
 
               /* 295 */
               "qom-list-properties",
+              "memory-backend-file.discard-data",
     );
 
 
@@ -1375,6 +1376,15 @@ static virQEMUCapsObjectTypeProps virQEMUCapsDeviceProps[] = {
       QEMU_CAPS_DEVICE_VIRTIO_GPU_CCW },
 };
 
+static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsMemoryBackendFile[] = {
+    { "discard-data", QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD },
+};
+
+static virQEMUCapsObjectTypeProps virQEMUCapsObjectProps[] = {
+    { "memory-backend-file", virQEMUCapsObjectPropsMemoryBackendFile,
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsMemoryBackendFile),
+      QEMU_CAPS_OBJECT_MEMORY_FILE },
+};
 
 static void
 virQEMUCapsProcessStringFlags(virQEMUCapsPtr qemuCaps,
@@ -2132,6 +2142,14 @@ virQEMUCapsProbeQMPDevices(virQEMUCapsPtr qemuCaps,
                                         qemuMonitorGetDeviceProps) < 0)
         return -1;
 
+    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_QOM_LIST_PROPERTIES) &&
+        virQEMUCapsProbeQMPGenericProps(qemuCaps,
+                                        mon,
+                                        virQEMUCapsObjectProps,
+                                        ARRAY_CARDINALITY(virQEMUCapsObjectProps),
+                                        qemuMonitorGetObjectProps) < 0)
+        return -1;
+
     return 0;
 }
 
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index 4a25fbb6f2..adac3b63cf 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -463,6 +463,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
 
     /* 295 */
     QEMU_CAPS_QOM_LIST_PROPERTIES, /* qom-list-properties monitor command */
+    QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD, /* -object memory-backend-file,discard-data */
 
     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 3512d88b67..3ca0ea13fa 100644
--- a/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.replies
+++ b/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.replies
@@ -5275,6 +5275,60 @@
   "id": "libvirt-35"
 }
 
+{
+  "return": [
+    {
+      "name": "policy",
+      "type": "HostMemPolicy"
+    },
+    {
+      "name": "dump",
+      "type": "bool"
+    },
+    {
+      "name": "share",
+      "type": "bool"
+    },
+    {
+      "name": "prealloc",
+      "type": "bool"
+    },
+    {
+      "name": "size",
+      "type": "int"
+    },
+    {
+      "name": "host-nodes",
+      "type": "int"
+    },
+    {
+      "name": "id",
+      "type": "string"
+    },
+    {
+      "name": "merge",
+      "type": "bool"
+    },
+    {
+      "name": "align",
+      "type": "int"
+    },
+    {
+      "name": "mem-path",
+      "type": "string"
+    },
+    {
+      "name": "discard-data",
+      "type": "bool"
+    },
+    {
+      "name": "type",
+      "type": "string"
+    }
+  ],
+  "id": "libvirt-36"
+}
+
 {
   "return": [
     {
@@ -5569,198 +5623,198 @@
       "cpu-max": 1
     }
   ],
-  "id": "libvirt-36"
-}
-
-{
-  "return": [
-    {
-      "name": "pxa262",
-      "typename": "pxa262-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "pxa270-a0",
-      "typename": "pxa270-a0-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "arm1136",
-      "typename": "arm1136-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "cortex-a15",
-      "typename": "cortex-a15-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "pxa260",
-      "typename": "pxa260-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "arm1136-r2",
-      "typename": "arm1136-r2-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "pxa261",
-      "typename": "pxa261-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "pxa255",
-      "typename": "pxa255-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "cortex-m33",
-      "typename": "cortex-m33-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "arm926",
-      "typename": "arm926-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "arm11mpcore",
-      "typename": "arm11mpcore-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "pxa250",
-      "typename": "pxa250-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "ti925t",
-      "typename": "ti925t-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "cortex-a57",
-      "typename": "cortex-a57-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "sa1110",
-      "typename": "sa1110-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "host",
-      "typename": "host-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "arm1176",
-      "typename": "arm1176-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "cortex-a53",
-      "typename": "cortex-a53-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "sa1100",
-      "typename": "sa1100-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "pxa270-c5",
-      "typename": "pxa270-c5-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "cortex-a9",
-      "typename": "cortex-a9-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "cortex-a8",
-      "typename": "cortex-a8-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "cortex-a7",
-      "typename": "cortex-a7-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "pxa270-c0",
-      "typename": "pxa270-c0-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "arm1026",
-      "typename": "arm1026-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "pxa270-b1",
-      "typename": "pxa270-b1-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "cortex-m3",
-      "typename": "cortex-m3-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "max",
-      "typename": "max-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "cortex-m4",
-      "typename": "cortex-m4-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "pxa270-b0",
-      "typename": "pxa270-b0-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "arm946",
-      "typename": "arm946-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "cortex-r5",
-      "typename": "cortex-r5-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "pxa270-a1",
-      "typename": "pxa270-a1-arm-cpu",
-      "static": false
-    },
-    {
-      "name": "pxa270",
-      "typename": "pxa270-arm-cpu",
-      "static": false
-    }
-  ],
   "id": "libvirt-37"
 }
 
 {
   "return": [
+    {
+      "name": "pxa262",
+      "typename": "pxa262-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "pxa270-a0",
+      "typename": "pxa270-a0-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "arm1136",
+      "typename": "arm1136-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "cortex-a15",
+      "typename": "cortex-a15-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "pxa260",
+      "typename": "pxa260-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "arm1136-r2",
+      "typename": "arm1136-r2-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "pxa261",
+      "typename": "pxa261-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "pxa255",
+      "typename": "pxa255-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "cortex-m33",
+      "typename": "cortex-m33-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "arm926",
+      "typename": "arm926-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "arm11mpcore",
+      "typename": "arm11mpcore-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "pxa250",
+      "typename": "pxa250-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "ti925t",
+      "typename": "ti925t-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "cortex-a57",
+      "typename": "cortex-a57-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "sa1110",
+      "typename": "sa1110-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "host",
+      "typename": "host-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "arm1176",
+      "typename": "arm1176-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "cortex-a53",
+      "typename": "cortex-a53-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "sa1100",
+      "typename": "sa1100-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "pxa270-c5",
+      "typename": "pxa270-c5-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "cortex-a9",
+      "typename": "cortex-a9-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "cortex-a8",
+      "typename": "cortex-a8-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "cortex-a7",
+      "typename": "cortex-a7-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "pxa270-c0",
+      "typename": "pxa270-c0-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "arm1026",
+      "typename": "arm1026-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "pxa270-b1",
+      "typename": "pxa270-b1-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "cortex-m3",
+      "typename": "cortex-m3-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "max",
+      "typename": "max-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "cortex-m4",
+      "typename": "cortex-m4-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "pxa270-b0",
+      "typename": "pxa270-b0-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "arm946",
+      "typename": "arm946-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "cortex-r5",
+      "typename": "cortex-r5-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "pxa270-a1",
+      "typename": "pxa270-a1-arm-cpu",
+      "static": false
+    },
+    {
+      "name": "pxa270",
+      "typename": "pxa270-arm-cpu",
+      "static": false
+    }
   ],
   "id": "libvirt-38"
 }
 
 {
   "return": [
-    "emulator"
   ],
   "id": "libvirt-39"
 }
 
+{
+  "return": [
+    "emulator"
+  ],
+  "id": "libvirt-40"
+}
+
 {
   "return": [
     {
@@ -6919,7 +6973,7 @@
       "option": "drive"
     }
   ],
-  "id": "libvirt-40"
+  "id": "libvirt-41"
 }
 
 {
@@ -6981,7 +7035,7 @@
       "capability": "dirty-bitmaps"
     }
   ],
-  "id": "libvirt-41"
+  "id": "libvirt-42"
 }
 
 {
@@ -18349,7 +18403,7 @@
       "meta-type": "object"
     }
   ],
-  "id": "libvirt-42"
+  "id": "libvirt-43"
 }
 
 {
@@ -18365,7 +18419,7 @@
       "kernel": false
     }
   ],
-  "id": "libvirt-43"
+  "id": "libvirt-44"
 }
 
 {
diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml
index 9aa913c9ec..362f6f20b5 100644
--- a/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml
+++ b/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml
@@ -160,9 +160,10 @@
   <flag name='nbd-tls'/>
   <flag name='pr-manager-helper'/>
   <flag name='qom-list-properties'/>
+  <flag name='memory-backend-file.discard-data'/>
   <version>2011090</version>
   <kvmVersion>0</kvmVersion>
-  <microcodeVersion>342346</microcodeVersion>
+  <microcodeVersion>343099</microcodeVersion>
   <package>v2.12.0-rc0</package>
   <arch>aarch64</arch>
   <cpu type='kvm' name='pxa262'/>
diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.replies b/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.replies
index 2166b34973..1e93cd6dca 100644
--- a/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.replies
+++ b/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.replies
@@ -5322,6 +5322,60 @@
   "id": "libvirt-36"
 }
 
+{
+  "return": [
+    {
+      "name": "policy",
+      "type": "HostMemPolicy"
+    },
+    {
+      "name": "dump",
+      "type": "bool"
+    },
+    {
+      "name": "share",
+      "type": "bool"
+    },
+    {
+      "name": "prealloc",
+      "type": "bool"
+    },
+    {
+      "name": "size",
+      "type": "int"
+    },
+    {
+      "name": "host-nodes",
+      "type": "int"
+    },
+    {
+      "name": "id",
+      "type": "string"
+    },
+    {
+      "name": "merge",
+      "type": "bool"
+    },
+    {
+      "name": "align",
+      "type": "int"
+    },
+    {
+      "name": "mem-path",
+      "type": "string"
+    },
+    {
+      "name": "discard-data",
+      "type": "bool"
+    },
+    {
+      "name": "type",
+      "type": "string"
+    }
+  ],
+  "id": "libvirt-37"
+}
+
 {
   "return": [
     {
@@ -5457,2218 +5511,2218 @@
       "cpu-max": 1
     }
   ],
-  "id": "libvirt-37"
-}
-
-{
-  "return": [
-    {
-      "name": "default",
-      "typename": "604-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "ppc",
-      "typename": "604-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "ppc32",
-      "typename": "604-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "ppc64",
-      "typename": "970fx_v3.1-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "970mp",
-      "typename": "970mp_v1.1-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "970fx",
-      "typename": "970fx_v3.1-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "970",
-      "typename": "970_v2.2-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "power9",
-      "typename": "power9_v2.0-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "power8nvl",
-      "typename": "power8nvl_v1.0-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "power8",
-      "typename": "host-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "power8e",
-      "typename": "power8e_v2.1-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "power7+",
-      "typename": "power7+_v2.1-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "power7",
-      "typename": "power7_v2.3-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "power5gs",
-      "typename": "power5+_v2.1-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "power5+",
-      "typename": "power5+_v2.1-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "apollo7pm",
-      "typename": "7457a_v1.0-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "7457a",
-      "typename": "7457a_v1.2-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "7447a",
-      "typename": "7447a_v1.2-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "apollo7",
-      "typename": "7457_v1.2-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "7457",
-      "typename": "7457_v1.2-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "7447",
-      "typename": "7447_v1.1-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "apollo6",
-      "typename": "7455_v3.2-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "7455",
-      "typename": "7455_v3.2-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "7445",
-      "typename": "7445_v3.2-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "7451",
-      "typename": "7451_v2.3-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "7441",
-      "typename": "7441_v2.3-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "vger",
-      "typename": "7450_v2.1-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "7450",
-      "typename": "7450_v2.1-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "7448",
-      "typename": "7448_v2.1-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "nitro",
-      "typename": "7410_v1.4-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "7410",
-      "typename": "7410_v1.4-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "g4",
-      "typename": "7400_v2.9-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "max",
-      "typename": "7400_v2.9-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "7400",
-      "typename": "7400_v2.9-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "goldfinger",
-      "typename": "755_v2.8-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "755",
-      "typename": "755_v2.8-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "745",
-      "typename": "745_v2.8-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "lonestar",
-      "typename": "750l_v3.2-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "750l",
-      "typename": "750l_v3.2-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "750gx",
-      "typename": "750gx_v1.2-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "750fx",
-      "typename": "750fx_v2.3-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "750cxe",
-      "typename": "750cxe_v3.1b-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "750cx",
-      "typename": "750cx_v2.2-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "750cl",
-      "typename": "750cl_v2.0-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "conan/doyle",
-      "typename": "750p-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "g3",
-      "typename": "750_v3.1-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "typhoon",
-      "typename": "750_v3.1-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "750",
-      "typename": "750_v3.1-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "arthur",
-      "typename": "740_v3.1-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "740",
-      "typename": "740_v3.1-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mach5",
-      "typename": "604r-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "sirocco",
-      "typename": "604e_v2.4-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "604e",
-      "typename": "604e_v2.4-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "goldeneye",
-      "typename": "603e7t-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "603r",
-      "typename": "603e7t-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "vaillant",
-      "typename": "603e7v-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "stretch",
-      "typename": "603e_v4.1-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "603e",
-      "typename": "603e_v4.1-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "vanilla",
-      "typename": "603-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "601v",
-      "typename": "601_v2-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "601",
-      "typename": "601_v2-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8560",
-      "typename": "mpc8560_v21-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8555e",
-      "typename": "mpc8555e_v11-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8555",
-      "typename": "mpc8555_v11-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8548e",
-      "typename": "mpc8548e_v21-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8548",
-      "typename": "mpc8548_v21-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8547e",
-      "typename": "mpc8547e_v21-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8545e",
-      "typename": "mpc8545e_v21-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8545",
-      "typename": "mpc8545_v21-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8544e",
-      "typename": "mpc8544e_v11-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8544",
-      "typename": "mpc8544_v11-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8543e",
-      "typename": "mpc8543e_v21-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8543",
-      "typename": "mpc8543_v21-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8541e",
-      "typename": "mpc8541e_v11-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8541",
-      "typename": "mpc8541_v11-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8540",
-      "typename": "mpc8540_v21-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8533e",
-      "typename": "mpc8533e_v11-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8533",
-      "typename": "mpc8533_v11-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "e500v2",
-      "typename": "e500v2_v22-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "e500v1",
-      "typename": "e500_v20-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "e500",
-      "typename": "e500v2_v22-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8347ea",
-      "typename": "mpc8347eat-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8347e",
-      "typename": "mpc8347et-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8347a",
-      "typename": "mpc8347at-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8347",
-      "typename": "mpc8347t-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "e300",
-      "typename": "e300c3-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "e200",
-      "typename": "e200z6-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8280",
-      "typename": "g2legp3-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8275",
-      "typename": "g2legp3-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8272",
-      "typename": "g2legp3-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8271",
-      "typename": "g2legp3-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8270",
-      "typename": "g2legp3-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8266_hip4",
-      "typename": "g2hip4-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8266_hip3",
-      "typename": "g2hip3-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8266",
-      "typename": "g2hip4-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8265_hip4",
-      "typename": "g2hip4-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8265_hip3",
-      "typename": "g2hip3-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8265",
-      "typename": "g2hip4-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8264_hip4",
-      "typename": "g2hip4-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8264_hip3",
-      "typename": "g2hip3-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8264",
-      "typename": "g2hip4-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8260_hip4",
-      "typename": "g2hip4-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8260_hip3",
-      "typename": "g2hip3-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8260",
-      "typename": "g2hip4-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8255_hip4",
-      "typename": "g2hip4-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8255_hip3",
-      "typename": "g2hip3-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8255",
-      "typename": "g2hip4-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8250_hip4",
-      "typename": "g2hip4-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8250_hip3",
-      "typename": "g2hip3-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8250",
-      "typename": "g2hip4-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8248",
-      "typename": "g2legp3-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8247",
-      "typename": "g2legp3-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8245",
-      "typename": "g2hip4-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8241",
-      "typename": "g2hip4-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "powerquicc-ii",
-      "typename": "g2legp3-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc82xx",
-      "typename": "g2legp3-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc5200b",
-      "typename": "mpc5200b_v21-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc5200",
-      "typename": "mpc5200_v12-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc52xx",
-      "typename": "mpc5200_v12-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8240",
-      "typename": "603-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "460ex",
-      "typename": "460exb-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "440ep",
-      "typename": "440epb-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "x2vp50",
-      "typename": "x2vp20-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "x2vp7",
-      "typename": "x2vp4-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "405gpe",
-      "typename": "405crc-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "405gp",
-      "typename": "405gpd-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "405cr",
-      "typename": "405crc-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "405",
-      "typename": "405d4-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "403",
-      "typename": "403gc-powerpc64-cpu",
-      "static": false
-    },
-    {
-      "name": "mpc8547e_v21",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750cl_v1.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7457a_v1.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "g2gp",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750cxe_v2.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "755_v2.7",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750_v2.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "755_v2.2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "745_v2.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8377",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7455_v1.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8545_v21",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8548_v11",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "405d4",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "g2le",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "g2hip3",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750e",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8572",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "970fx_v2.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750fx_v2.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "603p",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "405gpb",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7400_v2.7",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8544e_v10",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "e500v2_v10",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "e500mc",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "603e7v1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "970mp_v1.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "740e",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "405crc",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "403ga",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7447a_v1.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7400_v2.2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "e300c1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8572e",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "e500v2_v21",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "970fx_v1.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750gx_v1.2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750fx_v1.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7457_v1.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "970fx_v3.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "604e_v2.2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "755_v2.6",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "401a1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "power9_v1.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "npe405h",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7410_v1.4",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "g2ls",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750_v2.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "401b2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8349",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8347ep",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7445_v3.2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8540_v21",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8543_v11",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "403gcx",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "745_v2.4",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8548_v21",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750l_v3.2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750_v1.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "755_v1.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "e500_v10",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750cxe_v3.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8541e_v10",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8347p",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8555e_v10",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "power9_v2.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "power7_v2.3",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "603e7v",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8543e_v11",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750_v3.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7400_v2.6",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "405gpa",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "440epx",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750l_v2.2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "e200z6",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8547e_v20",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7457a_v1.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8349ea",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "e500v2_v20",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "power8nvl_v1.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8540_v10",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "755_v2.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "745_v2.8",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "npe405l",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8343ea",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8545_v20",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8548_v10",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7448_v1.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7455_v3.4",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "740_v2.2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7400_v1.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8347et",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7441_v2.10",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "603e_v1.4",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8543_v10",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "401c2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7451_v2.10",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750cx_v2.2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8543_v21",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "603e7",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7448_v2.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7441_v2.3",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "405crb",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "604",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7400_v2.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "440-xilinx-w-dfpu",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7445_v2.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "cobra",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "e500_v20",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8541_v11",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750gx_v1.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750cxe_v2.4",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8641d",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8543e_v21",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750l_v2.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7457_v1.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7450_v1.2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "755_v2.5",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7410_v1.3",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "745_v2.3",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "755_v2.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "e500v2_v30",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7455_v3.3",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8540_v20",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "405d2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8560_v21",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8343",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8548_v20",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8347t",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "755_v1.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "603e_v1.3",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "host",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8543e_v10",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8347eap",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8548e_v11",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8543_v20",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "401d2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "power8_v2.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "740_v3.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "e200z5",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "405cra",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7400_v2.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750cxe_v2.3",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "745_v2.7",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8560_v10",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "e5500",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8544_v11",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7448_v1.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "401e2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "740_v2.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "745_v2.2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7400_v1.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7410_v1.2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "x2vp4",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8347ap",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8533_v11",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc5200b_v21",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750fx_v2.3",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "601_v2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "g2legp3",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "604e_v1.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750cx_v2.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8610",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "g2h4",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750l_v3.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8377e",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "e300c4",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc5200_v12",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7448_v2.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7450_v2.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750cxe_v3.1b",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "g2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7400_v2.9",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "405gpd",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "603",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "603e7t",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8555_v11",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750gx_v1.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8541_v10",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8543e_v20",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750fl",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750l_v2.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "stb04",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8548e_v21",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "x2vp20",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "405ez",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "e600",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7450_v1.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "755_v2.4",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8379",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7445_v1.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7447_v1.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "603e_v2.2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "603e_v4",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "g2legp",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7455_v3.2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "740_v2.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8560_v20",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "440-xilinx",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "401f2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8533_v10",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "405gpr",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8349a",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "stb25",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "603e_v1.2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc5200b_v20",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750fx_v2.2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8347eat",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "740_v1.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "601_v1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "745_v1.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750cx_v2.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8548e_v10",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7447a_v1.2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "403gc",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "e300c3",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc5200_v11",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7441_v2.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "740_v3.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8545e_v21",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "602",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8378e",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8343a",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "460exb",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8555_v10",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8568",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7457a_v1.2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750cx_v1.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750cxe_v2.2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "604e_v2.4",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "755_v2.8",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "405lp",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "745_v2.6",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "stb03",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "405ep",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8544_v10",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8347at",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750_v2.2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7450_v1.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "755_v2.3",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7410_v1.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "745_v2.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750gl",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "e6500",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750p",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7445_v3.4",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "440epb",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "npe4gs3",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "603e_v3",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8349e",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "970_v2.2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "g2lels",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "g2hip4",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "740p",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8567e",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8533e_v11",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7451_v2.3",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "603e_v1.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "401g2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7400_v2.8",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7455_v2.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "405gpc",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "power7+_v2.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8544e_v11",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7450_v2.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "970mp_v1.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "603e7v2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "604r",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "e500v2_v22",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8548e_v20",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8545e_v20",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8378",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8567",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7457_v1.2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7447_v1.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "970fx_v3.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "745_v2.5",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8379e",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8641",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750cxe_v2.4b",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7410_v1.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc603",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "603e_v4.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7445_v3.3",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "440epa",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "970fx_v2.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "iop480",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750fx_v2.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "601_v0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "g2legp1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "745_v1.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750cl_v2.0",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750cxr",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "401",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8541e_v11",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750cxe_v3.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8555e_v11",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "power5+_v2.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "7447a_v1.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "403gb",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "e300c2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "npe405h2",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8343e",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8533e_v10",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc5200_v10",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "750_v3.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "power8e_v2.1",
-      "typename": "",
-      "static": false
-    },
-    {
-      "name": "mpc8568e",
-      "typename": "",
-      "static": false
-    }
-  ],
   "id": "libvirt-38"
 }
 
 {
   "return": [
+    {
+      "name": "default",
+      "typename": "604-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "ppc",
+      "typename": "604-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "ppc32",
+      "typename": "604-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "ppc64",
+      "typename": "970fx_v3.1-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "970mp",
+      "typename": "970mp_v1.1-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "970fx",
+      "typename": "970fx_v3.1-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "970",
+      "typename": "970_v2.2-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "power9",
+      "typename": "power9_v2.0-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "power8nvl",
+      "typename": "power8nvl_v1.0-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "power8",
+      "typename": "host-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "power8e",
+      "typename": "power8e_v2.1-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "power7+",
+      "typename": "power7+_v2.1-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "power7",
+      "typename": "power7_v2.3-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "power5gs",
+      "typename": "power5+_v2.1-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "power5+",
+      "typename": "power5+_v2.1-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "apollo7pm",
+      "typename": "7457a_v1.0-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "7457a",
+      "typename": "7457a_v1.2-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "7447a",
+      "typename": "7447a_v1.2-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "apollo7",
+      "typename": "7457_v1.2-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "7457",
+      "typename": "7457_v1.2-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "7447",
+      "typename": "7447_v1.1-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "apollo6",
+      "typename": "7455_v3.2-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "7455",
+      "typename": "7455_v3.2-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "7445",
+      "typename": "7445_v3.2-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "7451",
+      "typename": "7451_v2.3-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "7441",
+      "typename": "7441_v2.3-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "vger",
+      "typename": "7450_v2.1-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "7450",
+      "typename": "7450_v2.1-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "7448",
+      "typename": "7448_v2.1-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "nitro",
+      "typename": "7410_v1.4-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "7410",
+      "typename": "7410_v1.4-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "g4",
+      "typename": "7400_v2.9-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "max",
+      "typename": "7400_v2.9-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "7400",
+      "typename": "7400_v2.9-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "goldfinger",
+      "typename": "755_v2.8-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "755",
+      "typename": "755_v2.8-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "745",
+      "typename": "745_v2.8-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "lonestar",
+      "typename": "750l_v3.2-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "750l",
+      "typename": "750l_v3.2-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "750gx",
+      "typename": "750gx_v1.2-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "750fx",
+      "typename": "750fx_v2.3-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "750cxe",
+      "typename": "750cxe_v3.1b-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "750cx",
+      "typename": "750cx_v2.2-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "750cl",
+      "typename": "750cl_v2.0-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "conan/doyle",
+      "typename": "750p-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "g3",
+      "typename": "750_v3.1-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "typhoon",
+      "typename": "750_v3.1-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "750",
+      "typename": "750_v3.1-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "arthur",
+      "typename": "740_v3.1-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "740",
+      "typename": "740_v3.1-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mach5",
+      "typename": "604r-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "sirocco",
+      "typename": "604e_v2.4-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "604e",
+      "typename": "604e_v2.4-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "goldeneye",
+      "typename": "603e7t-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "603r",
+      "typename": "603e7t-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "vaillant",
+      "typename": "603e7v-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "stretch",
+      "typename": "603e_v4.1-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "603e",
+      "typename": "603e_v4.1-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "vanilla",
+      "typename": "603-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "601v",
+      "typename": "601_v2-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "601",
+      "typename": "601_v2-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8560",
+      "typename": "mpc8560_v21-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8555e",
+      "typename": "mpc8555e_v11-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8555",
+      "typename": "mpc8555_v11-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8548e",
+      "typename": "mpc8548e_v21-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8548",
+      "typename": "mpc8548_v21-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8547e",
+      "typename": "mpc8547e_v21-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8545e",
+      "typename": "mpc8545e_v21-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8545",
+      "typename": "mpc8545_v21-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8544e",
+      "typename": "mpc8544e_v11-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8544",
+      "typename": "mpc8544_v11-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8543e",
+      "typename": "mpc8543e_v21-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8543",
+      "typename": "mpc8543_v21-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8541e",
+      "typename": "mpc8541e_v11-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8541",
+      "typename": "mpc8541_v11-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8540",
+      "typename": "mpc8540_v21-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8533e",
+      "typename": "mpc8533e_v11-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8533",
+      "typename": "mpc8533_v11-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "e500v2",
+      "typename": "e500v2_v22-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "e500v1",
+      "typename": "e500_v20-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "e500",
+      "typename": "e500v2_v22-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8347ea",
+      "typename": "mpc8347eat-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8347e",
+      "typename": "mpc8347et-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8347a",
+      "typename": "mpc8347at-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8347",
+      "typename": "mpc8347t-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "e300",
+      "typename": "e300c3-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "e200",
+      "typename": "e200z6-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8280",
+      "typename": "g2legp3-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8275",
+      "typename": "g2legp3-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8272",
+      "typename": "g2legp3-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8271",
+      "typename": "g2legp3-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8270",
+      "typename": "g2legp3-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8266_hip4",
+      "typename": "g2hip4-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8266_hip3",
+      "typename": "g2hip3-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8266",
+      "typename": "g2hip4-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8265_hip4",
+      "typename": "g2hip4-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8265_hip3",
+      "typename": "g2hip3-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8265",
+      "typename": "g2hip4-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8264_hip4",
+      "typename": "g2hip4-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8264_hip3",
+      "typename": "g2hip3-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8264",
+      "typename": "g2hip4-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8260_hip4",
+      "typename": "g2hip4-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8260_hip3",
+      "typename": "g2hip3-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8260",
+      "typename": "g2hip4-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8255_hip4",
+      "typename": "g2hip4-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8255_hip3",
+      "typename": "g2hip3-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8255",
+      "typename": "g2hip4-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8250_hip4",
+      "typename": "g2hip4-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8250_hip3",
+      "typename": "g2hip3-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8250",
+      "typename": "g2hip4-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8248",
+      "typename": "g2legp3-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8247",
+      "typename": "g2legp3-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8245",
+      "typename": "g2hip4-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8241",
+      "typename": "g2hip4-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "powerquicc-ii",
+      "typename": "g2legp3-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc82xx",
+      "typename": "g2legp3-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc5200b",
+      "typename": "mpc5200b_v21-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc5200",
+      "typename": "mpc5200_v12-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc52xx",
+      "typename": "mpc5200_v12-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8240",
+      "typename": "603-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "460ex",
+      "typename": "460exb-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "440ep",
+      "typename": "440epb-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "x2vp50",
+      "typename": "x2vp20-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "x2vp7",
+      "typename": "x2vp4-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "405gpe",
+      "typename": "405crc-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "405gp",
+      "typename": "405gpd-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "405cr",
+      "typename": "405crc-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "405",
+      "typename": "405d4-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "403",
+      "typename": "403gc-powerpc64-cpu",
+      "static": false
+    },
+    {
+      "name": "mpc8547e_v21",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750cl_v1.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7457a_v1.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "g2gp",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750cxe_v2.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "755_v2.7",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750_v2.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "755_v2.2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "745_v2.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8377",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7455_v1.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8545_v21",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8548_v11",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "405d4",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "g2le",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "g2hip3",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750e",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8572",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "970fx_v2.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750fx_v2.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "603p",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "405gpb",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7400_v2.7",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8544e_v10",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "e500v2_v10",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "e500mc",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "603e7v1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "970mp_v1.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "740e",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "405crc",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "403ga",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7447a_v1.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7400_v2.2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "e300c1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8572e",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "e500v2_v21",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "970fx_v1.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750gx_v1.2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750fx_v1.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7457_v1.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "970fx_v3.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "604e_v2.2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "755_v2.6",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "401a1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "power9_v1.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "npe405h",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7410_v1.4",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "g2ls",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750_v2.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "401b2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8349",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8347ep",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7445_v3.2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8540_v21",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8543_v11",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "403gcx",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "745_v2.4",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8548_v21",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750l_v3.2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750_v1.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "755_v1.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "e500_v10",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750cxe_v3.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8541e_v10",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8347p",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8555e_v10",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "power9_v2.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "power7_v2.3",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "603e7v",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8543e_v11",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750_v3.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7400_v2.6",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "405gpa",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "440epx",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750l_v2.2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "e200z6",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8547e_v20",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7457a_v1.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8349ea",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "e500v2_v20",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "power8nvl_v1.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8540_v10",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "755_v2.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "745_v2.8",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "npe405l",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8343ea",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8545_v20",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8548_v10",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7448_v1.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7455_v3.4",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "740_v2.2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7400_v1.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8347et",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7441_v2.10",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "603e_v1.4",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8543_v10",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "401c2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7451_v2.10",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750cx_v2.2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8543_v21",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "603e7",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7448_v2.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7441_v2.3",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "405crb",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "604",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7400_v2.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "440-xilinx-w-dfpu",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7445_v2.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "cobra",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "e500_v20",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8541_v11",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750gx_v1.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750cxe_v2.4",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8641d",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8543e_v21",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750l_v2.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7457_v1.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7450_v1.2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "755_v2.5",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7410_v1.3",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "745_v2.3",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "755_v2.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "e500v2_v30",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7455_v3.3",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8540_v20",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "405d2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8560_v21",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8343",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8548_v20",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8347t",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "755_v1.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "603e_v1.3",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "host",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8543e_v10",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8347eap",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8548e_v11",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8543_v20",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "401d2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "power8_v2.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "740_v3.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "e200z5",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "405cra",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7400_v2.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750cxe_v2.3",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "745_v2.7",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8560_v10",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "e5500",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8544_v11",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7448_v1.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "401e2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "740_v2.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "745_v2.2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7400_v1.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7410_v1.2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "x2vp4",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8347ap",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8533_v11",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc5200b_v21",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750fx_v2.3",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "601_v2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "g2legp3",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "604e_v1.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750cx_v2.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8610",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "g2h4",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750l_v3.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8377e",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "e300c4",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc5200_v12",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7448_v2.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7450_v2.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750cxe_v3.1b",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "g2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7400_v2.9",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "405gpd",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "603",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "603e7t",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8555_v11",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750gx_v1.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8541_v10",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8543e_v20",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750fl",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750l_v2.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "stb04",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8548e_v21",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "x2vp20",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "405ez",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "e600",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7450_v1.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "755_v2.4",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8379",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7445_v1.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7447_v1.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "603e_v2.2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "603e_v4",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "g2legp",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7455_v3.2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "740_v2.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8560_v20",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "440-xilinx",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "401f2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8533_v10",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "405gpr",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8349a",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "stb25",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "603e_v1.2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc5200b_v20",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750fx_v2.2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8347eat",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "740_v1.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "601_v1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "745_v1.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750cx_v2.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8548e_v10",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7447a_v1.2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "403gc",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "e300c3",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc5200_v11",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7441_v2.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "740_v3.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8545e_v21",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "602",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8378e",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8343a",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "460exb",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8555_v10",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8568",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7457a_v1.2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750cx_v1.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750cxe_v2.2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "604e_v2.4",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "755_v2.8",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "405lp",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "745_v2.6",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "stb03",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "405ep",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8544_v10",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8347at",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750_v2.2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7450_v1.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "755_v2.3",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7410_v1.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "745_v2.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750gl",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "e6500",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750p",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7445_v3.4",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "440epb",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "npe4gs3",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "603e_v3",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8349e",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "970_v2.2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "g2lels",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "g2hip4",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "740p",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8567e",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8533e_v11",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7451_v2.3",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "603e_v1.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "401g2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7400_v2.8",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7455_v2.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "405gpc",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "power7+_v2.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8544e_v11",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7450_v2.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "970mp_v1.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "603e7v2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "604r",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "e500v2_v22",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8548e_v20",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8545e_v20",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8378",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8567",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7457_v1.2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7447_v1.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "970fx_v3.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "745_v2.5",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8379e",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8641",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750cxe_v2.4b",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7410_v1.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc603",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "603e_v4.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7445_v3.3",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "440epa",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "970fx_v2.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "iop480",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750fx_v2.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "601_v0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "g2legp1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "745_v1.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750cl_v2.0",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750cxr",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "401",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8541e_v11",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750cxe_v3.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8555e_v11",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "power5+_v2.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "7447a_v1.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "403gb",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "e300c2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "npe405h2",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8343e",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8533e_v10",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc5200_v10",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "750_v3.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "power8e_v2.1",
+      "typename": "",
+      "static": false
+    },
+    {
+      "name": "mpc8568e",
+      "typename": "",
+      "static": false
+    }
   ],
   "id": "libvirt-39"
 }
 
 {
   "return": [
-    "emulator"
   ],
   "id": "libvirt-40"
 }
 
+{
+  "return": [
+    "emulator"
+  ],
+  "id": "libvirt-41"
+}
+
 {
   "return": [
     {
@@ -8822,7 +8876,7 @@
       "option": "drive"
     }
   ],
-  "id": "libvirt-41"
+  "id": "libvirt-42"
 }
 
 {
@@ -8884,7 +8938,7 @@
       "capability": "dirty-bitmaps"
     }
   ],
-  "id": "libvirt-42"
+  "id": "libvirt-43"
 }
 
 {
@@ -20252,7 +20306,7 @@
       "meta-type": "object"
     }
   ],
-  "id": "libvirt-43"
+  "id": "libvirt-44"
 }
 
 {
diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml
index 5bee534353..340d668d29 100644
--- a/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml
+++ b/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml
@@ -157,9 +157,10 @@
   <flag name='nbd-tls'/>
   <flag name='pr-manager-helper'/>
   <flag name='qom-list-properties'/>
+  <flag name='memory-backend-file.discard-data'/>
   <version>2011090</version>
   <kvmVersion>0</kvmVersion>
-  <microcodeVersion>419215</microcodeVersion>
+  <microcodeVersion>419968</microcodeVersion>
   <package>v2.12.0-rc0</package>
   <arch>ppc64</arch>
   <cpu type='kvm' name='default'/>
diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.s390x.replies b/tests/qemucapabilitiesdata/caps_2.12.0.s390x.replies
index c4e44c6d0f..726a5fb2c8 100644
--- a/tests/qemucapabilitiesdata/caps_2.12.0.s390x.replies
+++ b/tests/qemucapabilitiesdata/caps_2.12.0.s390x.replies
@@ -3614,6 +3614,60 @@
   "id": "libvirt-34"
 }
 
+{
+  "return": [
+    {
+      "name": "policy",
+      "type": "HostMemPolicy"
+    },
+    {
+      "name": "dump",
+      "type": "bool"
+    },
+    {
+      "name": "share",
+      "type": "bool"
+    },
+    {
+      "name": "prealloc",
+      "type": "bool"
+    },
+    {
+      "name": "size",
+      "type": "int"
+    },
+    {
+      "name": "host-nodes",
+      "type": "int"
+    },
+    {
+      "name": "id",
+      "type": "string"
+    },
+    {
+      "name": "merge",
+      "type": "bool"
+    },
+    {
+      "name": "align",
+      "type": "int"
+    },
+    {
+      "name": "mem-path",
+      "type": "string"
+    },
+    {
+      "name": "discard-data",
+      "type": "bool"
+    },
+    {
+      "name": "type",
+      "type": "string"
+    }
+  ],
+  "id": "libvirt-35"
+}
+
 {
   "return": [
     {
@@ -3669,7 +3723,7 @@
       "alias": "s390-ccw-virtio"
     }
   ],
-  "id": "libvirt-35"
+  "id": "libvirt-36"
 }
 
 {
@@ -6324,22 +6378,22 @@
       "migration-safe": true
     }
   ],
-  "id": "libvirt-36"
-}
-
-{
-  "return": [
-  ],
   "id": "libvirt-37"
 }
 
 {
   "return": [
-    "emulator"
   ],
   "id": "libvirt-38"
 }
 
+{
+  "return": [
+    "emulator"
+  ],
+  "id": "libvirt-39"
+}
+
 {
   "return": [
     {
@@ -7493,7 +7547,7 @@
       "option": "drive"
     }
   ],
-  "id": "libvirt-39"
+  "id": "libvirt-40"
 }
 
 {
@@ -7555,7 +7609,7 @@
       "capability": "dirty-bitmaps"
     }
   ],
-  "id": "libvirt-40"
+  "id": "libvirt-41"
 }
 
 {
@@ -18923,11 +18977,11 @@
       "meta-type": "object"
     }
   ],
-  "id": "libvirt-41"
+  "id": "libvirt-42"
 }
 
 {
-  "id": "libvirt-42",
+  "id": "libvirt-43",
   "error": {
     "class": "GenericError",
     "desc": "The CPU definition 'max' is unknown."
diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml
index 3dc65d77ae..255387e349 100644
--- a/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml
+++ b/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml
@@ -122,6 +122,7 @@
   <flag name='nbd-tls'/>
   <flag name='pr-manager-helper'/>
   <flag name='qom-list-properties'/>
+  <flag name='memory-backend-file.discard-data'/>
   <version>2011090</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>0</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.replies
index c086e04afd..c40046beef 100644
--- a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.replies
+++ b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.replies
@@ -4605,6 +4605,60 @@
   "id": "libvirt-39"
 }
 
+{
+  "return": [
+    {
+      "name": "policy",
+      "type": "HostMemPolicy"
+    },
+    {
+      "name": "dump",
+      "type": "bool"
+    },
+    {
+      "name": "share",
+      "type": "bool"
+    },
+    {
+      "name": "prealloc",
+      "type": "bool"
+    },
+    {
+      "name": "size",
+      "type": "int"
+    },
+    {
+      "name": "host-nodes",
+      "type": "int"
+    },
+    {
+      "name": "id",
+      "type": "string"
+    },
+    {
+      "name": "merge",
+      "type": "bool"
+    },
+    {
+      "name": "align",
+      "type": "int"
+    },
+    {
+      "name": "mem-path",
+      "type": "string"
+    },
+    {
+      "name": "discard-data",
+      "type": "bool"
+    },
+    {
+      "name": "type",
+      "type": "string"
+    }
+  ],
+  "id": "libvirt-40"
+}
+
 {
   "return": [
     {
@@ -4801,7 +4855,7 @@
       "cpu-max": 255
     }
   ],
-  "id": "libvirt-40"
+  "id": "libvirt-41"
 }
 
 {
@@ -5315,7 +5369,7 @@
       "migration-safe": true
     }
   ],
-  "id": "libvirt-41"
+  "id": "libvirt-42"
 }
 
 {
@@ -5323,7 +5377,7 @@
     "tpm-crb",
     "tpm-tis"
   ],
-  "id": "libvirt-42"
+  "id": "libvirt-43"
 }
 
 {
@@ -5331,7 +5385,7 @@
     "passthrough",
     "emulator"
   ],
-  "id": "libvirt-43"
+  "id": "libvirt-44"
 }
 
 {
@@ -6618,7 +6672,7 @@
       "option": "drive"
     }
   ],
-  "id": "libvirt-44"
+  "id": "libvirt-45"
 }
 
 {
@@ -6680,7 +6734,7 @@
       "capability": "dirty-bitmaps"
     }
   ],
-  "id": "libvirt-45"
+  "id": "libvirt-46"
 }
 
 {
@@ -18048,196 +18102,6 @@
       "meta-type": "object"
     }
   ],
-  "id": "libvirt-46"
-}
-
-{
-  "return": {
-    "model": {
-      "name": "base",
-      "props": {
-        "cmov": true,
-        "ia64": false,
-        "aes": true,
-        "mmx": true,
-        "rdpid": false,
-        "arat": true,
-        "gfni": false,
-        "pause-filter": false,
-        "xsavec": false,
-        "intel-pt": false,
-        "osxsave": false,
-        "kvm-asyncpf": true,
-        "perfctr-core": false,
-        "mpx": false,
-        "pbe": false,
-        "avx512cd": false,
-        "decodeassists": false,
-        "sse4.1": true,
-        "family": 6,
-        "avx512f": false,
-        "msr": true,
-        "mce": true,
-        "mca": true,
-        "xcrypt": false,
-        "min-level": 13,
-        "xgetbv1": false,
-        "cid": false,
-        "ds": false,
-        "fxsr": true,
-        "xsaveopt": true,
-        "xtpr": false,
-        "avx512vl": false,
-        "avx512-vpopcntdq": false,
-        "phe": false,
-        "extapic": false,
-        "3dnowprefetch": false,
-        "avx512vbmi2": false,
-        "cr8legacy": false,
-        "xcrypt-en": false,
-        "pn": false,
-        "dca": false,
-        "vendor": "GenuineIntel",
-        "pku": false,
-        "smx": false,
-        "cmp-legacy": false,
-        "avx512-4fmaps": false,
-        "vmcb-clean": false,
-        "hle": false,
-        "3dnowext": false,
-        "npt": false,
-        "clwb": false,
-        "lbrv": false,
-        "adx": false,
-        "ss": true,
-        "pni": true,
-        "svm-lock": false,
-        "smep": true,
-        "smap": false,
-        "pfthreshold": false,
-        "x2apic": true,
-        "avx512vbmi": false,
-        "avx512vnni": false,
-        "flushbyasid": false,
-        "f16c": true,
-        "ace2-en": false,
-        "pae": true,
-        "pat": true,
-        "sse": true,
-        "phe-en": false,
-        "kvm-nopiodelay": true,
-        "tm": false,
-        "kvmclock-stable-bit": true,
-        "hypervisor": true,
-        "pcommit": false,
-        "syscall": true,
-        "avx512dq": false,
-        "svm": false,
-        "invtsc": false,
-        "sse2": true,
-        "est": false,
-        "avx512ifma": false,
-        "tm2": false,
-        "kvm-pv-eoi": true,
-        "cx8": true,
-        "kvm-mmu": false,
-        "sse4.2": true,
-        "pge": true,
-        "avx512bitalg": false,
-        "pdcm": false,
-        "model": 63,
-        "movbe": true,
-        "nrip-save": false,
-        "ssse3": true,
-        "sse4a": false,
-        "invpcid": true,
-        "pdpe1gb": true,
-        "tsc-deadline": true,
-        "fma": true,
-        "cx16": true,
-        "de": true,
-        "stepping": 2,
-        "xsave": true,
-        "clflush": true,
-        "skinit": false,
-        "tsc": true,
-        "tce": false,
-        "fpu": true,
-        "ds-cpl": false,
-        "ibs": false,
-        "fma4": false,
-        "la57": false,
-        "osvw": false,
-        "apic": true,
-        "pmm": false,
-        "spec-ctrl": false,
-        "tsc-adjust": true,
-        "kvm-steal-time": true,
-        "kvmclock": true,
-        "lwp": false,
-        "xop": false,
-        "ibpb": false,
-        "avx": true,
-        "ospke": false,
-        "acpi": false,
-        "avx512bw": false,
-        "ace2": false,
-        "fsgsbase": true,
-        "ht": false,
-        "nx": true,
-        "pclmulqdq": true,
-        "mmxext": false,
-        "popcnt": true,
-        "vaes": false,
-        "xsaves": false,
-        "lm": true,
-        "umip": false,
-        "pse": true,
-        "avx2": true,
-        "sep": true,
-        "nodeid-msr": false,
-        "misalignsse": false,
-        "min-xlevel": 2147483656,
-        "bmi1": true,
-        "bmi2": true,
-        "kvm-pv-unhalt": true,
-        "tsc-scale": false,
-        "topoext": false,
-        "clflushopt": false,
-        "monitor": false,
-        "avx512er": false,
-        "pmm-en": false,
-        "pcid": true,
-        "3dnow": false,
-        "erms": true,
-        "lahf-lm": true,
-        "vpclmulqdq": false,
-        "fxsr-opt": false,
-        "xstore": false,
-        "rtm": false,
-        "kvm-hint-dedicated": true,
-        "lmce": true,
-        "perfctr-nb": false,
-        "rdrand": true,
-        "rdseed": false,
-        "avx512-4vnniw": false,
-        "vme": true,
-        "vmx": false,
-        "dtes64": false,
-        "mtrr": true,
-        "rdtscp": true,
-        "pse36": true,
-        "kvm-pv-tlb-flush": false,
-        "tbm": false,
-        "wdt": false,
-        "model-id": "Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz",
-        "sha-ni": false,
-        "abm": true,
-        "avx512pf": false,
-        "xstore-en": false
-      }
-    }
-  },
   "id": "libvirt-47"
 }
 
@@ -18246,9 +18110,6 @@
     "model": {
       "name": "base",
       "props": {
-        "phys-bits": 0,
-        "core-id": -1,
-        "xlevel": 2147483656,
         "cmov": true,
         "ia64": false,
         "aes": true,
@@ -18260,34 +18121,22 @@
         "xsavec": false,
         "intel-pt": false,
         "osxsave": false,
-        "tsc-frequency": 0,
-        "xd": true,
-        "hv-vendor-id": "",
         "kvm-asyncpf": true,
-        "kvm_asyncpf": true,
-        "perfctr_core": false,
         "perfctr-core": false,
         "mpx": false,
         "pbe": false,
-        "decodeassists": false,
         "avx512cd": false,
-        "sse4_1": true,
+        "decodeassists": false,
         "sse4.1": true,
-        "sse4-1": true,
         "family": 6,
-        "vmware-cpuid-freq": true,
         "avx512f": false,
         "msr": true,
         "mce": true,
         "mca": true,
-        "hv-runtime": false,
         "xcrypt": false,
-        "thread-id": -1,
         "min-level": 13,
         "xgetbv1": false,
         "cid": false,
-        "hv-relaxed": false,
-        "hv-crash": false,
         "ds": false,
         "fxsr": true,
         "xsaveopt": true,
@@ -18299,83 +18148,60 @@
         "3dnowprefetch": false,
         "avx512vbmi2": false,
         "cr8legacy": false,
-        "cpuid-0xb": true,
         "xcrypt-en": false,
-        "kvm_pv_eoi": true,
-        "apic-id": 4294967295,
         "pn": false,
         "dca": false,
         "vendor": "GenuineIntel",
         "pku": false,
         "smx": false,
-        "cmp_legacy": false,
         "cmp-legacy": false,
-        "node-id": -1,
         "avx512-4fmaps": false,
-        "vmcb_clean": false,
         "vmcb-clean": false,
-        "3dnowext": false,
         "hle": false,
+        "3dnowext": false,
         "npt": false,
-        "memory": "/machine/unattached/system[0]",
         "clwb": false,
         "lbrv": false,
         "adx": false,
         "ss": true,
         "pni": true,
-        "svm_lock": false,
         "svm-lock": false,
-        "pfthreshold": false,
         "smep": true,
         "smap": false,
+        "pfthreshold": false,
         "x2apic": true,
         "avx512vbmi": false,
         "avx512vnni": false,
-        "hv-stimer": false,
-        "i64": true,
         "flushbyasid": false,
         "f16c": true,
         "ace2-en": false,
-        "pat": true,
         "pae": true,
+        "pat": true,
         "sse": true,
         "phe-en": false,
-        "kvm_nopiodelay": true,
         "kvm-nopiodelay": true,
         "tm": false,
         "kvmclock-stable-bit": true,
         "hypervisor": true,
-        "socket-id": -1,
         "pcommit": false,
         "syscall": true,
-        "level": 13,
         "avx512dq": false,
         "svm": false,
-        "full-cpuid-auto-level": true,
-        "hv-reset": false,
         "invtsc": false,
-        "sse3": true,
         "sse2": true,
         "est": false,
         "avx512ifma": false,
         "tm2": false,
         "kvm-pv-eoi": true,
         "cx8": true,
-        "kvm_mmu": false,
         "kvm-mmu": false,
-        "sse4_2": true,
         "sse4.2": true,
-        "sse4-2": true,
         "pge": true,
-        "fill-mtrr-mask": true,
         "avx512bitalg": false,
-        "nodeid_msr": false,
         "pdcm": false,
-        "movbe": true,
         "model": 63,
-        "nrip_save": false,
+        "movbe": true,
         "nrip-save": false,
-        "kvm_pv_unhalt": true,
         "ssse3": true,
         "sse4a": false,
         "invpcid": true,
@@ -18384,7 +18210,6 @@
         "fma": true,
         "cx16": true,
         "de": true,
-        "enforce": false,
         "stepping": 2,
         "xsave": true,
         "clflush": true,
@@ -18392,66 +18217,47 @@
         "tsc": true,
         "tce": false,
         "fpu": true,
-        "ibs": false,
-        "ds_cpl": false,
         "ds-cpl": false,
-        "host-phys-bits": false,
+        "ibs": false,
         "fma4": false,
         "la57": false,
         "osvw": false,
-        "check": true,
-        "hv-spinlocks": -1,
-        "pmu": false,
-        "pmm": false,
         "apic": true,
+        "pmm": false,
         "spec-ctrl": false,
-        "min-xlevel2": 0,
         "tsc-adjust": true,
-        "tsc_adjust": true,
         "kvm-steal-time": true,
-        "kvm_steal_time": true,
         "kvmclock": true,
-        "l3-cache": true,
         "lwp": false,
-        "ibpb": false,
         "xop": false,
+        "ibpb": false,
         "avx": true,
         "ospke": false,
-        "ace2": false,
-        "avx512bw": false,
         "acpi": false,
-        "hv-vapic": false,
+        "avx512bw": false,
+        "ace2": false,
         "fsgsbase": true,
         "ht": false,
         "nx": true,
         "pclmulqdq": true,
         "mmxext": false,
-        "vaes": false,
         "popcnt": true,
+        "vaes": false,
         "xsaves": false,
-        "tcg-cpuid": true,
         "lm": true,
         "umip": false,
         "pse": true,
         "avx2": true,
         "sep": true,
-        "pclmuldq": true,
-        "x-hv-max-vps": -1,
         "nodeid-msr": false,
-        "kvm": true,
         "misalignsse": false,
         "min-xlevel": 2147483656,
-        "kvm-pv-unhalt": true,
-        "bmi2": true,
         "bmi1": true,
-        "realized": false,
-        "tsc_scale": false,
+        "bmi2": true,
+        "kvm-pv-unhalt": true,
         "tsc-scale": false,
         "topoext": false,
-        "hv-vpindex": false,
-        "xlevel2": 0,
         "clflushopt": false,
-        "kvm-no-smi-migration": false,
         "monitor": false,
         "avx512er": false,
         "pmm-en": false,
@@ -18459,24 +18265,18 @@
         "3dnow": false,
         "erms": true,
         "lahf-lm": true,
-        "lahf_lm": true,
         "vpclmulqdq": false,
         "fxsr-opt": false,
-        "hv-synic": false,
         "xstore": false,
-        "fxsr_opt": false,
-        "kvm-hint-dedicated": true,
         "rtm": false,
+        "kvm-hint-dedicated": true,
         "lmce": true,
-        "hv-time": false,
         "perfctr-nb": false,
-        "perfctr_nb": false,
-        "ffxsr": false,
         "rdrand": true,
         "rdseed": false,
         "avx512-4vnniw": false,
-        "vmx": false,
         "vme": true,
+        "vmx": false,
         "dtes64": false,
         "mtrr": true,
         "rdtscp": true,
@@ -18484,9 +18284,8 @@
         "kvm-pv-tlb-flush": false,
         "tbm": false,
         "wdt": false,
-        "pause_filter": false,
-        "sha-ni": false,
         "model-id": "Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz",
+        "sha-ni": false,
         "abm": true,
         "avx512pf": false,
         "xstore-en": false
@@ -18501,6 +18300,9 @@
     "model": {
       "name": "base",
       "props": {
+        "phys-bits": 0,
+        "core-id": -1,
+        "xlevel": 2147483656,
         "cmov": true,
         "ia64": false,
         "aes": true,
@@ -18512,22 +18314,34 @@
         "xsavec": false,
         "intel-pt": false,
         "osxsave": false,
+        "tsc-frequency": 0,
+        "xd": true,
+        "hv-vendor-id": "",
         "kvm-asyncpf": true,
+        "kvm_asyncpf": true,
+        "perfctr_core": false,
         "perfctr-core": false,
         "mpx": false,
         "pbe": false,
-        "avx512cd": false,
         "decodeassists": false,
+        "avx512cd": false,
+        "sse4_1": true,
         "sse4.1": true,
+        "sse4-1": true,
         "family": 6,
+        "vmware-cpuid-freq": true,
         "avx512f": false,
         "msr": true,
         "mce": true,
         "mca": true,
+        "hv-runtime": false,
         "xcrypt": false,
+        "thread-id": -1,
         "min-level": 13,
         "xgetbv1": false,
         "cid": false,
+        "hv-relaxed": false,
+        "hv-crash": false,
         "ds": false,
         "fxsr": true,
         "xsaveopt": true,
@@ -18539,60 +18353,83 @@
         "3dnowprefetch": false,
         "avx512vbmi2": false,
         "cr8legacy": false,
+        "cpuid-0xb": true,
         "xcrypt-en": false,
+        "kvm_pv_eoi": true,
+        "apic-id": 4294967295,
         "pn": false,
         "dca": false,
         "vendor": "GenuineIntel",
         "pku": false,
         "smx": false,
+        "cmp_legacy": false,
         "cmp-legacy": false,
+        "node-id": -1,
         "avx512-4fmaps": false,
+        "vmcb_clean": false,
         "vmcb-clean": false,
-        "hle": false,
         "3dnowext": false,
+        "hle": false,
         "npt": false,
+        "memory": "/machine/unattached/system[0]",
         "clwb": false,
         "lbrv": false,
         "adx": false,
         "ss": true,
         "pni": true,
+        "svm_lock": false,
         "svm-lock": false,
+        "pfthreshold": false,
         "smep": true,
         "smap": false,
-        "pfthreshold": false,
         "x2apic": true,
         "avx512vbmi": false,
         "avx512vnni": false,
+        "hv-stimer": false,
+        "i64": true,
         "flushbyasid": false,
         "f16c": true,
         "ace2-en": false,
-        "pae": true,
         "pat": true,
+        "pae": true,
         "sse": true,
         "phe-en": false,
+        "kvm_nopiodelay": true,
         "kvm-nopiodelay": true,
         "tm": false,
         "kvmclock-stable-bit": true,
         "hypervisor": true,
+        "socket-id": -1,
         "pcommit": false,
         "syscall": true,
+        "level": 13,
         "avx512dq": false,
         "svm": false,
-        "invtsc": true,
+        "full-cpuid-auto-level": true,
+        "hv-reset": false,
+        "invtsc": false,
+        "sse3": true,
         "sse2": true,
         "est": false,
         "avx512ifma": false,
         "tm2": false,
         "kvm-pv-eoi": true,
         "cx8": true,
+        "kvm_mmu": false,
         "kvm-mmu": false,
+        "sse4_2": true,
         "sse4.2": true,
+        "sse4-2": true,
         "pge": true,
+        "fill-mtrr-mask": true,
         "avx512bitalg": false,
+        "nodeid_msr": false,
         "pdcm": false,
-        "model": 63,
         "movbe": true,
+        "model": 63,
+        "nrip_save": false,
         "nrip-save": false,
+        "kvm_pv_unhalt": true,
         "ssse3": true,
         "sse4a": false,
         "invpcid": true,
@@ -18601,6 +18438,7 @@
         "fma": true,
         "cx16": true,
         "de": true,
+        "enforce": false,
         "stepping": 2,
         "xsave": true,
         "clflush": true,
@@ -18608,47 +18446,66 @@
         "tsc": true,
         "tce": false,
         "fpu": true,
-        "ds-cpl": false,
         "ibs": false,
+        "ds_cpl": false,
+        "ds-cpl": false,
+        "host-phys-bits": false,
         "fma4": false,
         "la57": false,
         "osvw": false,
-        "apic": true,
+        "check": true,
+        "hv-spinlocks": -1,
+        "pmu": false,
         "pmm": false,
+        "apic": true,
         "spec-ctrl": false,
+        "min-xlevel2": 0,
         "tsc-adjust": true,
+        "tsc_adjust": true,
         "kvm-steal-time": true,
+        "kvm_steal_time": true,
         "kvmclock": true,
+        "l3-cache": true,
         "lwp": false,
-        "xop": false,
         "ibpb": false,
+        "xop": false,
         "avx": true,
         "ospke": false,
-        "acpi": false,
-        "avx512bw": false,
         "ace2": false,
+        "avx512bw": false,
+        "acpi": false,
+        "hv-vapic": false,
         "fsgsbase": true,
         "ht": false,
         "nx": true,
         "pclmulqdq": true,
         "mmxext": false,
-        "popcnt": true,
         "vaes": false,
+        "popcnt": true,
         "xsaves": false,
+        "tcg-cpuid": true,
         "lm": true,
         "umip": false,
         "pse": true,
         "avx2": true,
         "sep": true,
+        "pclmuldq": true,
+        "x-hv-max-vps": -1,
         "nodeid-msr": false,
+        "kvm": true,
         "misalignsse": false,
         "min-xlevel": 2147483656,
-        "bmi1": true,
-        "bmi2": true,
         "kvm-pv-unhalt": true,
+        "bmi2": true,
+        "bmi1": true,
+        "realized": false,
+        "tsc_scale": false,
         "tsc-scale": false,
         "topoext": false,
+        "hv-vpindex": false,
+        "xlevel2": 0,
         "clflushopt": false,
+        "kvm-no-smi-migration": false,
         "monitor": false,
         "avx512er": false,
         "pmm-en": false,
@@ -18656,18 +18513,24 @@
         "3dnow": false,
         "erms": true,
         "lahf-lm": true,
+        "lahf_lm": true,
         "vpclmulqdq": false,
         "fxsr-opt": false,
+        "hv-synic": false,
         "xstore": false,
-        "rtm": false,
+        "fxsr_opt": false,
         "kvm-hint-dedicated": true,
+        "rtm": false,
         "lmce": true,
+        "hv-time": false,
         "perfctr-nb": false,
+        "perfctr_nb": false,
+        "ffxsr": false,
         "rdrand": true,
         "rdseed": false,
         "avx512-4vnniw": false,
-        "vme": true,
         "vmx": false,
+        "vme": true,
         "dtes64": false,
         "mtrr": true,
         "rdtscp": true,
@@ -18675,8 +18538,9 @@
         "kvm-pv-tlb-flush": false,
         "tbm": false,
         "wdt": false,
-        "model-id": "Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz",
+        "pause_filter": false,
         "sha-ni": false,
+        "model-id": "Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz",
         "abm": true,
         "avx512pf": false,
         "xstore-en": false
@@ -18691,9 +18555,6 @@
     "model": {
       "name": "base",
       "props": {
-        "phys-bits": 0,
-        "core-id": -1,
-        "xlevel": 2147483656,
         "cmov": true,
         "ia64": false,
         "aes": true,
@@ -18705,34 +18566,22 @@
         "xsavec": false,
         "intel-pt": false,
         "osxsave": false,
-        "tsc-frequency": 0,
-        "xd": true,
-        "hv-vendor-id": "",
         "kvm-asyncpf": true,
-        "kvm_asyncpf": true,
-        "perfctr_core": false,
         "perfctr-core": false,
         "mpx": false,
         "pbe": false,
-        "decodeassists": false,
         "avx512cd": false,
-        "sse4_1": true,
+        "decodeassists": false,
         "sse4.1": true,
-        "sse4-1": true,
         "family": 6,
-        "vmware-cpuid-freq": true,
         "avx512f": false,
         "msr": true,
         "mce": true,
         "mca": true,
-        "hv-runtime": false,
         "xcrypt": false,
-        "thread-id": -1,
         "min-level": 13,
         "xgetbv1": false,
         "cid": false,
-        "hv-relaxed": false,
-        "hv-crash": false,
         "ds": false,
         "fxsr": true,
         "xsaveopt": true,
@@ -18744,83 +18593,60 @@
         "3dnowprefetch": false,
         "avx512vbmi2": false,
         "cr8legacy": false,
-        "cpuid-0xb": true,
         "xcrypt-en": false,
-        "kvm_pv_eoi": true,
-        "apic-id": 4294967295,
         "pn": false,
         "dca": false,
         "vendor": "GenuineIntel",
         "pku": false,
         "smx": false,
-        "cmp_legacy": false,
         "cmp-legacy": false,
-        "node-id": -1,
         "avx512-4fmaps": false,
-        "vmcb_clean": false,
         "vmcb-clean": false,
-        "3dnowext": false,
         "hle": false,
+        "3dnowext": false,
         "npt": false,
-        "memory": "/machine/unattached/system[0]",
         "clwb": false,
         "lbrv": false,
         "adx": false,
         "ss": true,
         "pni": true,
-        "svm_lock": false,
         "svm-lock": false,
-        "pfthreshold": false,
         "smep": true,
         "smap": false,
+        "pfthreshold": false,
         "x2apic": true,
         "avx512vbmi": false,
         "avx512vnni": false,
-        "hv-stimer": false,
-        "i64": true,
         "flushbyasid": false,
         "f16c": true,
         "ace2-en": false,
-        "pat": true,
         "pae": true,
+        "pat": true,
         "sse": true,
         "phe-en": false,
-        "kvm_nopiodelay": true,
         "kvm-nopiodelay": true,
         "tm": false,
         "kvmclock-stable-bit": true,
         "hypervisor": true,
-        "socket-id": -1,
         "pcommit": false,
         "syscall": true,
-        "level": 13,
         "avx512dq": false,
         "svm": false,
-        "full-cpuid-auto-level": true,
-        "hv-reset": false,
         "invtsc": true,
-        "sse3": true,
         "sse2": true,
         "est": false,
         "avx512ifma": false,
         "tm2": false,
         "kvm-pv-eoi": true,
         "cx8": true,
-        "kvm_mmu": false,
         "kvm-mmu": false,
-        "sse4_2": true,
         "sse4.2": true,
-        "sse4-2": true,
         "pge": true,
-        "fill-mtrr-mask": true,
         "avx512bitalg": false,
-        "nodeid_msr": false,
         "pdcm": false,
-        "movbe": true,
         "model": 63,
-        "nrip_save": false,
+        "movbe": true,
         "nrip-save": false,
-        "kvm_pv_unhalt": true,
         "ssse3": true,
         "sse4a": false,
         "invpcid": true,
@@ -18829,7 +18655,6 @@
         "fma": true,
         "cx16": true,
         "de": true,
-        "enforce": false,
         "stepping": 2,
         "xsave": true,
         "clflush": true,
@@ -18837,66 +18662,47 @@
         "tsc": true,
         "tce": false,
         "fpu": true,
-        "ibs": false,
-        "ds_cpl": false,
         "ds-cpl": false,
-        "host-phys-bits": false,
+        "ibs": false,
         "fma4": false,
         "la57": false,
         "osvw": false,
-        "check": true,
-        "hv-spinlocks": -1,
-        "pmu": false,
-        "pmm": false,
         "apic": true,
+        "pmm": false,
         "spec-ctrl": false,
-        "min-xlevel2": 0,
         "tsc-adjust": true,
-        "tsc_adjust": true,
         "kvm-steal-time": true,
-        "kvm_steal_time": true,
         "kvmclock": true,
-        "l3-cache": true,
         "lwp": false,
-        "ibpb": false,
         "xop": false,
+        "ibpb": false,
         "avx": true,
         "ospke": false,
-        "ace2": false,
-        "avx512bw": false,
         "acpi": false,
-        "hv-vapic": false,
+        "avx512bw": false,
+        "ace2": false,
         "fsgsbase": true,
         "ht": false,
         "nx": true,
         "pclmulqdq": true,
         "mmxext": false,
-        "vaes": false,
         "popcnt": true,
+        "vaes": false,
         "xsaves": false,
-        "tcg-cpuid": true,
         "lm": true,
         "umip": false,
         "pse": true,
         "avx2": true,
         "sep": true,
-        "pclmuldq": true,
-        "x-hv-max-vps": -1,
         "nodeid-msr": false,
-        "kvm": true,
         "misalignsse": false,
         "min-xlevel": 2147483656,
-        "kvm-pv-unhalt": true,
-        "bmi2": true,
         "bmi1": true,
-        "realized": false,
-        "tsc_scale": false,
+        "bmi2": true,
+        "kvm-pv-unhalt": true,
         "tsc-scale": false,
         "topoext": false,
-        "hv-vpindex": false,
-        "xlevel2": 0,
         "clflushopt": false,
-        "kvm-no-smi-migration": false,
         "monitor": false,
         "avx512er": false,
         "pmm-en": false,
@@ -18904,24 +18710,18 @@
         "3dnow": false,
         "erms": true,
         "lahf-lm": true,
-        "lahf_lm": true,
         "vpclmulqdq": false,
         "fxsr-opt": false,
-        "hv-synic": false,
         "xstore": false,
-        "fxsr_opt": false,
-        "kvm-hint-dedicated": true,
         "rtm": false,
+        "kvm-hint-dedicated": true,
         "lmce": true,
-        "hv-time": false,
         "perfctr-nb": false,
-        "perfctr_nb": false,
-        "ffxsr": false,
         "rdrand": true,
         "rdseed": false,
         "avx512-4vnniw": false,
-        "vmx": false,
         "vme": true,
+        "vmx": false,
         "dtes64": false,
         "mtrr": true,
         "rdtscp": true,
@@ -18929,9 +18729,8 @@
         "kvm-pv-tlb-flush": false,
         "tbm": false,
         "wdt": false,
-        "pause_filter": false,
-        "sha-ni": false,
         "model-id": "Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz",
+        "sha-ni": false,
         "abm": true,
         "avx512pf": false,
         "xstore-en": false
@@ -18941,6 +18740,261 @@
   "id": "libvirt-50"
 }
 
+{
+  "return": {
+    "model": {
+      "name": "base",
+      "props": {
+        "phys-bits": 0,
+        "core-id": -1,
+        "xlevel": 2147483656,
+        "cmov": true,
+        "ia64": false,
+        "aes": true,
+        "mmx": true,
+        "rdpid": false,
+        "arat": true,
+        "gfni": false,
+        "pause-filter": false,
+        "xsavec": false,
+        "intel-pt": false,
+        "osxsave": false,
+        "tsc-frequency": 0,
+        "xd": true,
+        "hv-vendor-id": "",
+        "kvm-asyncpf": true,
+        "kvm_asyncpf": true,
+        "perfctr_core": false,
+        "perfctr-core": false,
+        "mpx": false,
+        "pbe": false,
+        "decodeassists": false,
+        "avx512cd": false,
+        "sse4_1": true,
+        "sse4.1": true,
+        "sse4-1": true,
+        "family": 6,
+        "vmware-cpuid-freq": true,
+        "avx512f": false,
+        "msr": true,
+        "mce": true,
+        "mca": true,
+        "hv-runtime": false,
+        "xcrypt": false,
+        "thread-id": -1,
+        "min-level": 13,
+        "xgetbv1": false,
+        "cid": false,
+        "hv-relaxed": false,
+        "hv-crash": false,
+        "ds": false,
+        "fxsr": true,
+        "xsaveopt": true,
+        "xtpr": false,
+        "avx512vl": false,
+        "avx512-vpopcntdq": false,
+        "phe": false,
+        "extapic": false,
+        "3dnowprefetch": false,
+        "avx512vbmi2": false,
+        "cr8legacy": false,
+        "cpuid-0xb": true,
+        "xcrypt-en": false,
+        "kvm_pv_eoi": true,
+        "apic-id": 4294967295,
+        "pn": false,
+        "dca": false,
+        "vendor": "GenuineIntel",
+        "pku": false,
+        "smx": false,
+        "cmp_legacy": false,
+        "cmp-legacy": false,
+        "node-id": -1,
+        "avx512-4fmaps": false,
+        "vmcb_clean": false,
+        "vmcb-clean": false,
+        "3dnowext": false,
+        "hle": false,
+        "npt": false,
+        "memory": "/machine/unattached/system[0]",
+        "clwb": false,
+        "lbrv": false,
+        "adx": false,
+        "ss": true,
+        "pni": true,
+        "svm_lock": false,
+        "svm-lock": false,
+        "pfthreshold": false,
+        "smep": true,
+        "smap": false,
+        "x2apic": true,
+        "avx512vbmi": false,
+        "avx512vnni": false,
+        "hv-stimer": false,
+        "i64": true,
+        "flushbyasid": false,
+        "f16c": true,
+        "ace2-en": false,
+        "pat": true,
+        "pae": true,
+        "sse": true,
+        "phe-en": false,
+        "kvm_nopiodelay": true,
+        "kvm-nopiodelay": true,
+        "tm": false,
+        "kvmclock-stable-bit": true,
+        "hypervisor": true,
+        "socket-id": -1,
+        "pcommit": false,
+        "syscall": true,
+        "level": 13,
+        "avx512dq": false,
+        "svm": false,
+        "full-cpuid-auto-level": true,
+        "hv-reset": false,
+        "invtsc": true,
+        "sse3": true,
+        "sse2": true,
+        "est": false,
+        "avx512ifma": false,
+        "tm2": false,
+        "kvm-pv-eoi": true,
+        "cx8": true,
+        "kvm_mmu": false,
+        "kvm-mmu": false,
+        "sse4_2": true,
+        "sse4.2": true,
+        "sse4-2": true,
+        "pge": true,
+        "fill-mtrr-mask": true,
+        "avx512bitalg": false,
+        "nodeid_msr": false,
+        "pdcm": false,
+        "movbe": true,
+        "model": 63,
+        "nrip_save": false,
+        "nrip-save": false,
+        "kvm_pv_unhalt": true,
+        "ssse3": true,
+        "sse4a": false,
+        "invpcid": true,
+        "pdpe1gb": true,
+        "tsc-deadline": true,
+        "fma": true,
+        "cx16": true,
+        "de": true,
+        "enforce": false,
+        "stepping": 2,
+        "xsave": true,
+        "clflush": true,
+        "skinit": false,
+        "tsc": true,
+        "tce": false,
+        "fpu": true,
+        "ibs": false,
+        "ds_cpl": false,
+        "ds-cpl": false,
+        "host-phys-bits": false,
+        "fma4": false,
+        "la57": false,
+        "osvw": false,
+        "check": true,
+        "hv-spinlocks": -1,
+        "pmu": false,
+        "pmm": false,
+        "apic": true,
+        "spec-ctrl": false,
+        "min-xlevel2": 0,
+        "tsc-adjust": true,
+        "tsc_adjust": true,
+        "kvm-steal-time": true,
+        "kvm_steal_time": true,
+        "kvmclock": true,
+        "l3-cache": true,
+        "lwp": false,
+        "ibpb": false,
+        "xop": false,
+        "avx": true,
+        "ospke": false,
+        "ace2": false,
+        "avx512bw": false,
+        "acpi": false,
+        "hv-vapic": false,
+        "fsgsbase": true,
+        "ht": false,
+        "nx": true,
+        "pclmulqdq": true,
+        "mmxext": false,
+        "vaes": false,
+        "popcnt": true,
+        "xsaves": false,
+        "tcg-cpuid": true,
+        "lm": true,
+        "umip": false,
+        "pse": true,
+        "avx2": true,
+        "sep": true,
+        "pclmuldq": true,
+        "x-hv-max-vps": -1,
+        "nodeid-msr": false,
+        "kvm": true,
+        "misalignsse": false,
+        "min-xlevel": 2147483656,
+        "kvm-pv-unhalt": true,
+        "bmi2": true,
+        "bmi1": true,
+        "realized": false,
+        "tsc_scale": false,
+        "tsc-scale": false,
+        "topoext": false,
+        "hv-vpindex": false,
+        "xlevel2": 0,
+        "clflushopt": false,
+        "kvm-no-smi-migration": false,
+        "monitor": false,
+        "avx512er": false,
+        "pmm-en": false,
+        "pcid": true,
+        "3dnow": false,
+        "erms": true,
+        "lahf-lm": true,
+        "lahf_lm": true,
+        "vpclmulqdq": false,
+        "fxsr-opt": false,
+        "hv-synic": false,
+        "xstore": false,
+        "fxsr_opt": false,
+        "kvm-hint-dedicated": true,
+        "rtm": false,
+        "lmce": true,
+        "hv-time": false,
+        "perfctr-nb": false,
+        "perfctr_nb": false,
+        "ffxsr": false,
+        "rdrand": true,
+        "rdseed": false,
+        "avx512-4vnniw": false,
+        "vmx": false,
+        "vme": true,
+        "dtes64": false,
+        "mtrr": true,
+        "rdtscp": true,
+        "pse36": true,
+        "kvm-pv-tlb-flush": false,
+        "tbm": false,
+        "wdt": false,
+        "pause_filter": false,
+        "sha-ni": false,
+        "model-id": "Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz",
+        "abm": true,
+        "avx512pf": false,
+        "xstore-en": false
+      }
+    }
+  },
+  "id": "libvirt-51"
+}
+
 {
   "return": {
   },
diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml
index 66fc7782b8..a70370ba53 100644
--- a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml
@@ -198,9 +198,10 @@
   <flag name='tpm-crb'/>
   <flag name='pr-manager-helper'/>
   <flag name='qom-list-properties'/>
+  <flag name='memory-backend-file.discard-data'/>
   <version>2011090</version>
   <kvmVersion>0</kvmVersion>
-  <microcodeVersion>390060</microcodeVersion>
+  <microcodeVersion>390813</microcodeVersion>
   <package>v2.12.0-rc0</package>
   <arch>x86_64</arch>
   <hostCPU type='kvm' model='base' migratability='yes'>
-- 
2.16.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v5 5/7] conf: Move virDomainMemtune formatting into a separate function
Posted by Michal Privoznik, 1 week ago
At the same time convert the code to use virXMLFormatElement.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
---
 src/conf/domain_conf.c | 114 +++++++++++++++++++++++++++----------------------
 1 file changed, 63 insertions(+), 51 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 5d9148c1b1..6786d81c9b 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -26555,6 +26555,67 @@ virDomainIOMMUDefFormat(virBufferPtr buf,
 }
 
 
+static int
+virDomainMemtuneFormat(virBufferPtr buf,
+                       const virDomainMemtune *mem)
+{
+    virBuffer childBuf = VIR_BUFFER_INITIALIZER;
+    int ret = -1;
+
+    virBufferSetChildIndent(&childBuf, buf);
+
+    if (virMemoryLimitIsSet(mem->hard_limit)) {
+        virBufferAsprintf(&childBuf,
+                          "<hard_limit unit='KiB'>%llu</hard_limit>\n",
+                          mem->hard_limit);
+    }
+    if (virMemoryLimitIsSet(mem->soft_limit)) {
+        virBufferAsprintf(&childBuf,
+                          "<soft_limit unit='KiB'>%llu</soft_limit>\n",
+                          mem->soft_limit);
+    }
+    if (mem->min_guarantee) {
+        virBufferAsprintf(&childBuf,
+                          "<min_guarantee unit='KiB'>%llu</min_guarantee>\n",
+                          mem->min_guarantee);
+    }
+    if (virMemoryLimitIsSet(mem->swap_hard_limit)) {
+        virBufferAsprintf(&childBuf,
+                          "<swap_hard_limit unit='KiB'>%llu</swap_hard_limit>\n",
+                          mem->swap_hard_limit);
+    }
+
+    if (virXMLFormatElement(buf, "memtune", NULL, &childBuf) < 0)
+        goto cleanup;
+
+    virBufferSetChildIndent(&childBuf, buf);
+
+    if (mem->nhugepages)
+        virDomainHugepagesFormat(&childBuf, mem->hugepages, mem->nhugepages);
+    if (mem->nosharepages)
+        virBufferAddLit(&childBuf, "<nosharepages/>\n");
+    if (mem->locked)
+        virBufferAddLit(&childBuf, "<locked/>\n");
+    if (mem->source)
+        virBufferAsprintf(&childBuf, "<source type='%s'/>\n",
+                          virDomainMemorySourceTypeToString(mem->source));
+    if (mem->access)
+        virBufferAsprintf(&childBuf, "<access mode='%s'/>\n",
+                          virDomainMemoryAccessTypeToString(mem->access));
+    if (mem->allocation)
+        virBufferAsprintf(&childBuf, "<allocation mode='%s'/>\n",
+                          virDomainMemoryAllocationTypeToString(mem->allocation));
+
+    if (virXMLFormatElement(buf, "memoryBacking", NULL, &childBuf) < 0)
+        goto cleanup;
+
+    ret = 0;
+ cleanup:
+    virBufferFreeAndReset(&childBuf);
+    return ret;
+}
+
+
 /* This internal version appends to an existing buffer
  * (possibly with auto-indent), rather than flattening
  * to string.
@@ -26693,57 +26754,8 @@ virDomainDefFormatInternal(virDomainDefPtr def,
     }
     virBufferFreeAndReset(&childrenBuf);
 
-    /* add memtune only if there are any */
-    if (virMemoryLimitIsSet(def->mem.hard_limit) ||
-        virMemoryLimitIsSet(def->mem.soft_limit) ||
-        virMemoryLimitIsSet(def->mem.swap_hard_limit) ||
-        def->mem.min_guarantee) {
-        virBufferAddLit(buf, "<memtune>\n");
-        virBufferAdjustIndent(buf, 2);
-        if (virMemoryLimitIsSet(def->mem.hard_limit)) {
-            virBufferAsprintf(buf, "<hard_limit unit='KiB'>"
-                              "%llu</hard_limit>\n", def->mem.hard_limit);
-        }
-        if (virMemoryLimitIsSet(def->mem.soft_limit)) {
-            virBufferAsprintf(buf, "<soft_limit unit='KiB'>"
-                              "%llu</soft_limit>\n", def->mem.soft_limit);
-        }
-        if (def->mem.min_guarantee) {
-            virBufferAsprintf(buf, "<min_guarantee unit='KiB'>"
-                              "%llu</min_guarantee>\n", def->mem.min_guarantee);
-        }
-        if (virMemoryLimitIsSet(def->mem.swap_hard_limit)) {
-            virBufferAsprintf(buf, "<swap_hard_limit unit='KiB'>"
-                              "%llu</swap_hard_limit>\n", def->mem.swap_hard_limit);
-        }
-        virBufferAdjustIndent(buf, -2);
-        virBufferAddLit(buf, "</memtune>\n");
-    }
-
-    if (def->mem.nhugepages || def->mem.nosharepages || def->mem.locked
-        || def->mem.source || def->mem.access || def->mem.allocation)
-    {
-        virBufferAddLit(buf, "<memoryBacking>\n");
-        virBufferAdjustIndent(buf, 2);
-        if (def->mem.nhugepages)
-            virDomainHugepagesFormat(buf, def->mem.hugepages, def->mem.nhugepages);
-        if (def->mem.nosharepages)
-            virBufferAddLit(buf, "<nosharepages/>\n");
-        if (def->mem.locked)
-            virBufferAddLit(buf, "<locked/>\n");
-        if (def->mem.source)
-            virBufferAsprintf(buf, "<source type='%s'/>\n",
-                virDomainMemorySourceTypeToString(def->mem.source));
-        if (def->mem.access)
-            virBufferAsprintf(buf, "<access mode='%s'/>\n",
-                virDomainMemoryAccessTypeToString(def->mem.access));
-        if (def->mem.allocation)
-            virBufferAsprintf(buf, "<allocation mode='%s'/>\n",
-                virDomainMemoryAllocationTypeToString(def->mem.allocation));
-
-        virBufferAdjustIndent(buf, -2);
-        virBufferAddLit(buf, "</memoryBacking>\n");
-    }
+    if (virDomainMemtuneFormat(buf, &def->mem) < 0)
+        goto error;
 
     if (virDomainCpuDefFormat(buf, def) < 0)
         goto error;
-- 
2.16.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v5 5/7] conf: Move virDomainMemtune formatting into a separate function
Posted by Ján Tomko, 1 week ago
On Fri, May 11, 2018 at 05:09:16PM +0200, Michal Privoznik wrote:
>At the same time convert the code to use virXMLFormatElement.
>
>Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
>---
> src/conf/domain_conf.c | 114 +++++++++++++++++++++++++++----------------------
> 1 file changed, 63 insertions(+), 51 deletions(-)
>

Reviewed-by: J�n Tomko <jtomko@redhat.com>

Jano
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v5 6/7] conf: Introduce memoryBacking/discard
Posted by Michal Privoznik, 1 week ago
QEMU has possibility to call madvise(.., MADV_REMOVE) in some
cases. Expose this feature to users by new element/attribute
discard.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
---
 docs/formatdomain.html.in                     | 34 +++++++++++++++++++++++--
 docs/schemas/cputypes.rng                     |  5 ++++
 docs/schemas/domaincommon.rng                 | 10 ++++++++
 src/conf/domain_conf.c                        | 36 ++++++++++++++++++++++++++-
 src/conf/domain_conf.h                        |  3 +++
 src/conf/numa_conf.c                          | 27 ++++++++++++++++++++
 src/conf/numa_conf.h                          |  3 +++
 src/libvirt_private.syms                      |  1 +
 tests/qemuxml2argvdata/hugepages-pages.xml    |  3 ++-
 tests/qemuxml2argvdata/hugepages-pages3.xml   |  4 +--
 tests/qemuxml2argvdata/hugepages-pages7.xml   |  4 +--
 tests/qemuxml2xmloutdata/hugepages-pages.xml  |  3 ++-
 tests/qemuxml2xmloutdata/hugepages-pages3.xml |  4 +--
 13 files changed, 126 insertions(+), 11 deletions(-)

diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index 072f9a0fdc..80172c18d0 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -1016,6 +1016,7 @@
     &lt;source type="file|anonymous"/&gt;
     &lt;access mode="shared|private"/&gt;
     &lt;allocation mode="immediate|ondemand"/&gt;
+    &lt;discard/&gt;
   &lt;/memoryBacking&gt;
   ...
 &lt;/domain&gt;
@@ -1070,6 +1071,14 @@
          numa node by <code>memAccess</code></dd>
        <dt><code>allocation</code></dt>
        <dd>Specify when allocate the memory</dd>
+       <dt><code>discard</code></dt>
+       <dd>When set and supported by hypervisor the memory
+         content is discarded just before guest shuts down (or
+         when DIMM module is unplugged). Please note that this is
+         just an optimization and is not guaranteed to work in
+         all cases (e.g. when hypervisor crashes).
+         <span class="since">Since 4.4.0</span> (QEMU/KVM only)
+       </dd>
     </dl>
 
 
@@ -1608,7 +1617,7 @@
 &lt;cpu&gt;
   ...
   &lt;numa&gt;
-    &lt;cell id='0' cpus='0-3' memory='512000' unit='KiB'/&gt;
+    &lt;cell id='0' cpus='0-3' memory='512000' unit='KiB' discard='yes'/&gt;
     &lt;cell id='1' cpus='4-7' memory='512000' unit='KiB' memAccess='shared'/&gt;
   &lt;/numa&gt;
   ...
@@ -1634,6 +1643,13 @@
       <code>memAccess</code> can control whether the memory is to be
       mapped as "shared" or "private".  This is valid only for
       hugepages-backed memory and nvdimm modules.
+
+      Each <code>cell</code> element can have an optional
+      <code>discard</code> attribute which fine tunes the discard
+      feature for given numa node as described under
+      <a href="#elementsMemoryBacking">Memory Backing</a>.
+      Accepted values are <code>yes</code> and <code>no</code>.
+      <span class='since'>Since 4.4.0</span>
     </p>
 
     <p>
@@ -7883,7 +7899,7 @@ qemu-kvm -net nic,model=? /dev/null
 <pre>
 ...
 &lt;devices&gt;
-  &lt;memory model='dimm' access='private'&gt;
+  &lt;memory model='dimm' access='private' discard='yes'&gt;
     &lt;target&gt;
       &lt;size unit='KiB'&gt;524287&lt;/size&gt;
       &lt;node&gt;0&lt;/node&gt;
@@ -7937,6 +7953,20 @@ qemu-kvm -net nic,model=? /dev/null
         </p>
       </dd>
 
+      <dt><code>discard</code></dt>
+      <dd>
+        <p>
+          An optional attribute <code>discard</code>
+          (<span class="since">since 4.4.0</span>) that provides
+          capability to fine tune discard of data on per module
+          basis. Accepted values are <code>yes</code> and
+          <code>no</code>. The feature is described here:
+          <a href="#elementsMemoryBacking">Memory Backing</a>.
+          This attribute is allowed only for
+          <code>model='dimm'</code>.
+        </p>
+      </dd>
+
       <dt><code>source</code></dt>
       <dd>
         <p>
diff --git a/docs/schemas/cputypes.rng b/docs/schemas/cputypes.rng
index c45b6dfb28..1f1e0e36d5 100644
--- a/docs/schemas/cputypes.rng
+++ b/docs/schemas/cputypes.rng
@@ -129,6 +129,11 @@
           </choice>
         </attribute>
       </optional>
+      <optional>
+        <attribute name="discard">
+          <ref name="virYesNo"/>
+        </attribute>
+      </optional>
       <optional>
         <element name="distances">
           <oneOrMore>
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 8c446ca418..13af5b74a4 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -633,6 +633,11 @@
                 </attribute>
               </element>
             </optional>
+            <optional>
+              <element name="discard">
+                <empty/>
+              </element>
+            </optional>
           </interleave>
         </element>
       </optional>
@@ -5124,6 +5129,11 @@
           </choice>
         </attribute>
       </optional>
+      <optional>
+        <attribute name="discard">
+          <ref name="virYesNo"/>
+        </attribute>
+      </optional>
       <interleave>
         <optional>
           <ref name="memorydev-source"/>
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 6786d81c9b..86229db654 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -5516,6 +5516,20 @@ virDomainVideoDefValidate(const virDomainVideoDef *video)
 }
 
 
+static int
+virDomainMemoryDefValidate(const virDomainMemoryDef *mem)
+{
+    if (mem->model == VIR_DOMAIN_MEMORY_MODEL_NVDIMM &&
+        mem->discard == VIR_TRISTATE_BOOL_YES) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                       _("discard is not supported for nvdimms"));
+        return -1;
+    }
+
+    return 0;
+}
+
+
 static int
 virDomainDeviceDefValidateInternal(const virDomainDeviceDef *dev,
                                    const virDomainDef *def)
@@ -5548,6 +5562,9 @@ virDomainDeviceDefValidateInternal(const virDomainDeviceDef *dev,
     case VIR_DOMAIN_DEVICE_VIDEO:
         return virDomainVideoDefValidate(dev->data.video);
 
+    case VIR_DOMAIN_DEVICE_MEMORY:
+        return virDomainMemoryDefValidate(dev->data.memory);
+
     case VIR_DOMAIN_DEVICE_LEASE:
     case VIR_DOMAIN_DEVICE_FS:
     case VIR_DOMAIN_DEVICE_INPUT:
@@ -5560,7 +5577,6 @@ virDomainDeviceDefValidateInternal(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:
@@ -15673,6 +15689,16 @@ virDomainMemoryDefParseXML(virDomainXMLOptionPtr xmlopt,
     }
     VIR_FREE(tmp);
 
+    if ((tmp = virXMLPropString(memdevNode, "discard"))) {
+        if ((val = virTristateBoolTypeFromString(tmp)) <= 0) {
+            virReportError(VIR_ERR_XML_ERROR,
+                           _("invalid discard value '%s'"), tmp);
+            goto error;
+        }
+
+        def->discard = val;
+    }
+
     /* source */
     if ((node = virXPathNode("./source", ctxt)) &&
         virDomainMemorySourceDefParseXML(node, ctxt, def) < 0)
@@ -18999,6 +19025,9 @@ virDomainDefParseXML(xmlDocPtr xml,
     if (virXPathBoolean("boolean(./memoryBacking/locked)", ctxt))
         def->mem.locked = true;
 
+    if (virXPathBoolean("boolean(./memoryBacking/discard)", ctxt))
+        def->mem.discard = VIR_TRISTATE_BOOL_YES;
+
     /* Extract blkio cgroup tunables */
     if (virXPathUInt("string(./blkiotune/weight)", ctxt,
                      &def->blkio.weight) < 0)
@@ -25259,6 +25288,9 @@ virDomainMemoryDefFormat(virBufferPtr buf,
     if (def->access)
         virBufferAsprintf(buf, " access='%s'",
                           virDomainMemoryAccessTypeToString(def->access));
+    if (def->discard)
+        virBufferAsprintf(buf, " discard='%s'",
+                          virTristateBoolTypeToString(def->discard));
     virBufferAddLit(buf, ">\n");
     virBufferAdjustIndent(buf, 2);
 
@@ -26605,6 +26637,8 @@ virDomainMemtuneFormat(virBufferPtr buf,
     if (mem->allocation)
         virBufferAsprintf(&childBuf, "<allocation mode='%s'/>\n",
                           virDomainMemoryAllocationTypeToString(mem->allocation));
+    if (mem->discard)
+        virBufferAddLit(&childBuf, "<discard/>\n");
 
     if (virXMLFormatElement(buf, "memoryBacking", NULL, &childBuf) < 0)
         goto cleanup;
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 15d228ba9e..07d04fb2f9 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2105,6 +2105,7 @@ typedef enum {
 
 struct _virDomainMemoryDef {
     virDomainMemoryAccess access;
+    virTristateBool discard;
 
     /* source */
     virBitmapPtr sourceNodes;
@@ -2267,6 +2268,8 @@ struct _virDomainMemtune {
     int source; /* enum virDomainMemorySource */
     int access; /* enum virDomainMemoryAccess */
     int allocation; /* enum virDomainMemoryAllocation */
+
+    virTristateBool discard;
 };
 
 typedef struct _virDomainPowerManagement virDomainPowerManagement;
diff --git a/src/conf/numa_conf.c b/src/conf/numa_conf.c
index 9307dd93d3..bf42946a99 100644
--- a/src/conf/numa_conf.c
+++ b/src/conf/numa_conf.c
@@ -77,6 +77,7 @@ struct _virDomainNuma {
         virBitmapPtr nodeset;   /* host memory nodes where this guest node resides */
         virDomainNumatuneMemMode mode;  /* memory mode selection */
         virDomainMemoryAccess memAccess; /* shared memory access configuration */
+        int discard; /* discard-data for memory-backend-file, virTristateBool */
 
         struct _virDomainNumaDistance {
             unsigned int value; /* locality value for node i->j or j->i */
@@ -947,6 +948,18 @@ virDomainNumaDefCPUParseXML(virDomainNumaPtr def,
             VIR_FREE(tmp);
         }
 
+        if ((tmp = virXMLPropString(nodes[i], "discard"))) {
+            if ((rc = virTristateBoolTypeFromString(tmp)) <= 0) {
+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                               _("Invalid 'discard' attribute value '%s'"),
+                               tmp);
+                goto cleanup;
+            }
+
+            def->mem_nodes[cur_cell].discard = rc;
+            VIR_FREE(tmp);
+        }
+
         /* Parse NUMA distances info */
         if (virDomainNumaDefNodeDistanceParseXML(def, ctxt, cur_cell) < 0)
                 goto cleanup;
@@ -967,6 +980,7 @@ virDomainNumaDefCPUFormatXML(virBufferPtr buf,
                              virDomainNumaPtr def)
 {
     virDomainMemoryAccess memAccess;
+    int discard;
     char *cpustr;
     size_t ncells = virDomainNumaGetNodeCount(def);
     size_t i;
@@ -980,6 +994,7 @@ virDomainNumaDefCPUFormatXML(virBufferPtr buf,
         int ndistances;
 
         memAccess = virDomainNumaGetNodeMemoryAccessMode(def, i);
+        discard = virDomainNumaGetNodeDiscard(def, i);
 
         if (!(cpustr = virBitmapFormat(virDomainNumaGetNodeCpumask(def, i))))
             return -1;
@@ -994,6 +1009,10 @@ virDomainNumaDefCPUFormatXML(virBufferPtr buf,
             virBufferAsprintf(buf, " memAccess='%s'",
                               virDomainMemoryAccessTypeToString(memAccess));
 
+        if (discard)
+            virBufferAsprintf(buf, " discard='%s'",
+                              virTristateBoolTypeToString(discard));
+
         ndistances = def->mem_nodes[i].ndistances;
         if (ndistances == 0) {
             virBufferAddLit(buf, "/>\n");
@@ -1304,6 +1323,14 @@ virDomainNumaGetNodeMemoryAccessMode(virDomainNumaPtr numa,
 }
 
 
+virTristateBool
+virDomainNumaGetNodeDiscard(virDomainNumaPtr numa,
+                            size_t node)
+{
+    return numa->mem_nodes[node].discard;
+}
+
+
 unsigned long long
 virDomainNumaGetNodeMemorySize(virDomainNumaPtr numa,
                                size_t node)
diff --git a/src/conf/numa_conf.h b/src/conf/numa_conf.h
index 7947fdb219..85269be565 100644
--- a/src/conf/numa_conf.h
+++ b/src/conf/numa_conf.h
@@ -102,6 +102,9 @@ virBitmapPtr virDomainNumaGetNodeCpumask(virDomainNumaPtr numa,
 virDomainMemoryAccess virDomainNumaGetNodeMemoryAccessMode(virDomainNumaPtr numa,
                                                       size_t node)
     ATTRIBUTE_NONNULL(1);
+virTristateBool virDomainNumaGetNodeDiscard(virDomainNumaPtr numa,
+                                            size_t node)
+    ATTRIBUTE_NONNULL(1);
 unsigned long long virDomainNumaGetNodeMemorySize(virDomainNumaPtr numa,
                                                   size_t node)
     ATTRIBUTE_NONNULL(1);
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 5fea1bca41..d28a751ebd 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -750,6 +750,7 @@ virDomainNumaGetMaxCPUID;
 virDomainNumaGetMemorySize;
 virDomainNumaGetNodeCount;
 virDomainNumaGetNodeCpumask;
+virDomainNumaGetNodeDiscard;
 virDomainNumaGetNodeDistance;
 virDomainNumaGetNodeMemoryAccessMode;
 virDomainNumaGetNodeMemorySize;
diff --git a/tests/qemuxml2argvdata/hugepages-pages.xml b/tests/qemuxml2argvdata/hugepages-pages.xml
index f9270782d4..cba83e754c 100644
--- a/tests/qemuxml2argvdata/hugepages-pages.xml
+++ b/tests/qemuxml2argvdata/hugepages-pages.xml
@@ -8,6 +8,7 @@
       <page size='2048' unit='KiB' nodeset='1'/>
       <page size='1048576' unit='KiB' nodeset='0,2-3'/>
     </hugepages>
+    <discard/>
   </memoryBacking>
   <vcpu placement='static'>4</vcpu>
   <numatune>
@@ -21,7 +22,7 @@
   <cpu>
     <numa>
       <cell id='0' cpus='0' memory='1048576' unit='KiB'/>
-      <cell id='1' cpus='1' memory='1048576' unit='KiB'/>
+      <cell id='1' cpus='1' memory='1048576' unit='KiB' discard='no'/>
       <cell id='2' cpus='2' memory='1048576' unit='KiB'/>
       <cell id='3' cpus='3' memory='1048576' unit='KiB'/>
     </numa>
diff --git a/tests/qemuxml2argvdata/hugepages-pages3.xml b/tests/qemuxml2argvdata/hugepages-pages3.xml
index 3d3b3f3cc3..147acc4c95 100644
--- a/tests/qemuxml2argvdata/hugepages-pages3.xml
+++ b/tests/qemuxml2argvdata/hugepages-pages3.xml
@@ -15,8 +15,8 @@
   </os>
   <cpu>
     <numa>
-      <cell id='0' cpus='0' memory='262144' unit='KiB'/>
-      <cell id='1' cpus='1' memory='786432' unit='KiB'/>
+      <cell id='0' cpus='0' memory='262144' unit='KiB' discard='no'/>
+      <cell id='1' cpus='1' memory='786432' unit='KiB' discard='yes'/>
     </numa>
   </cpu>
   <clock offset='utc'/>
diff --git a/tests/qemuxml2argvdata/hugepages-pages7.xml b/tests/qemuxml2argvdata/hugepages-pages7.xml
index d75cf5afa3..28c72f85a7 100644
--- a/tests/qemuxml2argvdata/hugepages-pages7.xml
+++ b/tests/qemuxml2argvdata/hugepages-pages7.xml
@@ -43,7 +43,7 @@
     <memballoon model='virtio'>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
     </memballoon>
-    <memory model='dimm'>
+    <memory model='dimm' discard='no'>
       <source>
         <nodemask>1-3</nodemask>
         <pagesize unit='KiB'>1048576</pagesize>
@@ -54,7 +54,7 @@
       </target>
       <address type='dimm' slot='0'/>
     </memory>
-    <memory model='dimm' access='private'>
+    <memory model='dimm' access='private' discard='yes'>
       <target>
         <size unit='KiB'>524287</size>
         <node>0</node>
diff --git a/tests/qemuxml2xmloutdata/hugepages-pages.xml b/tests/qemuxml2xmloutdata/hugepages-pages.xml
index 498610a217..292454588e 100644
--- a/tests/qemuxml2xmloutdata/hugepages-pages.xml
+++ b/tests/qemuxml2xmloutdata/hugepages-pages.xml
@@ -8,6 +8,7 @@
       <page size='2048' unit='KiB' nodeset='1'/>
       <page size='1048576' unit='KiB' nodeset='0,2-3'/>
     </hugepages>
+    <discard/>
   </memoryBacking>
   <vcpu placement='static'>4</vcpu>
   <numatune>
@@ -21,7 +22,7 @@
   <cpu>
     <numa>
       <cell id='0' cpus='0' memory='1048576' unit='KiB'/>
-      <cell id='1' cpus='1' memory='1048576' unit='KiB'/>
+      <cell id='1' cpus='1' memory='1048576' unit='KiB' discard='no'/>
       <cell id='2' cpus='2' memory='1048576' unit='KiB'/>
       <cell id='3' cpus='3' memory='1048576' unit='KiB'/>
     </numa>
diff --git a/tests/qemuxml2xmloutdata/hugepages-pages3.xml b/tests/qemuxml2xmloutdata/hugepages-pages3.xml
index be21c3eddd..90e6efa5ea 100644
--- a/tests/qemuxml2xmloutdata/hugepages-pages3.xml
+++ b/tests/qemuxml2xmloutdata/hugepages-pages3.xml
@@ -15,8 +15,8 @@
   </os>
   <cpu>
     <numa>
-      <cell id='0' cpus='0' memory='262144' unit='KiB'/>
-      <cell id='1' cpus='1' memory='786432' unit='KiB'/>
+      <cell id='0' cpus='0' memory='262144' unit='KiB' discard='no'/>
+      <cell id='1' cpus='1' memory='786432' unit='KiB' discard='yes'/>
     </numa>
   </cpu>
   <clock offset='utc'/>
-- 
2.16.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v5 6/7] conf: Introduce memoryBacking/discard
Posted by Ján Tomko, 1 week ago
On Fri, May 11, 2018 at 05:09:17PM +0200, Michal Privoznik wrote:
>QEMU has possibility to call madvise(.., MADV_REMOVE) in some
>cases. Expose this feature to users by new element/attribute
>discard.
>
>Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
>---
> docs/formatdomain.html.in                     | 34 +++++++++++++++++++++++--
> docs/schemas/cputypes.rng                     |  5 ++++
> docs/schemas/domaincommon.rng                 | 10 ++++++++
> src/conf/domain_conf.c                        | 36 ++++++++++++++++++++++++++-
> src/conf/domain_conf.h                        |  3 +++
> src/conf/numa_conf.c                          | 27 ++++++++++++++++++++
> src/conf/numa_conf.h                          |  3 +++
> src/libvirt_private.syms                      |  1 +
> tests/qemuxml2argvdata/hugepages-pages.xml    |  3 ++-
> tests/qemuxml2argvdata/hugepages-pages3.xml   |  4 +--
> tests/qemuxml2argvdata/hugepages-pages7.xml   |  4 +--
> tests/qemuxml2xmloutdata/hugepages-pages.xml  |  3 ++-
> tests/qemuxml2xmloutdata/hugepages-pages3.xml |  4 +--
> 13 files changed, 126 insertions(+), 11 deletions(-)
>
>diff --git a/src/conf/numa_conf.c b/src/conf/numa_conf.c
>index 9307dd93d3..bf42946a99 100644
>--- a/src/conf/numa_conf.c
>+++ b/src/conf/numa_conf.c
>@@ -77,6 +77,7 @@ struct _virDomainNuma {
>         virBitmapPtr nodeset;   /* host memory nodes where this guest node resides */
>         virDomainNumatuneMemMode mode;  /* memory mode selection */
>         virDomainMemoryAccess memAccess; /* shared memory access configuration */
>+        int discard; /* discard-data for memory-backend-file, virTristateBool */

s/int/virTristateBool/

>
>         struct _virDomainNumaDistance {
>             unsigned int value; /* locality value for node i->j or j->i */
>@@ -967,6 +980,7 @@ virDomainNumaDefCPUFormatXML(virBufferPtr buf,
>                              virDomainNumaPtr def)
> {
>     virDomainMemoryAccess memAccess;
>+    int discard;

here too.

>     char *cpustr;
>     size_t ncells = virDomainNumaGetNodeCount(def);
>     size_t i;

Reviewed-by: J�n Tomko <jtomko@redhat.com>

Jano
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v5 7/7] qemu: Implement memoryBacking/discard
Posted by Michal Privoznik, 1 week ago
https://bugzilla.redhat.com/show_bug.cgi?id=1480668

QEMU has this new feature memory-backend-file.discard-data=yes
which is a nifty optimization. Basically, when qemu is quitting
or on memory hotplug it calls munmap() and close() on the file
that is backing the memory. However, this does not mean kernel
won't stop touching that part of memory. It still might. With
this feature enabled we tell kernel: "we don't need this memory
nor data stored in it". This makes kernel drop the memory
immediately without trying to sync memory with the mapped file.

Unfortunately, this cannot be turned on by default because we
can't be sure when users really don't care about what happens to
data after qemu dies. So it has to be opt-in. As usual, there are
three places where one can configure memory attributes. This
patch adds the feature to all of them.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
---
 src/qemu/qemu_command.c                      | 27 ++++++++++++++++++++++++---
 tests/qemuxml2argvdata/hugepages-pages.args  | 12 ++++++------
 tests/qemuxml2argvdata/hugepages-pages3.args |  3 ++-
 tests/qemuxml2argvdata/hugepages-pages7.args |  3 ++-
 tests/qemuxml2argvtest.c                     |  9 ++++++---
 5 files changed, 40 insertions(+), 14 deletions(-)

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 81a9811d14..11ad77f145 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -3029,6 +3029,7 @@ qemuBuildMemoryBackendStr(virJSONValuePtr *backendProps,
     unsigned long long pagesize = mem->pagesize;
     bool needHugepage = !!pagesize;
     bool useHugepage = !!pagesize;
+    int discard = mem->discard;
 
     /* The difference between @needHugepage and @useHugepage is that the latter
      * is true whenever huge page is defined for the current memory cell.
@@ -3039,8 +3040,7 @@ qemuBuildMemoryBackendStr(virJSONValuePtr *backendProps,
     *backendProps = NULL;
     *backendType = NULL;
 
-    if (memAccess == VIR_DOMAIN_MEMORY_ACCESS_DEFAULT &&
-        mem->targetNode >= 0) {
+    if (mem->targetNode >= 0) {
         /* memory devices could provide a invalid guest node */
         if (mem->targetNode >= virDomainNumaGetNodeCount(def->numa)) {
             virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
@@ -3050,12 +3050,19 @@ qemuBuildMemoryBackendStr(virJSONValuePtr *backendProps,
             return -1;
         }
 
-        memAccess = virDomainNumaGetNodeMemoryAccessMode(def->numa, mem->targetNode);
+        if (memAccess == VIR_DOMAIN_MEMORY_ACCESS_DEFAULT)
+            memAccess = virDomainNumaGetNodeMemoryAccessMode(def->numa, mem->targetNode);
+
+        if (discard == VIR_TRISTATE_BOOL_ABSENT)
+            discard = virDomainNumaGetNodeDiscard(def->numa, mem->targetNode);
     }
 
     if (memAccess == VIR_DOMAIN_MEMORY_ACCESS_DEFAULT)
         memAccess = def->mem.access;
 
+    if (discard == VIR_TRISTATE_BOOL_ABSENT)
+        discard = def->mem.discard;
+
     if (virDomainNumatuneGetMode(def->numa, mem->targetNode, &mode) < 0 &&
         virDomainNumatuneGetMode(def->numa, -1, &mode) < 0)
         mode = VIR_DOMAIN_NUMATUNE_MEM_STRICT;
@@ -3143,6 +3150,20 @@ qemuBuildMemoryBackendStr(virJSONValuePtr *backendProps,
                                   NULL) < 0)
             goto cleanup;
 
+        if (!mem->nvdimmPath &&
+            discard == VIR_TRISTATE_BOOL_YES) {
+            if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD)) {
+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                               _("this QEMU doesn't support memory discard"));
+                goto cleanup;
+            }
+
+            if (virJSONValueObjectAdd(props,
+                                      "B:discard-data", true,
+                                      NULL) < 0)
+                goto cleanup;
+        }
+
         switch (memAccess) {
         case VIR_DOMAIN_MEMORY_ACCESS_SHARED:
             if (virJSONValueObjectAdd(props, "b:share", true, NULL) < 0)
diff --git a/tests/qemuxml2argvdata/hugepages-pages.args b/tests/qemuxml2argvdata/hugepages-pages.args
index 7ece0272a0..b52cd581d5 100644
--- a/tests/qemuxml2argvdata/hugepages-pages.args
+++ b/tests/qemuxml2argvdata/hugepages-pages.args
@@ -11,20 +11,20 @@ QEMU_AUDIO_DRV=none \
 -m 4096 \
 -smp 4,sockets=4,cores=1,threads=1 \
 -object memory-backend-file,id=ram-node0,prealloc=yes,\
-mem-path=/dev/hugepages1G/libvirt/qemu/-1-QEMUGuest1,size=1073741824,\
-host-nodes=0-3,policy=bind \
+mem-path=/dev/hugepages1G/libvirt/qemu/-1-QEMUGuest1,discard-data=yes,\
+size=1073741824,host-nodes=0-3,policy=bind \
 -numa node,nodeid=0,cpus=0,memdev=ram-node0 \
 -object memory-backend-file,id=ram-node1,prealloc=yes,\
 mem-path=/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1,size=1073741824,\
 host-nodes=0-3,policy=bind \
 -numa node,nodeid=1,cpus=1,memdev=ram-node1 \
 -object memory-backend-file,id=ram-node2,prealloc=yes,\
-mem-path=/dev/hugepages1G/libvirt/qemu/-1-QEMUGuest1,size=1073741824,\
-host-nodes=0-3,policy=bind \
+mem-path=/dev/hugepages1G/libvirt/qemu/-1-QEMUGuest1,discard-data=yes,\
+size=1073741824,host-nodes=0-3,policy=bind \
 -numa node,nodeid=2,cpus=2,memdev=ram-node2 \
 -object memory-backend-file,id=ram-node3,prealloc=yes,\
-mem-path=/dev/hugepages1G/libvirt/qemu/-1-QEMUGuest1,size=1073741824,\
-host-nodes=3,policy=bind \
+mem-path=/dev/hugepages1G/libvirt/qemu/-1-QEMUGuest1,discard-data=yes,\
+size=1073741824,host-nodes=3,policy=bind \
 -numa node,nodeid=3,cpus=3,memdev=ram-node3 \
 -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
 -display none \
diff --git a/tests/qemuxml2argvdata/hugepages-pages3.args b/tests/qemuxml2argvdata/hugepages-pages3.args
index 2fc701ca22..d55265cdd8 100644
--- a/tests/qemuxml2argvdata/hugepages-pages3.args
+++ b/tests/qemuxml2argvdata/hugepages-pages3.args
@@ -13,7 +13,8 @@ QEMU_AUDIO_DRV=none \
 -object memory-backend-ram,id=ram-node0,size=268435456 \
 -numa node,nodeid=0,cpus=0,memdev=ram-node0 \
 -object memory-backend-file,id=ram-node1,prealloc=yes,\
-mem-path=/dev/hugepages1G/libvirt/qemu/-1-SomeDummyHugepagesGu,size=805306368 \
+mem-path=/dev/hugepages1G/libvirt/qemu/-1-SomeDummyHugepagesGu,\
+discard-data=yes,size=805306368 \
 -numa node,nodeid=1,cpus=1,memdev=ram-node1 \
 -uuid ef1bdff4-27f3-4e85-a807-5fb4d58463cc \
 -display none \
diff --git a/tests/qemuxml2argvdata/hugepages-pages7.args b/tests/qemuxml2argvdata/hugepages-pages7.args
index 1cb598d692..02a98026eb 100644
--- a/tests/qemuxml2argvdata/hugepages-pages7.args
+++ b/tests/qemuxml2argvdata/hugepages-pages7.args
@@ -18,7 +18,8 @@ mem-path=/dev/hugepages1G/libvirt/qemu/-1-fedora,size=1073741824,\
 host-nodes=1-3,policy=bind \
 -device pc-dimm,node=0,memdev=memdimm0,id=dimm0,slot=0 \
 -object memory-backend-file,id=memdimm1,prealloc=yes,\
-mem-path=/dev/hugepages2M/libvirt/qemu/-1-fedora,share=no,size=536870912 \
+mem-path=/dev/hugepages2M/libvirt/qemu/-1-fedora,discard-data=yes,share=no,\
+size=536870912 \
 -device pc-dimm,node=0,memdev=memdimm1,id=dimm1,slot=1 \
 -uuid 63840878-0deb-4095-97e6-fc444d9bc9fa \
 -display none \
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 756ca7a77f..d4d64b0d21 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -919,11 +919,13 @@ mymain(void)
             QEMU_CAPS_OBJECT_MEMORY_FILE);
     DO_TEST("hugepages-pages",
             QEMU_CAPS_OBJECT_MEMORY_RAM,
-            QEMU_CAPS_OBJECT_MEMORY_FILE);
+            QEMU_CAPS_OBJECT_MEMORY_FILE,
+            QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
     DO_TEST("hugepages-pages2", QEMU_CAPS_OBJECT_MEMORY_RAM,
             QEMU_CAPS_OBJECT_MEMORY_FILE);
     DO_TEST("hugepages-pages3", QEMU_CAPS_OBJECT_MEMORY_RAM,
-            QEMU_CAPS_OBJECT_MEMORY_FILE);
+            QEMU_CAPS_OBJECT_MEMORY_FILE,
+            QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
     DO_TEST("hugepages-shared",
             QEMU_CAPS_OBJECT_MEMORY_RAM,
             QEMU_CAPS_OBJECT_MEMORY_FILE);
@@ -933,7 +935,8 @@ mymain(void)
     DO_TEST("hugepages-pages5", NONE);
     DO_TEST("hugepages-pages6", NONE);
     DO_TEST("hugepages-pages7",
-            QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_OBJECT_MEMORY_FILE);
+            QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_OBJECT_MEMORY_FILE,
+            QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
     DO_TEST("hugepages-memaccess", QEMU_CAPS_OBJECT_MEMORY_FILE,
             QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_DEVICE_PC_DIMM,
             QEMU_CAPS_NUMA);
-- 
2.16.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v5 7/7] qemu: Implement memoryBacking/discard
Posted by Ján Tomko, 1 week ago
On Fri, May 11, 2018 at 05:09:18PM +0200, Michal Privoznik wrote:
>https://bugzilla.redhat.com/show_bug.cgi?id=1480668
>
>QEMU has this new feature memory-backend-file.discard-data=yes
>which is a nifty optimization. Basically, when qemu is quitting
>or on memory hotplug it calls munmap() and close() on the file
>that is backing the memory. However, this does not mean kernel
>won't stop touching that part of memory. It still might. With
>this feature enabled we tell kernel: "we don't need this memory
>nor data stored in it". This makes kernel drop the memory
>immediately without trying to sync memory with the mapped file.
>
>Unfortunately, this cannot be turned on by default because we
>can't be sure when users really don't care about what happens to
>data after qemu dies. So it has to be opt-in. As usual, there are
>three places where one can configure memory attributes. This
>patch adds the feature to all of them.
>
>Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
>---
> src/qemu/qemu_command.c                      | 27 ++++++++++++++++++++++++---
> tests/qemuxml2argvdata/hugepages-pages.args  | 12 ++++++------
> tests/qemuxml2argvdata/hugepages-pages3.args |  3 ++-
> tests/qemuxml2argvdata/hugepages-pages7.args |  3 ++-
> tests/qemuxml2argvtest.c                     |  9 ++++++---
> 5 files changed, 40 insertions(+), 14 deletions(-)
>

Reviewed-by: J�n Tomko <jtomko@redhat.com>

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