Scan the PCI bus by providing a fake sysfs with a PCI device. The fake sysfs
is a packed file hierarchy linked into the test.

Signed-off-by: Jan Viktorin <viktorin at rehivetech.com>
---
 app/test/Makefile                                  |   4 ++
 app/test/test_pci.c                                |  58 +++++++++++++++++++--
 .../bus/pci/devices/0000:01:00.0/class             |   1 +
 .../bus/pci/devices/0000:01:00.0/config            | Bin 0 -> 64 bytes
 .../devices/0000:01:00.0/consistent_dma_mask_bits  |   1 +
 .../bus/pci/devices/0000:01:00.0/device            |   1 +
 .../bus/pci/devices/0000:01:00.0/dma_mask_bits     |   1 +
 .../bus/pci/devices/0000:01:00.0/enable            |   1 +
 .../bus/pci/devices/0000:01:00.0/irq               |   1 +
 .../bus/pci/devices/0000:01:00.0/modalias          |   1 +
 .../bus/pci/devices/0000:01:00.0/msi_bus           |   1 +
 .../bus/pci/devices/0000:01:00.0/numa_node         |   1 +
 .../bus/pci/devices/0000:01:00.0/resource          |  13 +++++
 .../bus/pci/devices/0000:01:00.0/sriov_numvfs      |   1 +
 .../bus/pci/devices/0000:01:00.0/sriov_totalvfs    |   1 +
 .../bus/pci/devices/0000:01:00.0/subsystem_device  |   1 +
 .../bus/pci/devices/0000:01:00.0/subsystem_vendor  |   1 +
 .../bus/pci/devices/0000:01:00.0/uevent            |   6 +++
 .../bus/pci/devices/0000:01:00.0/vendor            |   1 +
 19 files changed, 92 insertions(+), 3 deletions(-)
 create mode 100644 app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/class
 create mode 100644 app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/config
 create mode 100644 
app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/consistent_dma_mask_bits
 create mode 100644 app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/device
 create mode 100644 
app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/dma_mask_bits
 create mode 100644 app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/enable
 create mode 100644 app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/irq
 create mode 100644 
app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/modalias
 create mode 100644 app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/msi_bus
 create mode 100644 
app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/numa_node
 create mode 100644 
app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/resource
 create mode 100644 
app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/sriov_numvfs
 create mode 100644 
app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/sriov_totalvfs
 create mode 100644 
app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/subsystem_device
 create mode 100644 
app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/subsystem_vendor
 create mode 100644 app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/uevent
 create mode 100644 app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/vendor

diff --git a/app/test/Makefile b/app/test/Makefile
index 90acd63..6c3d8c2 100644
--- a/app/test/Makefile
+++ b/app/test/Makefile
@@ -81,6 +81,10 @@ $(eval $(call resource,test_resource_tar,resource.tar))
 resource.tar: test_resource.c
        tar -C $(dir $<) -cf $@ $(notdir $<)
 SRCS-y += test_pci.c
+$(eval $(call resource,test_pci_sysfs,test_pci_sysfs.tar))
+test_pci_sysfs.tar: test_pci_sysfs
+       tar -C $(dir $<) -cf $@ $(notdir $<)
+
 SRCS-y += test_prefetch.c
 SRCS-y += test_byteorder.c
 SRCS-y += test_per_lcore.c
diff --git a/app/test/test_pci.c b/app/test/test_pci.c
index df12bb2..3c6c955 100644
--- a/app/test/test_pci.c
+++ b/app/test/test_pci.c
@@ -43,6 +43,7 @@
 #include <rte_devargs.h>

 #include "test.h"
+#include "resource.h"

 /* Generic maximum number of drivers to have room to allocate all drivers */
 #define NUM_MAX_DRIVERS 256
@@ -215,37 +216,88 @@ static int test_pci_sysfs(void)
        return 0;
 }

-/* real drivers (not used for testing) */
+/* real devices & drivers (not used for testing) */
 struct pci_driver_list real_pci_driver_list =
        TAILQ_HEAD_INITIALIZER(real_pci_driver_list);
