On 08/12/2011 07:14 PM, Roopa Prabhu wrote:

-        get_physical_function(sysfs_path, d);
-        get_virtual_functions(sysfs_path, d);
+        if (!pciGetPhysicalFunction(sysfs_path,&d->pci_dev.physical_function))
+            d->pci_dev.flags |= VIR_NODE_DEV_CAP_FLAG_PCI_PHYSICAL_FUNCTION;
+
+        if (!pciGetVirtualFunctions(sysfs_path,&d->pci_dev.virtual_functions,
+&d->pci_dev.num_virtual_functions) ||
+            d->pci_dev.num_virtual_functions>  0)
+            d->pci_dev.flags |= VIR_NODE_DEV_CAP_FLAG_PCI_VIRTUAL_FUNCTION;

          VIR_FREE(sysfs_path);


[...]
diff --git a/src/util/pci.h b/src/util/pci.h
index a351baf..367881e 100644
--- a/src/util/pci.h
+++ b/src/util/pci.h
@@ -27,6 +27,13 @@
  typedef struct _pciDevice pciDevice;
  typedef struct _pciDeviceList pciDeviceList;

+struct pci_config_address {
+    unsigned int domain;
+    unsigned int bus;
+    unsigned int slot;
+    unsigned int function;
+};
+
  pciDevice *pciGetDevice      (unsigned       domain,
                                unsigned       bus,
                                unsigned       slot,
@@ -74,4 +81,22 @@ int pciDeviceIsAssignable(pciDevice *dev,
                            int strict_acs_check);
  int pciWaitForDeviceCleanup(pciDevice *dev, const char *matcher);

+#ifdef __linux__
+
+#  define pciGetPhysicalFunction(s,a) pciGetPhysicalFunctionLinux(s,a)
+int pciGetPhysicalFunctionLinux(const char *sysfs_path,
+                                struct pci_config_address **phys_fn);
+
+#  define pciGetVirtualFunctions(s,a,n) pciGetVirtualFunctionsLinux(s,a,n)
+int pciGetVirtualFunctionsLinux(const char *sysfs_path,
+                                struct pci_config_address ***virtual_functions,
+                                unsigned int *num_virtual_functions);
+
+#else /* __linux__ */
+
+#  define pciGetPhysicalFunction(s,a)
+#  define pciGetVirtualFunctions(s,a,n)
+
I don't think these #defines will produce compilable code if they are used above. You'll probably have to implement functions for them.

  Stefan
+#endif
+
  #endif /* __VIR_PCI_H__ */


--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to