From 895e7da3273a1a9de921f1fc8ad409df79d58809 Mon Sep 17 00:00:00 2001 From: Kashyap Chamarthy Date: Tue, 31 May 2016 17:50:51 +0200 Subject: [PATCH] libvirt: Skip CPU compatibility check for emulated guests Comparing host to guest CPU model for emulated guests () should not matter -- in this mode the CPU is fully emulated in software and no hardware acceleration, like KVM, is involved. So, skip the CPU compatibility check for the QEMU domain type, and retain it for KVM guests. Closes-Bug: #1588003 Co-Authored-By: Daniel P. Berrange Change-Id: I8b782678a6dfa7bcfc203381037e1df4475c3194 (cherry picked from commit afa31e67c3b7f8999da179b78a7051d70ca126bf) (cherry picked from commit 54448676db784bfc233d4e846eacd115d03d9f3f) --- nova/tests/unit/virt/libvirt/test_driver.py | 6 ++++++ nova/virt/libvirt/driver.py | 9 +++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/nova/tests/unit/virt/libvirt/test_driver.py b/nova/tests/unit/virt/libvirt/test_driver.py index 0870ade93084..47b53e7cfb39 100644 --- a/nova/tests/unit/virt/libvirt/test_driver.py +++ b/nova/tests/unit/virt/libvirt/test_driver.py @@ -5826,6 +5826,12 @@ class LibvirtConnTestCase(test.NoDBTestCase): ret = conn._compare_cpu(None, None) self.assertIsNone(ret) + def test_compare_cpu_virt_type_qemu(self): + self.flags(virt_type='qemu', group='libvirt') + conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False) + ret = conn._compare_cpu(None, None) + self.assertIsNone(ret) + @mock.patch.object(host.Host, 'compare_cpu') @mock.patch.object(nova.virt.libvirt, 'config') def test_compare_cpu_invalid_cpuinfo_raises(self, mock_vconfig, diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index 6c20e9d95a98..9337e9372c50 100644 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -5390,8 +5390,13 @@ class LibvirtDriver(driver.ComputeDriver): raise exception. """ - # NOTE(berendt): virConnectCompareCPU not working for Xen - if CONF.libvirt.virt_type not in ['qemu', 'kvm']: + # NOTE(kchamart): Comparing host to guest CPU model for emulated + # guests () should not matter -- in this + # mode (QEMU "TCG") the CPU is fully emulated in software and no + # hardware acceleration, like KVM, is involved. So, skip the CPU + # compatibility check for the QEMU domain type, and retain it for + # KVM guests. + if CONF.libvirt.virt_type not in ['kvm']: return if guest_cpu is None: