forked from rpms/libvirt
125 lines
4.0 KiB
Diff
125 lines
4.0 KiB
Diff
From cb2374042f3e998b90e6ea025dadfae9333b49cd Mon Sep 17 00:00:00 2001
|
|
Message-Id: <cb2374042f3e998b90e6ea025dadfae9333b49cd@dist-git>
|
|
From: Jiri Denemark <jdenemar@redhat.com>
|
|
Date: Fri, 21 Jun 2019 09:25:51 +0200
|
|
Subject: [PATCH] qemu: Add APIs for translating CPU features
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
So far we always used libvirt's name of each CPU feature relying on
|
|
backward compatible aliases in QEMU. The new translation table can be
|
|
used whenever QEMU mandates or prefers canonical feature names.
|
|
|
|
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
|
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
|
(cherry picked from commit 61ee757e2002507d711c195628619b9eff38b57a)
|
|
|
|
https://bugzilla.redhat.com/show_bug.cgi?id=1697627
|
|
|
|
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
|
Message-Id: <5b080656d143733a77780affc6dd0d322216d6e7.1561068591.git.jdenemar@redhat.com>
|
|
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
|
---
|
|
src/qemu/qemu_capabilities.c | 64 ++++++++++++++++++++++++++++++++++++
|
|
src/qemu/qemu_capabilities.h | 8 +++++
|
|
2 files changed, 72 insertions(+)
|
|
|
|
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
|
|
index 851cb73cfc..d2a2f7418a 100644
|
|
--- a/src/qemu/qemu_capabilities.c
|
|
+++ b/src/qemu/qemu_capabilities.c
|
|
@@ -2755,6 +2755,70 @@ virQEMUCapsCPUFilterFeatures(const char *name,
|
|
}
|
|
|
|
|
|
+typedef struct _virQEMUCapsCPUFeatureTranslationTable virQEMUCapsCPUFeatureTranslationTable;
|
|
+typedef virQEMUCapsCPUFeatureTranslationTable *virQEMUCapsCPUFeatureTranslationTablePtr;
|
|
+struct _virQEMUCapsCPUFeatureTranslationTable {
|
|
+ const char *libvirt;
|
|
+ const char *qemu;
|
|
+};
|
|
+
|
|
+virQEMUCapsCPUFeatureTranslationTable virQEMUCapsCPUFeaturesX86[] = {
|
|
+ {"cmp_legacy", "cmp-legacy"},
|
|
+ {"ds_cpl", "ds-cpl"},
|
|
+ {"fxsr_opt", "fxsr-opt"},
|
|
+ {"kvm_pv_eoi", "kvm-pv-eoi"},
|
|
+ {"kvm_pv_unhalt", "kvm-pv-unhalt"},
|
|
+ {"lahf_lm", "lahf-lm"},
|
|
+ {"nodeid_msr", "nodeid-msr"},
|
|
+ {"pclmuldq", "pclmulqdq"},
|
|
+ {"perfctr_core", "perfctr-core"},
|
|
+ {"perfctr_nb", "perfctr-nb"},
|
|
+ {"tsc_adjust", "tsc-adjust"},
|
|
+ {NULL, NULL}
|
|
+};
|
|
+
|
|
+
|
|
+static const char *
|
|
+virQEMUCapsCPUFeatureTranslate(virQEMUCapsPtr qemuCaps,
|
|
+ const char *feature,
|
|
+ bool reversed)
|
|
+{
|
|
+ virQEMUCapsCPUFeatureTranslationTablePtr table = NULL;
|
|
+ virQEMUCapsCPUFeatureTranslationTablePtr entry;
|
|
+
|
|
+ if (ARCH_IS_X86(qemuCaps->arch))
|
|
+ table = virQEMUCapsCPUFeaturesX86;
|
|
+
|
|
+ if (!table || !feature)
|
|
+ return feature;
|
|
+
|
|
+ for (entry = table; entry->libvirt; entry++) {
|
|
+ const char *key = reversed ? entry->qemu : entry->libvirt;
|
|
+
|
|
+ if (STREQ(feature, key))
|
|
+ return reversed ? entry->libvirt : entry->qemu;
|
|
+ }
|
|
+
|
|
+ return feature;
|
|
+}
|
|
+
|
|
+
|
|
+const char *
|
|
+virQEMUCapsCPUFeatureToQEMU(virQEMUCapsPtr qemuCaps,
|
|
+ const char *feature)
|
|
+{
|
|
+ return virQEMUCapsCPUFeatureTranslate(qemuCaps, feature, false);
|
|
+}
|
|
+
|
|
+
|
|
+const char *
|
|
+virQEMUCapsCPUFeatureFromQEMU(virQEMUCapsPtr qemuCaps,
|
|
+ const char *feature)
|
|
+{
|
|
+ return virQEMUCapsCPUFeatureTranslate(qemuCaps, feature, true);
|
|
+}
|
|
+
|
|
+
|
|
/**
|
|
* Returns 0 when host CPU model provided by QEMU was filled in qemuCaps,
|
|
* 1 when the caller should fall back to using virCapsPtr->host.cpu,
|
|
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
|
|
index bea4767f3c..8a27acd8a4 100644
|
|
--- a/src/qemu/qemu_capabilities.h
|
|
+++ b/src/qemu/qemu_capabilities.h
|
|
@@ -628,6 +628,14 @@ bool virQEMUCapsGuestIsNative(virArch host,
|
|
bool virQEMUCapsCPUFilterFeatures(const char *name,
|
|
void *opaque);
|
|
|
|
+const char *
|
|
+virQEMUCapsCPUFeatureToQEMU(virQEMUCapsPtr qemuCaps,
|
|
+ const char *feature);
|
|
+
|
|
+const char *
|
|
+virQEMUCapsCPUFeatureFromQEMU(virQEMUCapsPtr qemuCaps,
|
|
+ const char *feature);
|
|
+
|
|
virSEVCapabilityPtr
|
|
virQEMUCapsGetSEVCapabilities(virQEMUCapsPtr qemuCaps);
|
|
|
|
--
|
|
2.22.0
|
|
|