]> xenbits.xensource.com Git - libvirt.git/commitdiff
conf: new functions to check if PCI address is wanted/present
authorLaine Stump <laine@laine.org>
Wed, 18 May 2016 16:04:42 +0000 (12:04 -0400)
committerLaine Stump <laine@laine.org>
Fri, 20 May 2016 17:54:25 +0000 (13:54 -0400)
In order to allow <address type='pci'/> with no other attributes to
mean "I want a PCI address, but any PCI address will do" (just as
having no <address> at all usually indicates), we will need to change
several places in the code from a simple "info->type == (or !=)
VIR_DOMAIN_DEVICE_ADDRESS_TYPE_(PCI|NONE)" into something slightly
more complex, this patch adds to new functions that take a
virDomainDeviceInfoPtr and return true/false depending on 1) whether
the current state of the info indicates that we "want" a PCI address
for this device (virDeviceInfoPCIAddressWanted()) and 2) whether this
device already has a valid PCI address
(virDeviceInfoPCIAddressPresent()).

Both of these functions required the simpler check for whether a pci
address is "empty" (i.e. all of its attributes are 0, which can never
happen in a real PCI address, since slot 0 of bus 0 of domain 0 is
always reserved), so that function is also added.

src/conf/device_conf.h

index 46c720dc33cea81e3044e19574e4c8869eae546c..847564b361e5f6be522dbb229167aabed36c5b64 100644 (file)
@@ -184,6 +184,27 @@ typedef struct _virDomainDeviceInfo {
 int virPCIDeviceAddressIsValid(virPCIDeviceAddressPtr addr,
                                bool report);
 
+static inline bool
+virPCIDeviceAddressIsEmpty(const virPCIDeviceAddress *addr)
+{
+    return !(addr->domain || addr->bus || addr->slot);
+}
+
+static inline bool
+virDeviceInfoPCIAddressWanted(const virDomainDeviceInfo *info)
+{
+    return info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE ||
+        (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI &&
+         virPCIDeviceAddressIsEmpty(&info->addr.pci));
+}
+
+static inline bool
+virDeviceInfoPCIAddressPresent(const virDomainDeviceInfo *info)
+{
+    return info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI &&
+       !virPCIDeviceAddressIsEmpty(&info->addr.pci);
+}
+
 int virPCIDeviceAddressParseXML(xmlNodePtr node,
                                 virPCIDeviceAddressPtr addr);