]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Pass machine type to virQEMUCapsIsCPUModeSupported
authorJiri Denemark <jdenemar@redhat.com>
Wed, 5 Feb 2020 14:51:09 +0000 (15:51 +0100)
committerJiri Denemark <jdenemar@redhat.com>
Fri, 7 Feb 2020 08:19:02 +0000 (09:19 +0100)
The usability of a specific CPU mode may depend on machine type, let's
prepare for this by passing it to virQEMUCapsIsCPUModeSupported.

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
src/qemu/qemu_domain.c
src/qemu/qemu_process.c

index dfe7d48550fb7d0d758d4f705560bb7500b208ea..162e49e2d4a5f9b22b8b0887ba4b90b89e3e1a20 100644 (file)
@@ -2279,7 +2279,8 @@ bool
 virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps,
                               virArch hostarch,
                               virDomainVirtType type,
-                              virCPUMode mode)
+                              virCPUMode mode,
+                              const char *machineType G_GNUC_UNUSED)
 {
     qemuMonitorCPUDefsPtr cpus;
 
@@ -5644,18 +5645,21 @@ virQEMUCapsFillDomainCPUCaps(virQEMUCapsPtr qemuCaps,
                              virDomainCapsPtr domCaps)
 {
     if (virQEMUCapsIsCPUModeSupported(qemuCaps, hostarch, domCaps->virttype,
-                                      VIR_CPU_MODE_HOST_PASSTHROUGH))
+                                      VIR_CPU_MODE_HOST_PASSTHROUGH,
+                                      domCaps->machine))
         domCaps->cpu.hostPassthrough = true;
 
     if (virQEMUCapsIsCPUModeSupported(qemuCaps, hostarch, domCaps->virttype,
-                                      VIR_CPU_MODE_HOST_MODEL)) {
+                                      VIR_CPU_MODE_HOST_MODEL,
+                                      domCaps->machine)) {
         virCPUDefPtr cpu = virQEMUCapsGetHostModel(qemuCaps, domCaps->virttype,
                                                    VIR_QEMU_CAPS_HOST_CPU_REPORTED);
         domCaps->cpu.hostModel = virCPUDefCopy(cpu);
     }
 
     if (virQEMUCapsIsCPUModeSupported(qemuCaps, hostarch, domCaps->virttype,
-                                      VIR_CPU_MODE_CUSTOM)) {
+                                      VIR_CPU_MODE_CUSTOM,
+                                      domCaps->machine)) {
         const char *blacklist[] = { "host", NULL };
         VIR_AUTOSTRINGLIST models = NULL;
 
index b97c11ee1d9c824fb97e9ad0c8f1737468d59d28..2473e64654d665156f1cd3ff3bf71d81131d292b 100644 (file)
@@ -629,7 +629,8 @@ bool virQEMUCapsIsVirtTypeSupported(virQEMUCapsPtr qemuCaps,
 bool virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps,
                                    virArch hostarch,
                                    virDomainVirtType type,
-                                   virCPUMode mode);
+                                   virCPUMode mode,
+                                   const char *machineType);
 const char *virQEMUCapsGetCanonicalMachine(virQEMUCapsPtr qemuCaps,
                                            virDomainVirtType virtType,
                                            const char *name);
index 851f750bd7928dc85612e6a57e7c41504d6300c1..1b4825a539cf54cb7c8a4d0687b30f927dc8a9c2 100644 (file)
@@ -4600,7 +4600,8 @@ qemuDomainDefSetDefaultCPU(virDomainDefPtr def,
     if (STREQ(model, "host")) {
         if (ARCH_IS_S390(def->os.arch) &&
             virQEMUCapsIsCPUModeSupported(qemuCaps, hostarch, def->virtType,
-                                          VIR_CPU_MODE_HOST_MODEL)) {
+                                          VIR_CPU_MODE_HOST_MODEL,
+                                          def->os.machine)) {
             def->cpu->mode = VIR_CPU_MODE_HOST_MODEL;
         } else {
             def->cpu->mode = VIR_CPU_MODE_HOST_PASSTHROUGH;
index ddcc763cfdcd38c178bd483ddf38b0e1d96928bf..e3df75d28168d61b8130daee41312b5b51dca7ba 100644 (file)
@@ -6022,7 +6022,7 @@ qemuProcessUpdateGuestCPU(virDomainDefPtr def,
     }
 
     if (!virQEMUCapsIsCPUModeSupported(qemuCaps, hostarch, def->virtType,
-                                       def->cpu->mode)) {
+                                       def->cpu->mode, def->os.machine)) {
         virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
                        _("CPU mode '%s' for %s %s domain on %s host is not "
                          "supported by hypervisor"),