[libvirt] [PATCH v2 1/2] add pci-bridge controller type

Daniel P. Berrange berrange at redhat.com
Tue Jan 8 08:59:30 UTC 2013


On Tue, Jan 08, 2013 at 04:55:28PM +0800, li guang wrote:
> 在 2013-01-08二的 08:51 +0000,Daniel P. Berrange写道:
> > On Tue, Jan 08, 2013 at 04:47:40PM +0800, li guang wrote:
> > > 在 2013-01-08二的 16:37 +0800,li guang写道:
> > > > 在 2013-01-08二的 08:04 +0000,Daniel P. Berrange写道:
> > > > > On Tue, Jan 08, 2013 at 09:58:49AM +0800, liguang wrote:
> > > > > > Signed-off-by: liguang <lig.fnst at cn.fujitsu.com>
> > > > > > ---
> > > > > >  src/conf/device_conf.c |   12 +++++++++++-
> > > > > >  src/conf/device_conf.h |    1 +
> > > > > >  src/conf/domain_conf.c |    5 ++++-
> > > > > >  src/conf/domain_conf.h |    1 +
> > > > > >  4 files changed, 17 insertions(+), 2 deletions(-)
> > > > > > 
> > > > > > diff --git a/src/conf/device_conf.c b/src/conf/device_conf.c
> > > > > > index 7b97f45..1c06ed0 100644
> > > > > > --- a/src/conf/device_conf.c
> > > > > > +++ b/src/conf/device_conf.c
> > > > > > @@ -51,16 +51,18 @@ int
> > > > > >  virDevicePCIAddressParseXML(xmlNodePtr node,
> > > > > >                              virDevicePCIAddressPtr addr)
> > > > > >  {
> > > > > > -    char *domain, *slot, *bus, *function, *multi;
> > > > > > +    char *domain, *slot, *bus, *function, *multi, *bridge;
> > > > > >      int ret = -1;
> > > > > >  
> > > > > >      memset(addr, 0, sizeof(*addr));
> > > > > > +    addr->bridge = -1;
> > > > > >  
> > > > > >      domain   = virXMLPropString(node, "domain");
> > > > > >      bus      = virXMLPropString(node, "bus");
> > > > > >      slot     = virXMLPropString(node, "slot");
> > > > > >      function = virXMLPropString(node, "function");
> > > > > >      multi    = virXMLPropString(node, "multifunction");
> > > > > > +    bridge   = virXMLPropString(node, "bridge");
> > > > > >  
> > > > > >      if (domain &&
> > > > > >          virStrToLong_ui(domain, NULL, 0, &addr->domain) < 0) {
> > > > > > @@ -98,6 +100,14 @@ virDevicePCIAddressParseXML(xmlNodePtr node,
> > > > > >          goto cleanup;
> > > > > >  
> > > > > >      }
> > > > > > +
> > > > > > +    if (bridge &&
> > > > > > +        virStrToLong_i(bridge, NULL, 0, &addr->bridge) < 0) {
> > > > > > +        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> > > > > > +                       _("pci-bridge number must be >= 0 "));
> > > > > > +        goto cleanup;
> > > > > > +    }
> > > > > 
> > > > > This is bogus - there's no need for a new 'bridge' attribute - we
> > > > > have 'bus' which is sufficient.
> > > > 
> > > > Oh, yes, this version 'bridge' is unnecessary.
> > > > 
> > > > In former version, I want to discriminate if a pci device want to
> > > > sitting on default bus pci.0 or pci-bridge0, so bring in 'bridge'.
> > > > 
> > > > Thanks!
> > > 
> > > but, without 'bridge', can't know if user want or don't want pci-bridge,
> > > and the check for 'bus != 0' will be removed, then if user happened to 
> > > define a pci device greater than 0, qemu will complain about this,
> > > so it's inconvenient for this case.
> > 
> > The check for 'bus != 0' was only added because we didn't have any
> > support for bridges. Once we have bridge support, then that check
> > can be changed. If bus != 0, then check to see if there's a matching
> > bridge device, otherwise raise an error.
> 
> OK for me, though it seems much more changes will be involved
> than with 'bridge' condition.

The point is that the 'bridge' attribute is redundant information in
the XML that you're forcing the admin to specify to avoid doing more
coding work in libvirt. That's not optimizing for the right person.

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 :|




More information about the libvir-list mailing list