[libvirt] [PATCH 1/6 v2] Prerequisite Patch. virDomainDevicePCIAddress and respective functions moved to a new file called conf/device_conf.ch

Osier Yang jyang at redhat.com
Wed Jun 27 13:18:25 UTC 2012


On 2012年06月25日 19:35, Shradha Shah wrote:
> Refactoring existing code without causing any functional changes to prepare for new code.
> This patch makes the code reusable.
>
> Signed-off-by: Shradha Shah<sshah at solarflare.com>
> ---
>   src/Makefile.am              |    7 ++-
>   src/conf/device_conf.c       |  135 ++++++++++++++++++++++++++++++++++++++++++
>   src/conf/device_conf.h       |   65 ++++++++++++++++++++
>   src/conf/domain_conf.c       |  114 ++++-------------------------------
>   src/conf/domain_conf.h       |   25 +-------
>   src/libvirt_private.syms     |   10 ++-
>   src/qemu/qemu_command.c      |   13 ++--
>   src/qemu/qemu_hotplug.c      |    7 +-
>   src/qemu/qemu_monitor.c      |   14 ++--
>   src/qemu/qemu_monitor.h      |   17 +++---
>   src/qemu/qemu_monitor_json.c |   14 ++--
>   src/qemu/qemu_monitor_json.h |   14 ++--
>   src/qemu/qemu_monitor_text.c |   16 +++---
>   src/qemu/qemu_monitor_text.h |   14 ++--
>   src/xen/xend_internal.c      |    3 +-
>   15 files changed, 288 insertions(+), 180 deletions(-)
>
> diff --git a/src/Makefile.am b/src/Makefile.am
> index e40909b..009c4e5 100644
> --- a/src/Makefile.am
> +++ b/src/Makefile.am
> @@ -199,6 +199,9 @@ CONSOLE_CONF_SOURCES =						\
>   DOMAIN_LIST_SOURCES =						\
>   		conf/virdomainlist.c conf/virdomainlist.h
>
> +DEVICE_CONF_SOURCES =                                           \
> +		conf/device_conf.c conf/device_conf.h
> +
>   CONF_SOURCES =							\
>   		$(NETDEV_CONF_SOURCES)				\
>   		$(DOMAIN_CONF_SOURCES)				\
> @@ -212,7 +215,8 @@ CONF_SOURCES =							\
>   		$(SECRET_CONF_SOURCES)				\
>   		$(CPU_CONF_SOURCES)				\
>   		$(CONSOLE_CONF_SOURCES)				\
> -		$(DOMAIN_LIST_SOURCES)
> +		$(DOMAIN_LIST_SOURCES)				\
> +		$(DEVICE_CONF_SOURCES)
>
>   # The remote RPC driver, covering domains, storage, networks, etc
>   REMOTE_DRIVER_GENERATED = \
> @@ -1525,6 +1529,7 @@ libvirt_lxc_SOURCES =						\
>   		$(ENCRYPTION_CONF_SOURCES)			\
>   		$(NETDEV_CONF_SOURCES)				\
>   		$(DOMAIN_CONF_SOURCES)				\
> +		$(DEVICE_CONF_SOURCES)				\
>   		$(SECRET_CONF_SOURCES)				\
>   		$(CPU_CONF_SOURCES)				\
>   		$(SECURITY_DRIVER_SOURCES)			\
> diff --git a/src/conf/device_conf.c b/src/conf/device_conf.c
> new file mode 100644
> index 0000000..af21aad
> --- /dev/null
> +++ b/src/conf/device_conf.c
> @@ -0,0 +1,135 @@
> +/*
> + * device_conf.h: device XML handling
> + *
> + * Copyright (C) 2006-2012 Red Hat, Inc.
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
> + *
> + * Author: Shradha Shah<sshah at solarflare.com>
> + */
> +
> +#include<config.h>
> +#include "virterror_internal.h"
> +#include "datatypes.h"
> +#include "memory.h"
> +#include "xml.h"
> +#include "uuid.h"
> +#include "util.h"
> +#include "buf.h"
> +#include "conf/device_conf.h"
> +
> +#define VIR_FROM_THIS VIR_FROM_DEVICE

VIR_FROM_DEVICE is not defined, and isn't it too big to
use 'device'? I see only pci device address parsing and
formating code actually. And most of the device conf codes
are in domain_conf.[ch].

