]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
cpu: Introduce virCPUGetCanonicalModel
authorJiri Denemark <jdenemar@redhat.com>
Fri, 22 Nov 2024 18:00:26 +0000 (19:00 +0100)
committerJiri Denemark <jdenemar@redhat.com>
Tue, 26 Nov 2024 12:04:34 +0000 (13:04 +0100)
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
src/cpu/cpu.c
src/cpu/cpu.h
src/cpu/cpu_x86.c
src/libvirt_private.syms

index 2b0d641e7811ef4c9eba66512785af4c10dddaee..ef515744bab8378cf046b86eed094d224f174fbd 100644 (file)
@@ -1345,6 +1345,31 @@ virCPUGetCheckMode(virArch arch,
 }
 
 
+/** virCPUGetCanonicalModel:
+ *
+ * @arch: CPU architecture
+ * @model: CPU model to be checked
+ *
+ * Returns @model's canonical name if @model is an alias or NULL otherwise.
+ */
+const char *
+virCPUGetCanonicalModel(virArch arch,
+                        const char *model)
+{
+    struct cpuArchDriver *driver;
+
+    VIR_DEBUG("arch=%s model=%s", virArchToString(arch), model);
+
+    if (!(driver = cpuGetSubDriver(arch)))
+        return NULL;
+
+    if (!driver->getCanonicalModel)
+        return NULL;
+
+    return driver->getCanonicalModel(model);
+}
+
+
 /**
  * virCPUArchIsSupported:
  *
index ff68c5da2d7a1742440c0aa7894d9d990d79fe0e..fc6a812eaa6c8267069464f0eb91479e76f443ae 100644 (file)
@@ -140,6 +140,9 @@ typedef int
 (*virCPUArchGetCheckMode)(const char *modelName,
                           bool *compat);
 
+typedef const char *
+(*virCPUArchGetCanonicalModel)(const char *model);
+
 struct cpuArchDriver {
     const char *name;
     const virArch *arch;
@@ -168,6 +171,7 @@ struct cpuArchDriver {
     virCPUArchDataIsIdentical dataIsIdentical;
     virCPUArchDataGetHost dataGetHost;
     virCPUArchGetCheckMode getCheckMode;
+    virCPUArchGetCanonicalModel getCanonicalModel;
 };
 
 
@@ -324,6 +328,10 @@ virCPUGetCheckMode(virArch arch,
                    const virCPUDef *cpu,
                    bool *compat);
 
+const char *
+virCPUGetCanonicalModel(virArch arch,
+                        const char *model);
+
 bool
 virCPUArchIsSupported(virArch arch);
 
index ce3506be55878254f307b6a17acc8ffce654b536..13695802da02423bfe49b1fb932962857681063b 100644 (file)
@@ -3697,6 +3697,24 @@ virCPUx86GetCheckMode(const char *modelName,
 }
 
 
+static const char *
+virCPUx86GetCanonicalModel(const char *modelName)
+{
+    virCPUx86Map *map;
+    virCPUx86Model *model;
+
+    if (!(map = virCPUx86GetMap()))
+        return NULL;
+
+    model = x86ModelFind(map, modelName);
+
+    if (!model || !model->canonical)
+        return NULL;
+
+    return model->canonical->name;
+}
+
+
 struct cpuArchDriver cpuDriverX86 = {
     .name = "x86",
     .arch = archs,
@@ -3730,4 +3748,5 @@ struct cpuArchDriver cpuDriverX86 = {
     .dataGetHost = virCPUx86DataGetHost,
 #endif
     .getCheckMode = virCPUx86GetCheckMode,
+    .getCanonicalModel = virCPUx86GetCanonicalModel,
 };
index 5b9b44ef96c282b60bdef3e6e7babdb8c43e75af..2a9d3230e10fa14ecaa9f4154c17d0b61238d83e 100644 (file)
@@ -1543,6 +1543,7 @@ virCPUDataNewCopy;
 virCPUDataParse;
 virCPUDataParseNode;
 virCPUExpandFeatures;
+virCPUGetCanonicalModel;
 virCPUGetCheckMode;
 virCPUGetHost;
 virCPUGetHostIsSupported;