]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Introduce virQEMUCapsGetCPUBlockers
authorJiri Denemark <jdenemar@redhat.com>
Tue, 15 Oct 2024 16:18:01 +0000 (18:18 +0200)
committerJiri Denemark <jdenemar@redhat.com>
Wed, 23 Oct 2024 14:00:44 +0000 (16:00 +0200)
A function for accessing a list of features blocking CPU model
usability.

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

index e1e28e5cd1aaac3577696fc5c25e27e0b2edd729..b5fa738bd80cf7dc6410764d1ef9e800a7accfb8 100644 (file)
@@ -2507,6 +2507,44 @@ virQEMUCapsIsCPUUsable(virQEMUCaps *qemuCaps,
 }
 
 
+/**
+ * virQEMUCapsGetCPUBlockers:
+ * @qemuCaps: QEMU capabilities
+ * @type: virtualization type
+ * @cpu: CPU model
+ * @blockers: where to store the list of features
+ *
+ * Get a list of features that prevent @cpu from being usable. The pointer to
+ * the list will be stored in @blockers and the caller must not free it. The
+ * pointer is valid as long as there is an active reference to @qemuCaps.
+ *
+ * Returns 0 on success, -1 when @cpu is not found in @qemuCaps.
+ */
+int
+virQEMUCapsGetCPUBlockers(virQEMUCaps *qemuCaps,
+                          virDomainVirtType type,
+                          const char *cpu,
+                          char ***blockers)
+{
+    qemuMonitorCPUDefs *defs;
+    size_t i;
+
+    defs = virQEMUCapsGetAccel(qemuCaps, type)->cpuModels;
+
+    if (!defs)
+        return -1;
+
+    for (i = 0; i < defs->ncpus; i++) {
+        if (STREQ(defs->cpus[i].name, cpu)) {
+            *blockers = defs->cpus[i].blockers;
+            return 0;
+        }
+    }
+
+    return -1;
+}
+
+
 bool
 virQEMUCapsIsMachineDeprecated(virQEMUCaps *qemuCaps,
                                virDomainVirtType type,
index 284b07b64e397439b1249448b1360eba5450de55..54c7e30903ca082744fe79e723e5a147c538d46b 100644 (file)
@@ -795,6 +795,10 @@ bool virQEMUCapsIsCPUDeprecated(virQEMUCaps *qemuCaps,
 bool virQEMUCapsIsCPUUsable(virQEMUCaps *qemuCaps,
                             virDomainVirtType type,
                             virCPUDef *cpu);
+int virQEMUCapsGetCPUBlockers(virQEMUCaps *qemuCaps,
+                              virDomainVirtType type,
+                              const char *cpu,
+                              char ***blockers);
 bool virQEMUCapsIsMachineDeprecated(virQEMUCaps *qemuCaps,
                                     virDomainVirtType type,
                                     const char *machine);