On Mon, Jan 21, 2013 at 02:04:00PM +0800, liguang wrote: > if some devices specify a pci bus number that > haven't been defined by a pci-bridge controller > then fill the required correct controller info > silently. > it based on previous add pci-bridge support patches, > https://www.redhat.com/archives/libvir-list/2013-January/msg00577.html > > Signed-off-by: liguang <lig.fnst@xxxxxxxxxxxxxx> > --- > src/conf/domain_conf.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++ > 1 files changed, 57 insertions(+), 0 deletions(-) > > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c > index 8ebe77d..988e4f2 100644 > --- a/src/conf/domain_conf.c > +++ b/src/conf/domain_conf.c > @@ -11756,6 +11756,60 @@ virDomainDefMaybeAddSmartcardController(virDomainDefPtr def) > } > > > +static int > +virDomainDefMaybeAddPcibridgeController(virDomainDefPtr def) > +{ > + int i, idx = 0; > + > + for (i = 0; i < def->nnets; i++) { > + if (def->nets[i]->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) > + continue; > + idx = def->nets[i]->info.addr.pci.bus; > + if (virDomainDefMaybeAddController(def, > + VIR_DOMAIN_CONTROLLER_TYPE_PCIBRIDGE, > + idx) < 0) > + return -1; > + } > + > + for (i = 0; i < def->nsounds; i++) { > + if (def->sounds[i]->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) > + continue; > + idx = def->sounds[i]->info.addr.pci.bus; > + if (virDomainDefMaybeAddController(def, > + VIR_DOMAIN_CONTROLLER_TYPE_PCIBRIDGE, > + idx) < 0) > + return -1; > + } > + > + for (i = 0; i < def->nvideos; i++) { > + if (def->videos[i]->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) > + continue; > + idx = def->videos[i]->info.addr.pci.bus; > + if (virDomainDefMaybeAddController(def, > + VIR_DOMAIN_CONTROLLER_TYPE_PCIBRIDGE, > + idx) < 0) > + return -1; > + } > + > + if (def->watchdog->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) > + idx = def->watchdog->info.addr.pci.bus; > + > + if (virDomainDefMaybeAddController(def, > + VIR_DOMAIN_CONTROLLER_TYPE_PCIBRIDGE, > + idx) < 0) > + return -1; > + > + if (def->memballoon->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) > + idx = def->memballoon->info.addr.pci.bus; > + > + if (virDomainDefMaybeAddController(def, > + VIR_DOMAIN_CONTROLLER_TYPE_PCIBRIDGE, > + idx) < 0) > + return -1; > + > + return 0; > +} > + You're missing quite a few device types here - 'disks' (eg virtio-blk uses PCI addresses), 'controllers' (eg USB controllers use PCI addresses), hostdevs (eg PCI host device passthrough), fss (virtio-9p filesystem uses PCI addresses). Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list