if (!(hwloc_topology_get_flags(topology) & (HWLOC_TOPOLOGY_FLAG_IO_DEVICES|HWLOC_TOPOLOGY_FLAG_WHOLE_IO)))
return 0;
+ if (hwloc_get_next_pcidev(topology, NULL)) {
+ hwloc_debug("%s", "PCI objects already added, ignoring linuxpci backend.\n");
+ return 0;
+ }
+
/* hackily find the linux backend to steal its fsroot */
tmpbackend = topology->backends;
while (tmpbackend) {
backend = hwloc_backend_alloc(component);
if (!backend)
return NULL;
+ backend->flags = HWLOC_BACKEND_FLAG_NEED_LEVELS;
backend->discover = hwloc_look_linuxfs_pci;
return backend;
}
static struct hwloc_disc_component hwloc_linuxpci_disc_component = {
HWLOC_DISC_COMPONENT_TYPE_PCI,
"linuxpci",
- HWLOC_DISC_COMPONENT_TYPE_PCI | HWLOC_DISC_COMPONENT_TYPE_GLOBAL,
+ HWLOC_DISC_COMPONENT_TYPE_GLOBAL,
hwloc_linuxpci_component_instantiate,
19, /* after pci */
NULL
if (!(hwloc_topology_get_flags(topology) & (HWLOC_TOPOLOGY_FLAG_IO_DEVICES|HWLOC_TOPOLOGY_FLAG_WHOLE_IO)))
return 0;
+ if (hwloc_get_next_pcidev(topology, NULL)) {
+ hwloc_debug("%s", "PCI objects already added, ignoring pci backend.\n");
+ return 0;
+ }
+ printf("doing pci discovery\n");
+
if (!hwloc_topology_is_thissystem(topology)) {
hwloc_debug("%s", "\nno PCI detection (not thissystem)\n");
return 0;
backend = hwloc_backend_alloc(component);
if (!backend)
return NULL;
+ backend->flags = HWLOC_BACKEND_FLAG_NEED_LEVELS;
backend->discover = hwloc_look_pci;
backend->disable = hwloc_pci_backend_disable;
return backend;
static struct hwloc_disc_component hwloc_pci_disc_component = {
HWLOC_DISC_COMPONENT_TYPE_PCI,
"pci",
- HWLOC_DISC_COMPONENT_TYPE_PCI | HWLOC_DISC_COMPONENT_TYPE_GLOBAL,
+ HWLOC_DISC_COMPONENT_TYPE_GLOBAL,
hwloc_pci_component_instantiate,
20,
NULL
goto next_cpubackend;
if (need_reconnect && (backend->flags & HWLOC_BACKEND_FLAG_NEED_LEVELS)) {
+ hwloc_debug("Backend %s forcing a reconnect of levels\n", backend->component->name);
hwloc_connect_children(topology->levels[0][0]);
if (hwloc_connect_levels(topology) < 0)
return -1;
goto next_noncpubackend;
if (need_reconnect && (backend->flags & HWLOC_BACKEND_FLAG_NEED_LEVELS)) {
+ hwloc_debug("Backend %s forcing a reconnect of levels\n", backend->component->name);
hwloc_connect_children(topology->levels[0][0]);
if (hwloc_connect_levels(topology) < 0)
return -1;