summaryrefslogtreecommitdiffstats
path: root/nova
diff options
context:
space:
mode:
authorYufang Zhang <yufang521247@gmail.com>2012-12-04 20:20:11 +0800
committerYufang Zhang <yufang521247@gmail.com>2012-12-10 16:58:42 +0800
commitd0e930bd9f1bddf6223635fdc463b2176cc39690 (patch)
tree87f71fc16780d39cf27917b1d9084d644658b390 /nova
parentca1a2566d33aad15de640bf60630330aceb0ef2c (diff)
libvirt: enable apic setting for Xen or KVM guest.
Bug 1086352 Currently, nova doesn't enable apic setting for Xen or KVM guest in its libvirt driver. Windows guests would not boot successful in such case. This patch adds apic setting in libvirt driver for Xen or KVM guest, which would fix this problem. A check is also added to libvirt guest config test case for this patch. Change-Id: Ie213c9d086f77faf0cdc5a32337c5bf4b828cf5f
Diffstat (limited to 'nova')
-rw-r--r--nova/tests/test_libvirt.py1
-rw-r--r--nova/tests/test_libvirt_config.py12
-rw-r--r--nova/virt/libvirt/config.py8
-rw-r--r--nova/virt/libvirt/driver.py1
4 files changed, 20 insertions, 2 deletions
diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py
index 5c90ebcd1..bf7e187b4 100644
--- a/nova/tests/test_libvirt.py
+++ b/nova/tests/test_libvirt.py
@@ -652,6 +652,7 @@ class LibvirtConnTestCase(test.TestCase):
_fake_network_info(self.stubs, 1),
None, None)
self.assertEquals(cfg.acpi, True)
+ self.assertEquals(cfg.apic, True)
self.assertEquals(cfg.memory, 1024 * 1024 * 2)
self.assertEquals(cfg.vcpus, 1)
self.assertEquals(cfg.os_type, vm_mode.HVM)
diff --git a/nova/tests/test_libvirt_config.py b/nova/tests/test_libvirt_config.py
index c285d46c0..887199608 100644
--- a/nova/tests/test_libvirt_config.py
+++ b/nova/tests/test_libvirt_config.py
@@ -632,6 +632,8 @@ class LibvirtConfigGuestTest(LibvirtConfigBaseTest):
obj.os_loader = '/usr/lib/xen/boot/hvmloader'
obj.os_root = "root=xvda"
obj.os_cmdline = "console=xvc0"
+ obj.acpi = True
+ obj.apic = True
disk = config.LibvirtConfigGuestDisk()
disk.source_type = "file"
@@ -654,6 +656,10 @@ class LibvirtConfigGuestTest(LibvirtConfigBaseTest):
<cmdline>console=xvc0</cmdline>
<root>root=xvda</root>
</os>
+ <features>
+ <acpi/>
+ <apic/>
+ </features>
<devices>
<disk type="file" device="disk">
<source file="/tmp/img"/>
@@ -671,6 +677,8 @@ class LibvirtConfigGuestTest(LibvirtConfigBaseTest):
obj.uuid = "b38a3f43-4be2-4046-897f-b67c2f5e0147"
obj.os_type = "linux"
obj.os_boot_dev = "hd"
+ obj.acpi = True
+ obj.apic = True
disk = config.LibvirtConfigGuestDisk()
disk.source_type = "file"
@@ -691,6 +699,10 @@ class LibvirtConfigGuestTest(LibvirtConfigBaseTest):
<type>linux</type>
<boot dev="hd"/>
</os>
+ <features>
+ <acpi/>
+ <apic/>
+ </features>
<devices>
<disk type="file" device="disk">
<source file="/tmp/img"/>
diff --git a/nova/virt/libvirt/config.py b/nova/virt/libvirt/config.py
index 58d065d21..69864645c 100644
--- a/nova/virt/libvirt/config.py
+++ b/nova/virt/libvirt/config.py
@@ -587,6 +587,7 @@ class LibvirtConfigGuest(LibvirtConfigObject):
self.vcpus = 1
self.cpu = None
self.acpi = False
+ self.apic = False
self.clock = None
self.os_type = None
self.os_loader = None
@@ -624,9 +625,12 @@ class LibvirtConfigGuest(LibvirtConfigObject):
root.append(os)
def _format_features(self, root):
- if self.acpi:
+ if self.acpi or self.apic:
features = etree.Element("features")
- features.append(etree.Element("acpi"))
+ if self.acpi:
+ features.append(etree.Element("acpi"))
+ if self.apic:
+ features.append(etree.Element("apic"))
root.append(features)
def _format_devices(self, root):
diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py
index 4d2408ff1..6e95b3728 100644
--- a/nova/virt/libvirt/driver.py
+++ b/nova/virt/libvirt/driver.py
@@ -1795,6 +1795,7 @@ class LibvirtDriver(driver.ComputeDriver):
if CONF.libvirt_type != "lxc" and CONF.libvirt_type != "uml":
guest.acpi = True
+ guest.apic = True
clk = vconfig.LibvirtConfigGuestClock()
clk.offset = "utc"