在 2013-01-14一的 17:23 +0100,Ján Tomko写道:
On 01/10/13 02:04, liguang wrote:
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index 04a9512..48b4f46 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -966,13 +966,6 @@ static char *qemuPCIAddressAsString(virDomainDeviceInfoPtr
dev)
> {
> char *addr;
>
> - if (dev->addr.pci.domain != 0 ||
> - dev->addr.pci.bus != 0) {
> - virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> - _("Only PCI domain 0 and bus 0 are available"));
> - return NULL;
> - }
> -
> if (virAsprintf(&addr, "%d:%d:%d.%d",
> dev->addr.pci.domain,
> dev->addr.pci.bus,
> @@ -984,8 +977,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;
> +}
> +
> +static int qemuCollectPCIAddress(virDomainDefPtr def,
> virDomainDeviceDefPtr device,
> virDomainDeviceInfoPtr info,
> void *opaque)
> @@ -1004,6 +1013,20 @@ static int qemuCollectPCIAddress(virDomainDefPtr def
ATTRIBUTE_UNUSED,
> return 0;
> }
>
> + if (info->addr.pci.domain != 0) {
> + virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> + _("Only PCI device addresses with "
> + "domain=0 are supported"));
> + return -1;
> + }
> +
> + if (info->addr.pci.bus != 0 && qemuPciBridgeSupport(def) < 0) {
> + virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> + _("Only PCI device addresses with bus=0 are"
> + " supported without pci-bridge support"));
> + return -1;
> + }
> +
This would allow any bus number, even if we don't have enough PCI
bridges.
maybe, but who tell us the pci bus number limitation?
if I know the limitation I will limit it.
It is also not the only place where qemuPCIAddressAsString is
called from and where this needs to be checked.
We also have other functions assuming bus = 0.
qemuDomainPCIAddressGetNextSlot should also take the bridges into
account, for devices without a specified address.
Yes, but I removed others, for they are unnecessary.
I'll try to post patches dealing with that sometime later this week.
Jan
--
regards!
li guang