> +
> +#define virDeviceReportError(code, ...)                              \
> +    virReportErrorHelper(VIR_FROM_DOMAIN, code, __FILE__,            \

Copy & Paste mistake (VIR_DOMAIN_DOMAIN)

I'm wondering if it's neccessary to refactor the codes like this.
As it just split the codes from domain_conf.[ch] into new files,
no more reusability as far as I can see. The only exception is the
new virDevicePCIAddressFormat, but it can be in domain_conf.[ch]
too. Any special reason you want to have 2 new files?

> +                         __FUNCTION__, __LINE__, __VA_ARGS__)
> +
> +VIR_ENUM_IMPL(virDeviceAddressPciMulti,
> +              VIR_DEVICE_ADDRESS_PCI_MULTI_LAST,
> +              "default",
> +              "on",
> +              "off")
> +
> +int virDevicePCIAddressIsValid(virDevicePCIAddressPtr addr)
> +{
> +    /* PCI bus has 32 slots and 8 functions per slot */
> +    if (addr->slot>= 32 || addr->function>= 8)
> +        return 0;
> +    return addr->domain || addr->bus || addr->slot;
> +}
> +
> +
> +int
> +virDevicePCIAddressParseXML(xmlNodePtr node,
> +                            virDevicePCIAddressPtr addr)
> +{
> +    char *domain, *slot, *bus, *function, *multi;
> +    int ret = -1;
> +
> +    memset(addr, 0, sizeof(*addr));
> +
> +    domain   = virXMLPropString(node, "domain");
> +    bus      = virXMLPropString(node, "bus");
> +    slot     = virXMLPropString(node, "slot");
> +    function = virXMLPropString(node, "function");
> +    multi    = virXMLPropString(node, "multifunction");
> +
> +    if (domain&&
> +        virStrToLong_ui(domain, NULL, 0,&addr->domain)<  0) {
> +        virDeviceReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> +                             _("Cannot parse<address>  'domain' attribute"));
> +        goto cleanup;
> +    }
> +
> +    if (bus&&
> +        virStrToLong_ui(bus, NULL, 0,&addr->bus)<  0) {
> +        virDeviceReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> +                             _("Cannot parse<address>  'bus' attribute"));
> +        goto cleanup;
> +    }
> +
> +    if (slot&&
> +        virStrToLong_ui(slot, NULL, 0,&addr->slot)<  0) {
> +        virDeviceReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> +                             _("Cannot parse<address>  'slot' attribute"));
> +        goto cleanup;
> +    }
> +
> +    if (function&&
> +        virStrToLong_ui(function, NULL, 0,&addr->function)<  0) {
> +        virDeviceReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> +                             _("Cannot parse<address>  'function' attribute"));
> +        goto cleanup;
> +    }
> +
> +    if (multi&&
> +        ((addr->multi = virDeviceAddressPciMultiTypeFromString(multi))<= 0)) {
> +        virDeviceReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> +                             _("Unknown value '%s' for<address>  'multifunction' attribute"),
> +                             multi);
> +        goto cleanup;
> +
> +    }
> +    if (!virDevicePCIAddressIsValid(addr)) {
> +        virDeviceReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> +                             _("Insufficient specification for PCI address"));
> +        goto cleanup;
> +    }
> +
> +    ret = 0;
> +
> +cleanup:
> +    VIR_FREE(domain);
> +    VIR_FREE(bus);
> +    VIR_FREE(slot);
> +    VIR_FREE(function);
> +    VIR_FREE(multi);
> +    return ret;
> +}
> +
> +int
> +virDevicePCIAddressFormat(virBufferPtr buf,
> +                          virDevicePCIAddress addr,
> +                          bool includeTypeInAddr)
> +{
> +    virBufferAsprintf(buf, "<address %sdomain='0x%.4x' bus='0x%.2x' "
> +                      "slot='0x%.2x' function='0x%.1x'/>\n",
> +                      includeTypeInAddr ? "type='pci' " : "",
> +                      addr.domain,
> +                      addr.bus,
> +                      addr.slot,
> +                      addr.function);
> +    return 0;
> +}
> diff --git a/src/conf/device_conf.h b/src/conf/device_conf.h
> new file mode 100644
> index 0000000..b060798
> --- /dev/null
> +++ b/src/conf/device_conf.h
> @@ -0,0 +1,65 @@
> +/*
> + * device_conf.h: device XML handling entry points
> + *
> + * Copyright (C) 2006-2012 Red Hat, Inc.
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
> + *
> + * Author: Shradha Shah<sshah at solarflare.com>
> + */
> +
> +#ifndef __DEVICE_CONF_H__
> +# define __DEVICE_CONF_H__
> +
> +# include<libxml/parser.h>
> +# include<libxml/tree.h>
> +# include<libxml/xpath.h>
> +
> +# include "internal.h"
> +# include "util.h"
> +# include "threads.h"
> +# include "buf.h"
> +
> +enum virDeviceAddressPciMulti {
> +    VIR_DEVICE_ADDRESS_PCI_MULTI_DEFAULT = 0,
> +    VIR_DEVICE_ADDRESS_PCI_MULTI_ON,
> +    VIR_DEVICE_ADDRESS_PCI_MULTI_OFF,
> +
> +    VIR_DEVICE_ADDRESS_PCI_MULTI_LAST
> +};
> +
> +typedef struct _virDevicePCIAddress virDevicePCIAddress;
> +typedef virDevicePCIAddress *virDevicePCIAddressPtr;
> +struct _virDevicePCIAddress {
> +    unsigned int domain;
> +    unsigned int bus;
> +    unsigned int slot;
> +    unsigned int function;
> +    int          multi;  /* enum virDomainDeviceAddressPciMulti */
> +};
> +
> +int virDevicePCIAddressIsValid(virDevicePCIAddressPtr addr);
> +
> +int virDevicePCIAddressParseXML(xmlNodePtr node,
> +                                virDevicePCIAddressPtr addr);
> +
> +int virDevicePCIAddressFormat(virBufferPtr buf,
> +                              virDevicePCIAddress addr,
> +                              bool includeTypeInAddr);
> +
> +
> +VIR_ENUM_DECL(virDeviceAddressPciMulti)
> +
> +#endif /* __DEVICE_CONF_H__ */
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index f44dc93..7541627 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -53,6 +53,7 @@
>   #include "netdev_vport_profile_conf.h"
>   #include "netdev_bandwidth_conf.h"
>   #include "virdomainlist.h"
> +#include "device_conf.h"
>
>   #define VIR_FROM_THIS VIR_FROM_DOMAIN
>
> @@ -152,12 +153,6 @@ VIR_ENUM_IMPL(virDomainDeviceAddress, VIR_DOMAIN_DEVICE_ADDRESS_TYPE_LAST,
>                 "usb",
>                 "spapr-vio")
>
> -VIR_ENUM_IMPL(virDomainDeviceAddressPciMulti,
> -              VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_LAST,
> -              "default",
> -              "on",
> -              "off")
> -
>   VIR_ENUM_IMPL(virDomainDisk, VIR_DOMAIN_DISK_TYPE_LAST,
>                 "block",
>                 "file",
> @@ -1904,7 +1899,7 @@ int virDomainDeviceAddressIsValid(virDomainDeviceInfoPtr info,
>
>       switch (info->type) {
>       case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI:
> -        return virDomainDevicePCIAddressIsValid(&info->addr.pci);
> +        return virDevicePCIAddressIsValid(&info->addr.pci);
>
>       case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE:
>           return 1;
> @@ -1916,16 +1911,6 @@ int virDomainDeviceAddressIsValid(virDomainDeviceInfoPtr info,
>       return 0;
>   }
>
> -
> -int virDomainDevicePCIAddressIsValid(virDomainDevicePCIAddressPtr addr)
> -{
> -    /* PCI bus has 32 slots and 8 functions per slot */
> -    if (addr->slot>= 32 || addr->function>= 8)
> -        return 0;
> -    return addr->domain || addr->bus || addr->slot;
> -}
> -
> -
>   static bool
>   virDomainDeviceInfoIsSet(virDomainDeviceInfoPtr info, unsigned int flags)
>   {
> @@ -2149,7 +2134,7 @@ virDomainDeviceInfoFormat(virBufferPtr buf,
>                             info->addr.pci.function);
>           if (info->addr.pci.multi) {
>              virBufferAsprintf(buf, " multifunction='%s'",
> -                             virDomainDeviceAddressPciMultiTypeToString(info->addr.pci.multi));
> +                             virDeviceAddressPciMultiTypeToString(info->addr.pci.multi));
>           }
>           break;
>
> @@ -2197,75 +2182,6 @@ virDomainDeviceInfoFormat(virBufferPtr buf,
>   }
>
>   static int
> -virDomainDevicePCIAddressParseXML(xmlNodePtr node,
> -                                  virDomainDevicePCIAddressPtr addr)
> -{
> -    char *domain, *slot, *bus, *function, *multi;
> -    int ret = -1;
> -
> -    memset(addr, 0, sizeof(*addr));
> -
> -    domain   = virXMLPropString(node, "domain");
> -    bus      = virXMLPropString(node, "bus");
> -    slot     = virXMLPropString(node, "slot");
> -    function = virXMLPropString(node, "function");
> -    multi    = virXMLPropString(node, "multifunction");
> -
> -    if (domain&&
> -        virStrToLong_ui(domain, NULL, 0,&addr->domain)<  0) {
> -        virDomainReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> -                             _("Cannot parse<address>  'domain' attribute"));
> -        goto cleanup;
> -    }
> -
> -    if (bus&&
> -        virStrToLong_ui(bus, NULL, 0,&addr->bus)<  0) {
> -        virDomainReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> -                             _("Cannot parse<address>  'bus' attribute"));
> -        goto cleanup;
> -    }
> -
> -    if (slot&&
> -        virStrToLong_ui(slot, NULL, 0,&addr->slot)<  0) {
> -        virDomainReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> -                             _("Cannot parse<address>  'slot' attribute"));
> -        goto cleanup;
> -    }
> -
> -    if (function&&
> -        virStrToLong_ui(function, NULL, 0,&addr->function)<  0) {
> -        virDomainReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> -                             _("Cannot parse<address>  'function' attribute"));
> -        goto cleanup;
> -    }
> -
> -    if (multi&&
> -        ((addr->multi = virDomainDeviceAddressPciMultiTypeFromString(multi))<= 0)) {
> -        virDomainReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> -                             _("Unknown value '%s' for<address>  'multifunction' attribute"),
> -                             multi);
> -        goto cleanup;
> -
> -    }
> -    if (!virDomainDevicePCIAddressIsValid(addr)) {
> -        virDomainReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> -                             _("Insufficient specification for PCI address"));
> -        goto cleanup;
> -    }
> -
> -    ret = 0;
> -
> -cleanup:
> -    VIR_FREE(domain);
> -    VIR_FREE(bus);
> -    VIR_FREE(slot);
> -    VIR_FREE(function);
> -    VIR_FREE(multi);
> -    return ret;
> -}
> -
> -
> -static int
>   virDomainDeviceDriveAddressParseXML(xmlNodePtr node,
>                                       virDomainDeviceDriveAddressPtr addr)
>   {
> @@ -2626,7 +2542,7 @@ virDomainDeviceInfoParseXML(xmlNodePtr node,
>
>       switch (info->type) {
>       case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI:
> -        if (virDomainDevicePCIAddressParseXML(address,&info->addr.pci)<  0)
> +        if (virDevicePCIAddressParseXML(address,&info->addr.pci)<  0)
>               goto cleanup;
>           break;
>
> @@ -2674,7 +2590,7 @@ cleanup:
>
>   static int
>   virDomainParseLegacyDeviceAddress(char *devaddr,
> -                                  virDomainDevicePCIAddressPtr pci)
> +                                  virDevicePCIAddressPtr pci)
>   {
>       char *tmp;
>
> @@ -2859,10 +2775,10 @@ virDomainHostdevSubsysPciDefParseXML(const xmlNodePtr node,
>       while (cur != NULL) {
>           if (cur->type == XML_ELEMENT_NODE) {
>               if (xmlStrEqual(cur->name, BAD_CAST "address")) {
> -                virDomainDevicePCIAddressPtr addr =
> +                virDevicePCIAddressPtr addr =
>                       &def->source.subsys.u.pci;
>
> -                if (virDomainDevicePCIAddressParseXML(cur, addr)<  0)
> +                if (virDevicePCIAddressParseXML(cur, addr)<  0)
>                       goto out;
>               } else if ((flags&  VIR_DOMAIN_XML_INTERNAL_STATUS)&&
>                          xmlStrEqual(cur->name, BAD_CAST "state")) {
> @@ -11427,14 +11343,12 @@ virDomainHostdevSourceFormat(virBufferPtr buf,
>           }
>           break;
>       case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI:
> -        virBufferAsprintf(buf, "<address %sdomain='0x%.4x' bus='0x%.2x' "
> -                          "slot='0x%.2x' function='0x%.1x'/>\n",
> -                          includeTypeInAddr ? "type='pci' " : "",
> -                          def->source.subsys.u.pci.domain,
> -                          def->source.subsys.u.pci.bus,
> -                          def->source.subsys.u.pci.slot,
> -                          def->source.subsys.u.pci.function);
> -
> +        if (virDevicePCIAddressFormat(buf,
> +                                      def->source.subsys.u.pci,
> +                                      includeTypeInAddr) != 0)
> +            virDomainReportError(VIR_ERR_INTERNAL_ERROR,
> +                                 _("PCI address Formatting failed"));
> +
>           if ((flags&  VIR_DOMAIN_XML_INTERNAL_PCI_ORIG_STATES)&&
>               (def->origstates.states.pci.unbind_from_stub ||
>                def->origstates.states.pci.remove_slot ||
> @@ -11447,7 +11361,7 @@ virDomainHostdevSourceFormat(virBufferPtr buf,
>               if (def->origstates.states.pci.reprobe)
>                   virBufferAddLit(buf, "<reprobe/>\n");
>               virBufferAddLit(buf, "</origstates>\n");
> -        }
> +        }
>           break;
>       default:
>           virDomainReportError(VIR_ERR_INTERNAL_ERROR,
> diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
> index 7d5d60b..51b2da8 100644
> --- a/src/conf/domain_conf.h
> +++ b/src/conf/domain_conf.h
> @@ -43,6 +43,7 @@
>   # include "virnetdevvportprofile.h"
>   # include "virnetdevopenvswitch.h"
>   # include "virnetdevbandwidth.h"
> +# include "device_conf.h"
>
>   /* forward declarations of all device types, required by
>    * virDomainDeviceDef
> @@ -176,14 +177,6 @@ enum virDomainDeviceAddressType {
>       VIR_DOMAIN_DEVICE_ADDRESS_TYPE_LAST
>   };
>
> -enum virDomainDeviceAddressPciMulti {
> -    VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_DEFAULT = 0,
> -    VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_ON,
> -    VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_OFF,
> -
> -    VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_LAST
> -};
> -
>   enum virDomainPciRombarMode {
>       VIR_DOMAIN_PCI_ROMBAR_DEFAULT = 0,
>       VIR_DOMAIN_PCI_ROMBAR_ON,
> @@ -192,16 +185,6 @@ enum virDomainPciRombarMode {
>       VIR_DOMAIN_PCI_ROMBAR_LAST
>   };
>
> -typedef struct _virDomainDevicePCIAddress virDomainDevicePCIAddress;
> -typedef virDomainDevicePCIAddress *virDomainDevicePCIAddressPtr;
> -struct _virDomainDevicePCIAddress {
> -    unsigned int domain;
> -    unsigned int bus;
> -    unsigned int slot;
> -    unsigned int function;
> -    int          multi;  /* enum virDomainDeviceAddressPciMulti */
> -};
> -
>   typedef struct _virDomainDeviceDriveAddress virDomainDeviceDriveAddress;
>   typedef virDomainDeviceDriveAddress *virDomainDeviceDriveAddressPtr;
>   struct _virDomainDeviceDriveAddress {
> @@ -263,7 +246,7 @@ struct _virDomainDeviceInfo {
>       char *alias;
>       int type;
>       union {
> -        virDomainDevicePCIAddress pci;
> +        virDevicePCIAddress pci;
>           virDomainDeviceDriveAddress drive;
>           virDomainDeviceVirtioSerialAddress vioserial;
>           virDomainDeviceCcidAddress ccid;
> @@ -374,7 +357,7 @@ struct _virDomainHostdevSubsys {
>               unsigned vendor;
>               unsigned product;
>           } usb;
> -        virDomainDevicePCIAddress pci; /* host address */
> +        virDevicePCIAddress pci; /* host address */
>       } u;
>   };
>
> @@ -1891,7 +1874,6 @@ virDomainDeviceDefPtr virDomainDeviceDefCopy(virCapsPtr caps,
>                                                virDomainDeviceDefPtr src);
>   int virDomainDeviceAddressIsValid(virDomainDeviceInfoPtr info,
>                                     int type);
> -int virDomainDevicePCIAddressIsValid(virDomainDevicePCIAddressPtr addr);
>   void virDomainDeviceInfoClear(virDomainDeviceInfoPtr info);
>   void virDomainDefClearPCIAddresses(virDomainDefPtr def);
>   void virDomainDefClearDeviceAliases(virDomainDefPtr def);
> @@ -2161,7 +2143,6 @@ VIR_ENUM_DECL(virDomainLifecycle)
>   VIR_ENUM_DECL(virDomainLifecycleCrash)
>   VIR_ENUM_DECL(virDomainDevice)
>   VIR_ENUM_DECL(virDomainDeviceAddress)
> -VIR_ENUM_DECL(virDomainDeviceAddressPciMulti)
>   VIR_ENUM_DECL(virDomainDisk)
>   VIR_ENUM_DECL(virDomainDiskDevice)
>   VIR_ENUM_DECL(virDomainDiskBus)
> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
> index 2fe5068..0a77130 100644
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -210,6 +210,13 @@ virUnrefStorageVol;
>   virUnrefStream;
>
>
> +# device_conf.h
> +virDeviceAddressPciMultiTypeFromString;
> +virDeviceAddressPciMultiTypeToString;
> +virDevicePCIAddressIsValid;
> +virDevicePCIAddressParseXML;
> +virDevicePCIAddressFormat;
> +
>   # dnsmasq.h
>   dnsmasqAddDhcpHost;
>   dnsmasqAddHost;
> @@ -286,14 +293,11 @@ virDomainDefParseNode;
>   virDomainDefParseString;
>   virDomainDeleteConfig;
>   virDomainDeviceAddressIsValid;
> -virDomainDeviceAddressPciMultiTypeFromString;
> -virDomainDeviceAddressPciMultiTypeToString;
>   virDomainDeviceAddressTypeToString;
>   virDomainDeviceDefCopy;
>   virDomainDeviceDefFree;
>   virDomainDeviceDefParse;
>   virDomainDeviceInfoIterate;
> -virDomainDevicePCIAddressIsValid;
>   virDomainDeviceTypeToString;
>   virDomainDiskBusTypeToString;
>   virDomainDiskCacheTypeFromString;
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index 6549f57..93c018d 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -40,6 +40,7 @@
>   #include "network/bridge_driver.h"
>   #include "virnetdevtap.h"
>   #include "base64.h"
> +#include "device_conf.h"
>
>   #include<sys/utsname.h>
>   #include<sys/stat.h>
> @@ -909,7 +910,7 @@ static int qemuCollectPCIAddress(virDomainDefPtr def ATTRIBUTE_UNUSED,
>       addr = NULL;
>
>       if ((info->addr.pci.function == 0)&&
> -        (info->addr.pci.multi != VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_ON)) {
> +        (info->addr.pci.multi != VIR_DEVICE_ADDRESS_PCI_MULTI_ON)) {
>           /* a function 0 w/o multifunction=on must reserve the entire slot */
>           int function;
>           virDomainDeviceInfo temp_info = *info;
> @@ -1465,7 +1466,7 @@ qemuAssignDevicePCISlots(virDomainDefPtr def, qemuDomainPCIAddressSetPtr addrs)
>
>           /* USB2 needs special handling to put all companions in the same slot */
>           if (IS_USB2_CONTROLLER(def->controllers[i])) {
> -            virDomainDevicePCIAddress addr = { 0, 0, 0, 0, false };
> +            virDevicePCIAddress addr = { 0, 0, 0, 0, false };
>               for (j = 0 ; j<  i ; j++) {
>                   if (IS_USB2_CONTROLLER(def->controllers[j])&&
>                       def->controllers[j]->idx == def->controllers[i]->idx) {
> @@ -1480,7 +1481,7 @@ qemuAssignDevicePCISlots(virDomainDefPtr def, qemuDomainPCIAddressSetPtr addrs)
>                   break;
>               case VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_UHCI1:
>                   addr.function = 0;
> -                addr.multi = VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_ON;
> +                addr.multi = VIR_DEVICE_ADDRESS_PCI_MULTI_ON;
>                   break;
>               case VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_UHCI2:
>                   addr.function = 1;
> @@ -1631,7 +1632,7 @@ qemuBuildDeviceAddressStr(virBufferPtr buf,
>                                     "are supported with this QEMU binary"));
>                   return -1;
>               }
> -            if (info->addr.pci.multi == VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_ON) {
> +            if (info->addr.pci.multi == VIR_DEVICE_ADDRESS_PCI_MULTI_ON) {
>                   qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>                                   _("'multifunction=on' is not supported with "
>                                     "this QEMU binary"));
> @@ -1649,9 +1650,9 @@ qemuBuildDeviceAddressStr(virBufferPtr buf,
>               virBufferAsprintf(buf, ",bus=pci.0");
>           else
>               virBufferAsprintf(buf, ",bus=pci");
> -        if (info->addr.pci.multi == VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_ON)
> +        if (info->addr.pci.multi == VIR_DEVICE_ADDRESS_PCI_MULTI_ON)
>               virBufferAddLit(buf, ",multifunction=on");
> -        else if (info->addr.pci.multi == VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_OFF)
> +        else if (info->addr.pci.multi == VIR_DEVICE_ADDRESS_PCI_MULTI_OFF)
>               virBufferAddLit(buf, ",multifunction=off");
>           virBufferAsprintf(buf, ",addr=0x%x", info->addr.pci.slot);
>           if (info->addr.pci.function != 0)
> diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
> index c2fa75b..2c07f55 100644
> --- a/src/qemu/qemu_hotplug.c
> +++ b/src/qemu/qemu_hotplug.c
> @@ -43,6 +43,7 @@
>   #include "virnetdev.h"
>   #include "virnetdevbridge.h"
>   #include "virnetdevtap.h"
> +#include "device_conf.h"
>
>   #define VIR_FROM_THIS VIR_FROM_QEMU
>
> @@ -258,7 +259,7 @@ int qemuDomainAttachPciDiskDevice(virConnectPtr conn,
>               }
>           }
>       } else {
> -        virDomainDevicePCIAddress guestAddr = disk->info.addr.pci;
> +        virDevicePCIAddress guestAddr = disk->info.addr.pci;
>           ret = qemuMonitorAddPCIDisk(priv->mon,
>                                       disk->src,
>                                       type,
> @@ -659,7 +660,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn,
>       char *netstr = NULL;
>       virNetDevVPortProfilePtr vport = NULL;
>       int ret = -1;
> -    virDomainDevicePCIAddress guestAddr;
> +    virDevicePCIAddress guestAddr;
>       int vlan;
>       bool releaseaddr = false;
>       bool iface_connected = false;
> @@ -967,7 +968,7 @@ int qemuDomainAttachHostPciDevice(struct qemud_driver *driver,
>                                            configfd, configfd_name);
>           qemuDomainObjExitMonitorWithDriver(driver, vm);
>       } else {
> -        virDomainDevicePCIAddress guestAddr = hostdev->info->addr.pci;
> +        virDevicePCIAddress guestAddr = hostdev->info->addr.pci;
>
>           qemuDomainObjEnterMonitorWithDriver(driver, vm);
>           ret = qemuMonitorAddPCIHostDevice(priv->mon,
> diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
> index b8a2f2f..02b42c2 100644
> --- a/src/qemu/qemu_monitor.c
> +++ b/src/qemu/qemu_monitor.c
> @@ -2148,8 +2148,8 @@ int qemuMonitorAddUSBDeviceMatch(qemuMonitorPtr mon,
>
>
>   int qemuMonitorAddPCIHostDevice(qemuMonitorPtr mon,
> -                                virDomainDevicePCIAddress *hostAddr,
> -                                virDomainDevicePCIAddress *guestAddr)
> +                                virDevicePCIAddress *hostAddr,
> +                                virDevicePCIAddress *guestAddr)
>   {
>       int ret;
>       VIR_DEBUG("mon=%p domain=%d bus=%d slot=%d function=%d",
> @@ -2173,7 +2173,7 @@ int qemuMonitorAddPCIHostDevice(qemuMonitorPtr mon,
>   int qemuMonitorAddPCIDisk(qemuMonitorPtr mon,
>                             const char *path,
>                             const char *bus,
> -                          virDomainDevicePCIAddress *guestAddr)
> +                          virDevicePCIAddress *guestAddr)
>   {
>       int ret;
>       VIR_DEBUG("mon=%p path=%s bus=%s",
> @@ -2195,7 +2195,7 @@ int qemuMonitorAddPCIDisk(qemuMonitorPtr mon,
>
>   int qemuMonitorAddPCINetwork(qemuMonitorPtr mon,
>                                const char *nicstr,
> -                             virDomainDevicePCIAddress *guestAddr)
> +                             virDevicePCIAddress *guestAddr)
>   {
>       int ret;
>       VIR_DEBUG("mon=%p nicstr=%s", mon, nicstr);
> @@ -2215,7 +2215,7 @@ int qemuMonitorAddPCINetwork(qemuMonitorPtr mon,
>
>
>   int qemuMonitorRemovePCIDevice(qemuMonitorPtr mon,
> -                               virDomainDevicePCIAddress *guestAddr)
> +                               virDevicePCIAddress *guestAddr)
>   {
>       int ret;
>       VIR_DEBUG("mon=%p domain=%d bus=%d slot=%d function=%d",
> @@ -2451,7 +2451,7 @@ int qemuMonitorGetPtyPaths(qemuMonitorPtr mon,
>
>   int qemuMonitorAttachPCIDiskController(qemuMonitorPtr mon,
>                                          const char *bus,
> -                                       virDomainDevicePCIAddress *guestAddr)
> +                                       virDevicePCIAddress *guestAddr)
>   {
>       VIR_DEBUG("mon=%p type=%s", mon, bus);
>       int ret;
> @@ -2473,7 +2473,7 @@ int qemuMonitorAttachPCIDiskController(qemuMonitorPtr mon,
>
>   int qemuMonitorAttachDrive(qemuMonitorPtr mon,
>                              const char *drivestr,
> -                           virDomainDevicePCIAddress *controllerAddr,
> +                           virDevicePCIAddress *controllerAddr,
>                              virDomainDeviceDriveAddress *driveAddr)
>   {
>       VIR_DEBUG("mon=%p drivestr=%s domain=%d bus=%d slot=%d function=%d",
> diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
> index 66bec38..6b5bbe6 100644
> --- a/src/qemu/qemu_monitor.h
> +++ b/src/qemu/qemu_monitor.h
> @@ -32,6 +32,7 @@
>   # include "bitmap.h"
>   # include "virhash.h"
>   # include "json.h"
> +# include "device_conf.h"
>
>   typedef struct _qemuMonitor qemuMonitor;
>   typedef qemuMonitor *qemuMonitorPtr;
> @@ -413,8 +414,8 @@ int qemuMonitorAddUSBDeviceMatch(qemuMonitorPtr mon,
>
>
>   int qemuMonitorAddPCIHostDevice(qemuMonitorPtr mon,
> -                                virDomainDevicePCIAddress *hostAddr,
> -                                virDomainDevicePCIAddress *guestAddr);
> +                                virDevicePCIAddress *hostAddr,
> +                                virDevicePCIAddress *guestAddr);
>
>   /* XXX disk driver type eg,  qcow/etc.
>    * XXX cache mode
> @@ -422,17 +423,17 @@ int qemuMonitorAddPCIHostDevice(qemuMonitorPtr mon,
>   int qemuMonitorAddPCIDisk(qemuMonitorPtr mon,
>                             const char *path,
>                             const char *bus,
> -                          virDomainDevicePCIAddress *guestAddr);
> +                          virDevicePCIAddress *guestAddr);
>
>   /* XXX do we really want to hardcode 'nicstr' as the
>    * sendable item here
>    */
>   int qemuMonitorAddPCINetwork(qemuMonitorPtr mon,
>                                const char *nicstr,
> -                             virDomainDevicePCIAddress *guestAddr);
> +                             virDevicePCIAddress *guestAddr);
>
>   int qemuMonitorRemovePCIDevice(qemuMonitorPtr mon,
> -                               virDomainDevicePCIAddress *guestAddr);
> +                               virDevicePCIAddress *guestAddr);
>
>
>   int qemuMonitorSendFileHandle(qemuMonitorPtr mon,
> @@ -471,11 +472,11 @@ int qemuMonitorGetPtyPaths(qemuMonitorPtr mon,
>
>   int qemuMonitorAttachPCIDiskController(qemuMonitorPtr mon,
>                                          const char *bus,
> -                                       virDomainDevicePCIAddress *guestAddr);
> +                                       virDevicePCIAddress *guestAddr);
>
>   int qemuMonitorAttachDrive(qemuMonitorPtr mon,
>                              const char *drivestr,
> -                           virDomainDevicePCIAddress *controllerAddr,
> +                           virDevicePCIAddress *controllerAddr,
>                              virDomainDeviceDriveAddress *driveAddr);
>
>
> @@ -483,7 +484,7 @@ typedef struct _qemuMonitorPCIAddress qemuMonitorPCIAddress;
>   struct _qemuMonitorPCIAddress {
>       unsigned int vendor;
>       unsigned int product;
> -    virDomainDevicePCIAddress addr;
> +    virDevicePCIAddress addr;
>   };
>
>   int qemuMonitorGetAllPCIAddresses(qemuMonitorPtr mon,
> diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
> index 7d2da21..1d8ac2a 100644
> --- a/src/qemu/qemu_monitor_json.c
> +++ b/src/qemu/qemu_monitor_json.c
> @@ -2564,8 +2564,8 @@ int qemuMonitorJSONAddUSBDeviceMatch(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
>
>
>   int qemuMonitorJSONAddPCIHostDevice(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
> -                                    virDomainDevicePCIAddress *hostAddr ATTRIBUTE_UNUSED,
> -                                    virDomainDevicePCIAddress *guestAddr ATTRIBUTE_UNUSED)
> +                                    virDevicePCIAddress *hostAddr ATTRIBUTE_UNUSED,
> +                                    virDevicePCIAddress *guestAddr ATTRIBUTE_UNUSED)
>   {
>       qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>                       _("pci_add not supported in JSON mode"));
> @@ -2576,7 +2576,7 @@ int qemuMonitorJSONAddPCIHostDevice(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
>   int qemuMonitorJSONAddPCIDisk(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
>                                 const char *path ATTRIBUTE_UNUSED,
>                                 const char *bus ATTRIBUTE_UNUSED,
> -                              virDomainDevicePCIAddress *guestAddr ATTRIBUTE_UNUSED)
> +                              virDevicePCIAddress *guestAddr ATTRIBUTE_UNUSED)
>   {
>       qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>                       _("pci_add not supported in JSON mode"));
> @@ -2586,7 +2586,7 @@ int qemuMonitorJSONAddPCIDisk(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
>
>   int qemuMonitorJSONAddPCINetwork(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
>                                    const char *nicstr ATTRIBUTE_UNUSED,
> -                                 virDomainDevicePCIAddress *guestAddr ATTRIBUTE_UNUSED)
> +                                 virDevicePCIAddress *guestAddr ATTRIBUTE_UNUSED)
>   {
>       qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>                       _("pci_add not supported in JSON mode"));
> @@ -2595,7 +2595,7 @@ int qemuMonitorJSONAddPCINetwork(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
>
>
>   int qemuMonitorJSONRemovePCIDevice(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
> -                                   virDomainDevicePCIAddress *guestAddr ATTRIBUTE_UNUSED)
> +                                   virDevicePCIAddress *guestAddr ATTRIBUTE_UNUSED)
>   {
>       qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>                       _("pci_del not supported in JSON mode"));
> @@ -2852,7 +2852,7 @@ int qemuMonitorJSONGetPtyPaths(qemuMonitorPtr mon,
>
>   int qemuMonitorJSONAttachPCIDiskController(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
>                                              const char *bus ATTRIBUTE_UNUSED,
> -                                           virDomainDevicePCIAddress *guestAddr ATTRIBUTE_UNUSED)
> +                                           virDevicePCIAddress *guestAddr ATTRIBUTE_UNUSED)
>   {
>       qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>                       _("pci_add not supported in JSON mode"));
> @@ -2891,7 +2891,7 @@ qemuMonitorJSONGetGuestDriveAddress(virJSONValuePtr reply,
>
>   int qemuMonitorJSONAttachDrive(qemuMonitorPtr mon,
>                                  const char *drivestr,
> -                               virDomainDevicePCIAddress* controllerAddr,
> +                               virDevicePCIAddress* controllerAddr,
>                                  virDomainDeviceDriveAddress* driveAddr)
>   {
>       int ret;
> diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h
> index e8bd9b8..8237751 100644
> --- a/src/qemu/qemu_monitor_json.h
> +++ b/src/qemu/qemu_monitor_json.h
> @@ -161,20 +161,20 @@ int qemuMonitorJSONAddUSBDeviceMatch(qemuMonitorPtr mon,
>
>
>   int qemuMonitorJSONAddPCIHostDevice(qemuMonitorPtr mon,
> -                                    virDomainDevicePCIAddress *hostAddr,
> -                                    virDomainDevicePCIAddress *guestAddr);
> +                                    virDevicePCIAddress *hostAddr,
> +                                    virDevicePCIAddress *guestAddr);
>
>   int qemuMonitorJSONAddPCIDisk(qemuMonitorPtr mon,
>                                 const char *path,
>                                 const char *bus,
> -                              virDomainDevicePCIAddress *guestAddr);
> +                              virDevicePCIAddress *guestAddr);
>
>   int qemuMonitorJSONAddPCINetwork(qemuMonitorPtr mon,
>                                    const char *nicstr,
> -                                 virDomainDevicePCIAddress *guestAddr);
> +                                 virDevicePCIAddress *guestAddr);
>
>   int qemuMonitorJSONRemovePCIDevice(qemuMonitorPtr mon,
> -                                   virDomainDevicePCIAddress *guestAddr);
> +                                   virDevicePCIAddress *guestAddr);
>
>   int qemuMonitorJSONSendFileHandle(qemuMonitorPtr mon,
>                                     const char *fdname,
> @@ -201,11 +201,11 @@ int qemuMonitorJSONGetPtyPaths(qemuMonitorPtr mon,
>
>   int qemuMonitorJSONAttachPCIDiskController(qemuMonitorPtr mon,
>                                              const char *bus,
> -                                           virDomainDevicePCIAddress *guestAddr);
> +                                           virDevicePCIAddress *guestAddr);
>
>   int qemuMonitorJSONAttachDrive(qemuMonitorPtr mon,
>                                  const char *drivestr,
> -                               virDomainDevicePCIAddress *controllerAddr,
> +                               virDevicePCIAddress *controllerAddr,
>                                  virDomainDeviceDriveAddress *driveAddr);
>
>   int qemuMonitorJSONGetAllPCIAddresses(qemuMonitorPtr mon,
> diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c
> index edb5dfd..f299bc1 100644
> --- a/src/qemu/qemu_monitor_text.c
> +++ b/src/qemu/qemu_monitor_text.c
> @@ -1898,7 +1898,7 @@ int qemuMonitorTextAddUSBDeviceMatch(qemuMonitorPtr mon,
>   static int
>   qemuMonitorTextParsePciAddReply(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
>                                   const char *reply,
> -                                virDomainDevicePCIAddress *addr)
> +                                virDevicePCIAddress *addr)
>   {
>       char *s, *e;
>
> @@ -1960,8 +1960,8 @@ qemuMonitorTextParsePciAddReply(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
>
>
>   int qemuMonitorTextAddPCIHostDevice(qemuMonitorPtr mon,
> -                                    virDomainDevicePCIAddress *hostAddr,
> -                                    virDomainDevicePCIAddress *guestAddr)
> +                                    virDevicePCIAddress *hostAddr,
> +                                    virDevicePCIAddress *guestAddr)
>   {
>       char *cmd;
>       char *reply = NULL;
> @@ -2006,7 +2006,7 @@ cleanup:
>   int qemuMonitorTextAddPCIDisk(qemuMonitorPtr mon,
>                                 const char *path,
>                                 const char *bus,
> -                              virDomainDevicePCIAddress *guestAddr)
> +                              virDevicePCIAddress *guestAddr)
>   {
>       char *cmd = NULL;
>       char *reply = NULL;
> @@ -2058,7 +2058,7 @@ cleanup:
>
>   int qemuMonitorTextAddPCINetwork(qemuMonitorPtr mon,
>                                    const char *nicstr,
> -                                 virDomainDevicePCIAddress *guestAddr)
> +                                 virDevicePCIAddress *guestAddr)
>   {
>       char *cmd;
>       char *reply = NULL;
> @@ -2091,7 +2091,7 @@ cleanup:
>
>
>   int qemuMonitorTextRemovePCIDevice(qemuMonitorPtr mon,
> -                                   virDomainDevicePCIAddress *guestAddr)
> +                                   virDevicePCIAddress *guestAddr)
>   {
>       char *cmd = NULL;
>       char *reply = NULL;
> @@ -2439,7 +2439,7 @@ cleanup:
>
>   int qemuMonitorTextAttachPCIDiskController(qemuMonitorPtr mon,
>                                              const char *bus,
> -                                           virDomainDevicePCIAddress *guestAddr)
> +                                           virDevicePCIAddress *guestAddr)
>   {
>       char *cmd = NULL;
>       char *reply = NULL;
> @@ -2528,7 +2528,7 @@ qemudParseDriveAddReply(const char *reply,
>
>   int qemuMonitorTextAttachDrive(qemuMonitorPtr mon,
>                                  const char *drivestr,
> -                               virDomainDevicePCIAddress *controllerAddr,
> +                               virDevicePCIAddress *controllerAddr,
>                                  virDomainDeviceDriveAddress *driveAddr)
>   {
>       char *cmd = NULL;
> diff --git a/src/qemu/qemu_monitor_text.h b/src/qemu/qemu_monitor_text.h
> index 4525864..cdde88b 100644
> --- a/src/qemu/qemu_monitor_text.h
> +++ b/src/qemu/qemu_monitor_text.h
> @@ -147,20 +147,20 @@ int qemuMonitorTextAddUSBDeviceMatch(qemuMonitorPtr mon,
>
>
>   int qemuMonitorTextAddPCIHostDevice(qemuMonitorPtr mon,
> -                                    virDomainDevicePCIAddress *hostAddr,
> -                                    virDomainDevicePCIAddress *guestAddr);
> +                                    virDevicePCIAddress *hostAddr,
> +                                    virDevicePCIAddress *guestAddr);
>
>   int qemuMonitorTextAddPCIDisk(qemuMonitorPtr mon,
>                                 const char *path,
>                                 const char *bus,
> -                              virDomainDevicePCIAddress *guestAddr);
> +                              virDevicePCIAddress *guestAddr);
>
>   int qemuMonitorTextAddPCINetwork(qemuMonitorPtr mon,
>                                    const char *nicstr,
> -                                 virDomainDevicePCIAddress *guestAddr);
> +                                 virDevicePCIAddress *guestAddr);
>
>   int qemuMonitorTextRemovePCIDevice(qemuMonitorPtr mon,
> -                                   virDomainDevicePCIAddress *guestAddr);
> +                                   virDevicePCIAddress *guestAddr);
>
>   int qemuMonitorTextSendFileHandle(qemuMonitorPtr mon,
>                                     const char *fdname,
> @@ -187,11 +187,11 @@ int qemuMonitorTextGetPtyPaths(qemuMonitorPtr mon,
>
>   int qemuMonitorTextAttachPCIDiskController(qemuMonitorPtr mon,
>                                              const char *bus,
> -                                           virDomainDevicePCIAddress *guestAddr);
> +                                           virDevicePCIAddress *guestAddr);
>
>   int qemuMonitorTextAttachDrive(qemuMonitorPtr mon,
>                                  const char *drivestr,
> -                               virDomainDevicePCIAddress *controllerAddr,
> +                               virDevicePCIAddress *controllerAddr,
>                                  virDomainDeviceDriveAddress *driveAddr);
>
>   int qemuMonitorTextGetAllPCIAddresses(qemuMonitorPtr mon,
> diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
> index f1aa9b6..5106103 100644
> --- a/src/xen/xend_internal.c
> +++ b/src/xen/xend_internal.c
> @@ -46,6 +46,7 @@
>   #include "count-one-bits.h"
>   #include "virfile.h"
>   #include "viruri.h"
> +#include "device_conf.h"
>
>   /* required for cpumap_t */
>   #include<xen/dom0_ops.h>
> @@ -2732,7 +2733,7 @@ xenDaemonAttachDeviceFlags(virDomainPtr domain, const char *xml,
>               if (xenFormatSxprOnePCI(dev->data.hostdev,&buf, 0)<  0)
>                   goto cleanup;
>
> -            virDomainDevicePCIAddress PCIAddr;
> +            virDevicePCIAddress PCIAddr;
>
>               PCIAddr = dev->data.hostdev->source.subsys.u.pci;
>               virAsprintf(&target, "PCI device: %.4x:%.2x:%.2x", PCIAddr.domain,




More information about the libvir-list mailing list