[PATCH 12/32] cpu: Introduce virCPUCheckModel

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



A helper for checking whether a given CPU model is defined in the CPU
map.

Signed-off-by: Jiri Denemark <jdenemar@xxxxxxxxxx>
---
 src/cpu/cpu.c            | 25 +++++++++++++++++++++++++
 src/cpu/cpu.h            |  8 ++++++++
 src/cpu/cpu_x86.c        | 23 +++++++++++++++++++++++
 src/libvirt_private.syms |  1 +
 4 files changed, 57 insertions(+)

diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c
index 2b0d641e78..a83904f08e 100644
--- a/src/cpu/cpu.c
+++ b/src/cpu/cpu.c
@@ -1367,3 +1367,28 @@ virCPUArchIsSupported(virArch arch)
 
     return false;
 }
+
+
+/**
+ * virCPUCheckModel:
+ * @arch: CPU architecture
+ * @name: CPU model name
+ *
+ * Checks whether the CPU model exists in the CPU map.
+ *
+ * Returns true if @name is found in the CPU map, false otherwise.
+ */
+bool
+virCPUCheckModel(virArch arch,
+                 const char *name)
+{
+    struct cpuArchDriver *driver;
+
+    if (!(driver = cpuGetSubDriver(arch)))
+        return false;
+
+    if (!driver->checkModel)
+        return false;
+
+    return driver->checkModel(name);
+}
diff --git a/src/cpu/cpu.h b/src/cpu/cpu.h
index ff68c5da2d..19edae6880 100644
--- a/src/cpu/cpu.h
+++ b/src/cpu/cpu.h
@@ -140,6 +140,9 @@ typedef int
 (*virCPUArchGetCheckMode)(const char *modelName,
                           bool *compat);
 
+typedef bool
+(*virCPUArchCheckModel)(const char *name);
+
 struct cpuArchDriver {
     const char *name;
     const virArch *arch;
@@ -168,6 +171,7 @@ struct cpuArchDriver {
     virCPUArchDataIsIdentical dataIsIdentical;
     virCPUArchDataGetHost dataGetHost;
     virCPUArchGetCheckMode getCheckMode;
+    virCPUArchCheckModel checkModel;
 };
 
 
@@ -327,6 +331,10 @@ virCPUGetCheckMode(virArch arch,
 bool
 virCPUArchIsSupported(virArch arch);
 
+bool
+virCPUCheckModel(virArch arch,
+                 const char *name);
+
 /* virCPUDataFormat and virCPUDataParse are implemented for unit tests only and
  * have no real-life usage
  */
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
index 7cfab8278d..a86e29064a 100644
--- a/src/cpu/cpu_x86.c
+++ b/src/cpu/cpu_x86.c
@@ -3653,6 +3653,28 @@ virCPUx86GetCheckMode(const char *modelName,
 }
 
 
+/**
+ * virCPUx86CheckModel:
+ * @name: CPU model name
+ *
+ * Checks whether the CPU model exists in the CPU map.
+ *
+ * Returns true if @name is found in the CPU map, false otherwise.
+ */
+static bool
+virCPUx86CheckModel(const char *name)
+{
+    virCPUx86Map *map;
+    virCPUx86Model *model;
+
+    if (!(map = virCPUx86GetMap()))
+        return false;
+
+    model = x86ModelFind(map, name);
+    return !!model;
+}
+
+
 struct cpuArchDriver cpuDriverX86 = {
     .name = "x86",
     .arch = archs,
@@ -3686,4 +3708,5 @@ struct cpuArchDriver cpuDriverX86 = {
     .dataGetHost = virCPUx86DataGetHost,
 #endif
     .getCheckMode = virCPUx86GetCheckMode,
+    .checkModel = virCPUx86CheckModel,
 };
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 5b9b44ef96..9b863b613e 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1527,6 +1527,7 @@ virCPUArchIsSupported;
 virCPUBaseline;
 virCPUCheckFeature;
 virCPUCheckForbiddenFeatures;
+virCPUCheckModel;
 virCPUCompare;
 virCPUCompareUnusable;
 virCPUCompareXML;
-- 
2.47.0




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux