在 2013-01-07一的 22:38 -0600,Doug Goldstein写道: > On Mon, Jan 7, 2013 at 7:58 PM, liguang <lig.fnst@xxxxxxxxxxxxxx> wrote: > > Signed-off-by: liguang <lig.fnst@xxxxxxxxxxxxxx> > > --- > > 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 check isn't correct for the error message. The check is saying > that we weren't able to parse out the value specified (look at the > checks earlier in the function). The subsequent checks (where this > code is added) checks for the validity of the values and use > VIR_ERR_CONFIG_UNSUPPORTED. > No > You're also failing to free bridge in the cleanup section. Yes, will fix. > > > + > > if (!virDevicePCIAddressIsValid(addr)) { > > virReportError(VIR_ERR_INTERNAL_ERROR, "%s", > > _("Insufficient specification for PCI address")); > > diff --git a/src/conf/device_conf.h b/src/conf/device_conf.h > > index 5318738..7ac3461 100644 > > --- a/src/conf/device_conf.h > > +++ b/src/conf/device_conf.h > > @@ -48,6 +48,7 @@ struct _virDevicePCIAddress { > > unsigned int slot; > > unsigned int function; > > int multi; /* enum virDomainDeviceAddressPciMulti */ > > + int bridge; /* for pci-bridge */ > > }; > > > > int virDevicePCIAddressIsValid(virDevicePCIAddressPtr addr); > > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c > > index 6a7646e..8ebe77d 100644 > > --- a/src/conf/domain_conf.c > > +++ b/src/conf/domain_conf.c > > @@ -264,7 +264,8 @@ VIR_ENUM_IMPL(virDomainController, VIR_DOMAIN_CONTROLLER_TYPE_LAST, > > "sata", > > "virtio-serial", > > "ccid", > > - "usb") > > + "usb", > > + "pci-bridge") > > > > VIR_ENUM_IMPL(virDomainControllerModelSCSI, VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST, > > "auto", > > @@ -4479,6 +4480,8 @@ virDomainControllerDefParseXML(xmlNodePtr node, > > goto error; > > > > switch (def->type) { > > + case VIR_DOMAIN_CONTROLLER_TYPE_PCIBRIDGE: > > + break; > > case VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL: { > > char *ports = virXMLPropString(node, "ports"); > > if (ports) { > > diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h > > index 5062e07..56e5a40 100644 > > --- a/src/conf/domain_conf.h > > +++ b/src/conf/domain_conf.h > > @@ -652,6 +652,7 @@ enum virDomainControllerType { > > VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL, > > VIR_DOMAIN_CONTROLLER_TYPE_CCID, > > VIR_DOMAIN_CONTROLLER_TYPE_USB, > > + VIR_DOMAIN_CONTROLLER_TYPE_PCIBRIDGE, > > > > VIR_DOMAIN_CONTROLLER_TYPE_LAST > > }; > > -- > > 1.7.2.5 > > > > > > Looks like: > > int virDevicePCIAddressIsValid(virDevicePCIAddressPtr addr) > > Needs to be updated as well part of this series to allow bus to not be > 0 anymore. > > This change also needs an update to the XML schemas in > docs/schemas/basictypes.rng > -- regards! li guang -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list