
在 2013-02-05二的 17:53 +0100,Ján Tomko写道:
On 01/30/13 03:30, liguang wrote:
@@ -974,8 +967,24 @@ static char *qemuPCIAddressAsString(virDomainDeviceInfoPtr dev) return addr; }
+static int qemuPciBridgeSupport(virDomainDefPtr def) +{ + int i, c = 0; + + for (i = 0; i < def->ncontrollers; i++) { + virDomainControllerDefPtr controller = def->controllers[i]; + + if (controller->type == VIR_DOMAIN_CONTROLLER_TYPE_PCIBRIDGE) + c++; + }
-static int qemuCollectPCIAddress(virDomainDefPtr def ATTRIBUTE_UNUSED, + if (c > 1) + return 0; + else + return -1; +} +
This function is pointless if we're going to auto-add the bridges.
Yes, good catch!
@@ -1002,7 +1025,8 @@ static int qemuCollectPCIAddress(virDomainDefPtr def ATTRIBUTE_UNUSED, if (info->addr.pci.function != 0) { virReportError(VIR_ERR_XML_ERROR, _("Attempted double use of PCI Address '%s' " - "(may need \"multifunction='on'\" for device on function 0)"), + "(may need \"multifunction='on'\" for " + "device on function 0)"), addr); } else { virReportError(VIR_ERR_XML_ERROR, @@ -1037,7 +1061,8 @@ static int qemuCollectPCIAddress(virDomainDefPtr def ATTRIBUTE_UNUSED, goto cleanup; }
- VIR_DEBUG("Remembering PCI addr %s (multifunction=off for function 0)", addr); + VIR_DEBUG("Remembering PCI addr %s (multifunction=off" + " for function 0)", addr); if (virHashAddEntry(addrs->used, addr, addr)) goto cleanup; addr = NULL;
These two long-line wraps belong to a separate patch.
OK, will move to another patch for long line wraps.
@@ -3072,6 +3090,12 @@ qemuBuildControllerDevStr(virDomainDefPtr domainDef, int model;
switch (def->type) { + case VIR_DOMAIN_CONTROLLER_TYPE_PCIBRIDGE: + virBufferAsprintf(&buf, "pci-bridge,chassis_nr=%d", def->idx+1); + virBufferAsprintf(&buf, ",id=pci.%d", def->idx); + if (def->idx == 0)
We should report an error instead of creating a bridge with name 'pci.0' that can't be used.
OK, Thanks!
+ goto out; + break; case VIR_DOMAIN_CONTROLLER_TYPE_SCSI: model = def->model; if ((qemuSetScsiControllerModel(domainDef, caps, &model)) < 0)
Jan