+struct pci_device_list real_pci_device_list =
+       TAILQ_HEAD_INITIALIZER(real_pci_device_list);
+
+REGISTER_LINKED_RESOURCE(test_pci_sysfs);

 static int
 test_pci_setup(void)
 {
+       struct rte_pci_device *dev;
        struct rte_pci_driver *dr;
+       const struct resource *r;
+       int ret;
+
+       r = resource_find("test_pci_sysfs");
+       TEST_ASSERT_NOT_NULL(r, "missing resource test_pci_sysfs");
+
+       ret = resource_untar(r);
+       TEST_ASSERT_SUCCESS(ret, "failed to untar %s", r->name);
+
+       ret = setenv("SYSFS_PCI_DEVICES", "test_pci_sysfs/bus/pci/devices", 1);
+       TEST_ASSERT_SUCCESS(ret, "failed to setenv");

-       /* Unregister original driver list */
+       /* Unregister original devices & drivers lists */
        while (!TAILQ_EMPTY(&pci_driver_list)) {
                dr = TAILQ_FIRST(&pci_driver_list);
                rte_eal_pci_unregister(dr);
                TAILQ_INSERT_TAIL(&real_pci_driver_list, dr, next);
        }

+       while (!TAILQ_EMPTY(&pci_device_list)) {
+               dev = TAILQ_FIRST(&pci_device_list);
+               TAILQ_REMOVE(&pci_device_list, dev, next);
+               TAILQ_INSERT_TAIL(&real_pci_device_list, dev, next);
+       }
+
+       ret = rte_eal_pci_scan();
+       TEST_ASSERT_SUCCESS(ret, "failed to scan PCI bus");
+       rte_eal_pci_dump(stdout);
+
        return 0;
 }

 static int
 test_pci_cleanup(void)
 {
+       struct rte_pci_device *dev;
        struct rte_pci_driver *dr;
+       const struct resource *r;
+       int ret;
+
+       unsetenv("SYSFS_PCI_DEVICES");
+
+       r = resource_find("test_pci_sysfs");
+       TEST_ASSERT_NOT_NULL(r, "missing resource test_pci_sysfs");
+
+       ret = resource_rm_by_tar(r);
+       TEST_ASSERT_SUCCESS(ret, "Failed to delete resource %s", r->name);

-       /* Restore original driver list */
+       /* FIXME: there is no API in DPDK to free a rte_pci_device so we
+          cannot free the devices in the right way. Let's assume that we
+          don't care for tests. */
+       while (!TAILQ_EMPTY(&pci_device_list)) {
+               dev = TAILQ_FIRST(&pci_device_list);
+               TAILQ_REMOVE(&pci_device_list, dev, next);
+       }
+
+       /* Restore original devices & drivers lists */
        while (!TAILQ_EMPTY(&real_pci_driver_list)) {
                dr = TAILQ_FIRST(&real_pci_driver_list);
                TAILQ_REMOVE(&real_pci_driver_list, dr, next);
                rte_eal_pci_register(dr);
        }

+       while (!TAILQ_EMPTY(&real_pci_device_list)) {
+               dev = TAILQ_FIRST(&real_pci_device_list);
+               TAILQ_REMOVE(&real_pci_device_list, dev, next);
+               TAILQ_INSERT_TAIL(&pci_device_list, dev, next);
+       }
+
        return 0;
 }

diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/class 
b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/class
new file mode 100644
index 0000000..2f9c1da
--- /dev/null
+++ b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/class
@@ -0,0 +1 @@
+0x020000
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/config 
b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/config
new file mode 100644
index 
0000000000000000000000000000000000000000..7752421cf13a5aa00a28eaee02cac2add9ce5566
GIT binary patch
literal 64
zcmZo`_$|QBBEZ1Nz`(@7(7?dMz;S^A2oxWHNCpNT2LUi2#BOU~22l(SV3L7>8>k5Y
DD^Ld(

literal 0
HcmV?d00001

diff --git 
a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/consistent_dma_mask_bits 
b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/consistent_dma_mask_bits
new file mode 100644
index 0000000..900731f
--- /dev/null
+++ 
b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/consistent_dma_mask_bits
@@ -0,0 +1 @@
+64
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/device 
b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/device
new file mode 100644
index 0000000..9e4789e
--- /dev/null
+++ b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/device
@@ -0,0 +1 @@
+0x10fb
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/dma_mask_bits 
b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/dma_mask_bits
new file mode 100644
index 0000000..900731f
--- /dev/null
+++ b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/dma_mask_bits
@@ -0,0 +1 @@
+64
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/enable 
b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/enable
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/enable
@@ -0,0 +1 @@
+1
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/irq 
b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/irq
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/irq
@@ -0,0 +1 @@
+0
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/modalias 
b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/modalias
new file mode 100644
index 0000000..f4c76ed
--- /dev/null
+++ b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/modalias
@@ -0,0 +1 @@
+pci:v00008086d000010FBsv00008086sd00000003bc02sc00i00
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/msi_bus 
b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/msi_bus
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/msi_bus
@@ -0,0 +1 @@
+1
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/numa_node 
b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/numa_node
new file mode 100644
index 0000000..3a2e3f4
--- /dev/null
+++ b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/numa_node
@@ -0,0 +1 @@
+-1
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/resource 
b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/resource
new file mode 100644
index 0000000..f388929
--- /dev/null
+++ b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/resource
@@ -0,0 +1,13 @@
+0x00000000d0080000 0x00000000d00fffff 0x000000000014220c
+0x0000000000000000 0x0000000000000000 0x0000000000000000
+0x000000000000e020 0x000000000000e03f 0x0000000000040101
+0x0000000000000000 0x0000000000000000 0x0000000000000000
+0x00000000d0104000 0x00000000d0107fff 0x000000000014220c
+0x0000000000000000 0x0000000000000000 0x0000000000000000
+0x0000000000000000 0x0000000000000000 0x0000000000000000
+0x00000000ab000000 0x00000000ab0fffff 0x0000000000140204
+0x0000000000000000 0x0000000000000000 0x0000000000000000
+0x0000000000000000 0x0000000000000000 0x0000000000000000
+0x00000000ab100000 0x00000000ab1fffff 0x0000000000140204
+0x0000000000000000 0x0000000000000000 0x0000000000000000
+0x0000000000000000 0x0000000000000000 0x0000000000000000
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/sriov_numvfs 
b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/sriov_numvfs
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/sriov_numvfs
@@ -0,0 +1 @@
+0
diff --git 
a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/sriov_totalvfs 
b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/sriov_totalvfs
new file mode 100644
index 0000000..4b9026d
--- /dev/null
+++ b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/sriov_totalvfs
@@ -0,0 +1 @@
+63
diff --git 
a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/subsystem_device 
b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/subsystem_device
new file mode 100644
index 0000000..89a932c
--- /dev/null
+++ b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/subsystem_device
@@ -0,0 +1 @@
+0x0003
diff --git 
a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/subsystem_vendor 
b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/subsystem_vendor
new file mode 100644
index 0000000..ce6dc4d
--- /dev/null
+++ b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/subsystem_vendor
@@ -0,0 +1 @@
+0x8086
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/uevent 
b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/uevent
new file mode 100644
index 0000000..1dbe34d
--- /dev/null
+++ b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/uevent
@@ -0,0 +1,6 @@
+DRIVER=ixgbe
+PCI_CLASS=20000
+PCI_ID=8086:10FB
+PCI_SUBSYS_ID=8086:0003
+PCI_SLOT_NAME=0000:01:00.0
+MODALIAS=pci:v00008086d000010FBsv00008086sd00000003bc02sc00i00
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/vendor 
b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/vendor
new file mode 100644
index 0000000..ce6dc4d
--- /dev/null
+++ b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/vendor
@@ -0,0 +1 @@
+0x8086
-- 
2.8.0

Reply via email to