]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Translate feature names from query-cpu-model-expansion
authorJiri Denemark <jdenemar@redhat.com>
Mon, 17 Jun 2019 11:54:53 +0000 (13:54 +0200)
committerJiri Denemark <jdenemar@redhat.com>
Wed, 19 Jun 2019 22:22:39 +0000 (00:22 +0200)
By default query-cpu-model-expansion only reports canonical names of all
CPU features. We do some magic and call the command twice to get all
possible spellings of the features, but being able to consume canonical
names will allow us to drop this magic.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_capabilities.c
src/qemu/qemu_capspriv.h
tests/cputest.c

index c742838383a7d70b080d0e8ed045e15ddbf21b68..ada2bae18f2e651ee3cabbb5bd0a545c7a2c04ed 100644 (file)
@@ -2961,11 +2961,12 @@ virQEMUCapsInitCPUModelS390(virQEMUCapsPtr qemuCaps,
     for (i = 0; i < modelInfo->nprops; i++) {
         virCPUFeatureDefPtr feature = cpu->features + cpu->nfeatures;
         qemuMonitorCPUPropertyPtr prop = modelInfo->props + i;
+        const char *name = virQEMUCapsCPUFeatureFromQEMU(qemuCaps, prop->name);
 
         if (prop->type != QEMU_MONITOR_CPU_PROPERTY_BOOLEAN)
             continue;
 
-        if (VIR_STRDUP(feature->name, prop->name) < 0)
+        if (VIR_STRDUP(feature->name, name) < 0)
             return -1;
 
         if (!prop->value.boolean ||
@@ -2981,7 +2982,8 @@ virQEMUCapsInitCPUModelS390(virQEMUCapsPtr qemuCaps,
 
 
 virCPUDataPtr
-virQEMUCapsGetCPUModelX86Data(qemuMonitorCPUModelInfoPtr model,
+virQEMUCapsGetCPUModelX86Data(virQEMUCapsPtr qemuCaps,
+                              qemuMonitorCPUModelInfoPtr model,
                               bool migratable)
 {
     unsigned long long sigFamily = 0;
@@ -2996,6 +2998,7 @@ virQEMUCapsGetCPUModelX86Data(qemuMonitorCPUModelInfoPtr model,
 
     for (i = 0; i < model->nprops; i++) {
         qemuMonitorCPUPropertyPtr prop = model->props + i;
+        const char *name = virQEMUCapsCPUFeatureFromQEMU(qemuCaps, prop->name);
 
         switch (prop->type) {
         case QEMU_MONITOR_CPU_PROPERTY_BOOLEAN:
@@ -3003,23 +3006,23 @@ virQEMUCapsGetCPUModelX86Data(qemuMonitorCPUModelInfoPtr model,
                 (migratable && prop->migratable == VIR_TRISTATE_BOOL_NO))
                 continue;
 
-            if (virCPUx86DataAddFeature(data, prop->name) < 0)
+            if (virCPUx86DataAddFeature(data, name) < 0)
                 goto cleanup;
 
             break;
 
         case QEMU_MONITOR_CPU_PROPERTY_STRING:
-            if (STREQ(prop->name, "vendor") &&
+            if (STREQ(name, "vendor") &&
                 virCPUx86DataSetVendor(data, prop->value.string) < 0)
                 goto cleanup;
             break;
 
         case QEMU_MONITOR_CPU_PROPERTY_NUMBER:
-            if (STREQ(prop->name, "family"))
+            if (STREQ(name, "family"))
                 sigFamily = prop->value.number;
-            else if (STREQ(prop->name, "model"))
+            else if (STREQ(name, "model"))
                 sigModel = prop->value.number;
-            else if (STREQ(prop->name, "stepping"))
+            else if (STREQ(name, "stepping"))
                 sigStepping = prop->value.number;
             break;
 
@@ -3057,7 +3060,7 @@ virQEMUCapsInitCPUModelX86(virQEMUCapsPtr qemuCaps,
     if (!model)
         return 1;
 
-    if (!(data = virQEMUCapsGetCPUModelX86Data(model, migratable)))
+    if (!(data = virQEMUCapsGetCPUModelX86Data(qemuCaps, model, migratable)))
         goto cleanup;
 
     if (cpuDecode(cpu, data, virQEMUCapsGetCPUDefinitions(qemuCaps, type)) < 0)
index ea847494cf43972e69e7bc290b0f8287bdc39be5..6b54e94fd341817ce1838cfdb373d78beaf609c0 100644 (file)
@@ -77,7 +77,8 @@ virQEMUCapsSetCPUModelInfo(virQEMUCapsPtr qemuCaps,
                            qemuMonitorCPUModelInfoPtr modelInfo);
 
 virCPUDataPtr
-virQEMUCapsGetCPUModelX86Data(qemuMonitorCPUModelInfoPtr model,
+virQEMUCapsGetCPUModelX86Data(virQEMUCapsPtr qemuCaps,
+                              qemuMonitorCPUModelInfoPtr model,
                               bool migratable);
 
 virCPUDefPtr
index e1767399650139dcd99ee91f7850595efe735a5a..6e28e05756aca8045bb6ed618e42741be7724047 100644 (file)
@@ -935,7 +935,7 @@ cpuTestJSONSignature(const void *arg)
         goto cleanup;
 
     modelInfo = virQEMUCapsGetCPUModelInfo(qemuCaps, VIR_DOMAIN_VIRT_KVM);
-    if (!(hostData = virQEMUCapsGetCPUModelX86Data(modelInfo, false)))
+    if (!(hostData = virQEMUCapsGetCPUModelX86Data(qemuCaps, modelInfo, false)))
         goto cleanup;
 
     ret = cpuTestCompareSignature(data, hostData);