From: Osier Yang Date: Tue, 5 Apr 2011 13:49:58 +0000 (+0800) Subject: qemu: Always reserves slot 0x02 for primary VGA. X-Git-Tag: v0.9.1~178 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7b2cac1238932471af516a5e68842762c1081719;p=thirdparty%2Flibvirt.git qemu: Always reserves slot 0x02 for primary VGA. To address https://bugzilla.redhat.com/show_bug.cgi?id=692355 This fix is to reserve slot 0x02 for primary VGA even if there is no "video" specified in domain XML to avoid the problem. --- diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 3af09c7939..fea0068152 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -947,6 +947,7 @@ qemuAssignDevicePCISlots(virDomainDefPtr def, qemuDomainPCIAddressSetPtr addrs) { int i; bool reservedIDE = false; + bool reservedVGA = false; /* Host bridge */ if (qemuDomainPCIAddressReserveSlot(addrs, 0) < 0) @@ -966,7 +967,7 @@ qemuAssignDevicePCISlots(virDomainDefPtr def, qemuDomainPCIAddressSetPtr addrs) _("Primary IDE controller must have PCI address 0:0:1.1")); goto error; } - /* If TYPE==PCI, then then qemuCollectPCIAddress() function + /* If TYPE==PCI, then qemuCollectPCIAddress() function * has already reserved the address, so we must skip */ reservedIDE = true; } else { @@ -997,16 +998,22 @@ qemuAssignDevicePCISlots(virDomainDefPtr def, qemuDomainPCIAddressSetPtr addrs) _("Primary video card must have PCI address 0:0:2.0")); goto error; } + /* If TYPE==PCI, then qemuCollectPCIAddress() function + * has already reserved the address, so we must skip */ + reservedVGA = true; } else { def->videos[0]->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI; def->videos[0]->info.addr.pci.domain = 0; def->videos[0]->info.addr.pci.bus = 0; def->videos[0]->info.addr.pci.slot = 2; def->videos[0]->info.addr.pci.function = 0; - if (qemuDomainPCIAddressReserveSlot(addrs, 2) < 0) - goto error; } } + + if (!reservedVGA + && qemuDomainPCIAddressReserveSlot(addrs, 2) < 0) + goto error; + for (i = 0; i < def->nfss ; i++) { if (def->fss[i]->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) continue;