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