7 #ifndef HWLOC_PLUGINS_H 8 #define HWLOC_PLUGINS_H 18 #ifdef HWLOC_INSIDE_PLUGIN 20 #ifdef HWLOC_HAVE_LTDL 187 struct hwloc_topology * topology;
415 static __hwloc_inline
int 418 #ifdef HWLOC_INSIDE_PLUGIN 420 #ifdef HWLOC_HAVE_LTDL 421 lt_dlhandle handle = lt_dlopen(NULL);
423 void *handle = dlopen(NULL, RTLD_NOW|RTLD_LOCAL);
428 #ifdef HWLOC_HAVE_LTDL 429 sym = lt_dlsym(handle, symbol);
432 sym = dlsym(handle, symbol);
436 static int verboseenv_checked = 0;
437 static int verboseenv_value = 0;
438 if (!verboseenv_checked) {
439 const char *verboseenv = getenv(
"HWLOC_PLUGINS_VERBOSE");
440 verboseenv_value = verboseenv ? atoi(verboseenv) : 0;
441 verboseenv_checked = 1;
443 if (verboseenv_value)
444 fprintf(stderr,
"Plugin `%s' disabling itself because it cannot find the `%s' core symbol.\n",
465 static __hwloc_inline
int 468 unsigned baseclass = classid >> 8;
469 return (baseclass == 0x03
475 || baseclass == 0x12 );
482 static __hwloc_inline
int 494 static __hwloc_inline
int 507 static __hwloc_inline
int 559 unsigned *secondary_busp,
unsigned *subordinate_busp,
560 const unsigned char *config);
hwloc_obj_osdev_type_t type
Definition: hwloc.h:665
void hwloc_insert_object_by_parent(struct hwloc_topology *topology, hwloc_obj_t parent, hwloc_obj_t obj)
Insert an object somewhere in the topology.
int hwloc_backend_enable(struct hwloc_backend *backend)
Enable a previously allocated and setup backend.
Misc objects that gets added below anything else.
Definition: plugins.h:125
int hwloc_hide_errors(void)
Check whether insertion errors are hidden.
unsigned abi
Component ABI version, set to HWLOC_COMPONENT_ABI.
Definition: plugins.h:263
unsigned long flags
Component flags, unused for now.
Definition: plugins.h:301
hwloc_disc_phase_e
Discovery phase.
Definition: plugins.h:100
struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev
enum hwloc_obj_osdev_type_e hwloc_obj_osdev_type_t
Type of a OS device.
struct hwloc_topology * hwloc_topology_t
Topology context.
Definition: hwloc.h:691
int(* discover)(struct hwloc_backend *backend, struct hwloc_disc_status *status)
Main discovery callback. returns -1 on error, either because it couldn't add its objects ot the exist...
Definition: plugins.h:221
int hwloc_obj_add_children_sets(hwloc_obj_t obj)
Setup object cpusets/nodesets by OR'ing its children.
Ignore all objects of this type.
Definition: hwloc.h:2148
static int hwloc_filter_check_keep_object_type(hwloc_topology_t topology, hwloc_obj_type_t type)
Check whether a non-I/O object type should be filtered-out.
Definition: plugins.h:495
Discovery component structure.
Definition: plugins.h:38
int hwloc_pcidisc_find_bridge_buses(unsigned domain, unsigned bus, unsigned dev, unsigned func, unsigned *secondary_busp, unsigned *subordinate_busp, const unsigned char *config)
Fills the attributes of the given PCI bridge using the given PCI config space.
void * data
Component data, pointing to a struct hwloc_disc_component or struct hwloc_xml_component.
Definition: plugins.h:304
hwloc_obj_type_t type
Type of object.
Definition: hwloc.h:397
hwloc_obj_type_t hwloc_pcidisc_check_bridge_type(unsigned device_class, const unsigned char *config)
Return the hwloc object type (PCI device or Bridge) for the given class and configuration space...
int(* get_pci_busid_cpuset)(struct hwloc_backend *backend, struct hwloc_pcidev_attr_s *busid, hwloc_bitmap_t cpuset)
Callback to retrieve the locality of a PCI object. Called by the PCI core when attaching PCI hierarch...
Definition: plugins.h:227
struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev
xml or synthetic, platform-specific components such as bgq. Discovers everything including CPU...
Definition: plugins.h:105
hwloc_obj_type_t
Type of topology object.
Definition: hwloc.h:176
Discovery backend structure.
Definition: plugins.h:183
int(* init)(unsigned long flags)
Process-wide component initialization callback.
Definition: plugins.h:282
unsigned phases
Discovery phases performed by this component. OR'ed set of hwloc_disc_phase_t.
Definition: plugins.h:47
Attach PCI devices and bridges to existing CPU objects.
Definition: plugins.h:117
void(* disable)(struct hwloc_backend *backend)
Callback for freeing the private_data. May be NULL.
Definition: plugins.h:214
hwloc_disc_phase_t phase
The current discovery phase that is performed. Must match one of the phases in the component phases f...
Definition: plugins.h:154
int hwloc_topology_get_type_filter(hwloc_topology_t topology, hwloc_obj_type_t type, enum hwloc_type_filter_e *filter)
Get the current filtering for the given object type.
int is_thissystem
Backend-specific 'is_thissystem' property. Set to 0 if the backend disables the thissystem flag for t...
Definition: plugins.h:207
unsigned excluded_phases
Dynamically excluded phases. If a component decides during discovery that some phases are no longer n...
Definition: plugins.h:159
The data field must point to a struct hwloc_disc_component.
Definition: plugins.h:250
hwloc_type_filter_e
Type filtering flags.
Definition: hwloc.h:2134
struct hwloc_backend * hwloc_backend_alloc(struct hwloc_topology *topology, struct hwloc_disc_component *component)
Allocate a backend structure, set good default values, initialize backend->component and topology...
unsigned long flags
Backend flags, currently always 0.
Definition: plugins.h:199
int hwloc_pcidisc_tree_attach(struct hwloc_topology *topology, struct hwloc_obj *tree)
Add some hostbridges on top of the given tree of PCI objects and attach them to the topology...
Only keep likely-important objects of the given type.
Definition: hwloc.h:2177
void(* finalize)(unsigned long flags)
Process-wide component termination callback.
Definition: plugins.h:295
unsigned short class_id
Definition: hwloc.h:639
void hwloc_pcidisc_tree_insert_by_busid(struct hwloc_obj **treep, struct hwloc_obj *obj)
Insert a PCI object in the given PCI tree by looking at PCI bus IDs.
PCI device (filtered out by default).
Definition: hwloc.h:269
struct hwloc_obj * hwloc_pci_find_parent_by_busid(struct hwloc_topology *topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)
Find the normal parent of a PCI bus ID.
I/O discovery that requires PCI devices (OS devices such as OpenCL, CUDA, etc.).
Definition: plugins.h:121
unsigned priority
Component priority. Used to sort topology->components, higher priority first. Also used to decide bet...
Definition: plugins.h:76
unsigned long flags
OR'ed set of hwloc_disc_status_flag_e.
Definition: plugins.h:162
Structure of a topology object.
Definition: hwloc.h:395
enum hwloc_disc_phase_e hwloc_disc_phase_t
Discovery phase.
static int hwloc_plugin_check_namespace(const char *pluginname, const char *symbol)
Make sure that plugins can lookup core symbols.
Definition: plugins.h:416
unsigned excluded_phases
Component phases to exclude, as an OR'ed set of hwloc_disc_phase_t.
Definition: plugins.h:57
The data field must point to a struct hwloc_xml_component.
Definition: plugins.h:253
static int hwloc_filter_check_pcidev_subtype_important(unsigned classid)
Check whether the given PCI device classid is important.
Definition: plugins.h:466
Operating system device (filtered out by default).
Definition: hwloc.h:279
struct hwloc_bitmap_s * hwloc_bitmap_t
Set of bits represented as an opaque pointer to an internal bitmap.
Definition: bitmap.h:68
hwloc_component_type_t type
Component type.
Definition: plugins.h:298
hwloc_obj_t hwloc__insert_object_by_cpuset(struct hwloc_topology *topology, hwloc_obj_t root, hwloc_obj_t obj, const char *reason)
Add an object to the topology.
Discovery status structure.
Definition: plugins.h:150
unsigned enabled_by_default
Enabled by default. If unset, if will be disabled unless explicitly requested.
Definition: plugins.h:81
int hwloc_topology_reconnect(hwloc_topology_t topology, unsigned long flags)
Request a reconnection of children and levels in the topology.
union hwloc_obj_attr_u * attr
Object type-specific Attributes, may be NULL if no attribute value was found.
Definition: hwloc.h:414
hwloc_obj_t hwloc_alloc_setup_object(hwloc_topology_t topology, hwloc_obj_type_t type, unsigned os_index)
Allocate and initialize an object of the given type and physical index.
unsigned hwloc_pcidisc_find_cap(const unsigned char *config, unsigned cap)
Return the offset of the given capability in the PCI config space buffer.
int hwloc_pcidisc_find_linkspeed(const unsigned char *config, unsigned offset, float *linkspeed)
Fill linkspeed by reading the PCI config space where PCI_CAP_ID_EXP is at position offset...
Final tweaks to a ready-to-use topology. This phase runs once the topology is loaded, before it is returned to the topology. Hence it may only use the main hwloc API for modifying the topology, for instance by restricting it, adding info attributes, etc.
Definition: plugins.h:136
Annotating existing objects, adding distances, etc.
Definition: plugins.h:129
Generic component structure.
Definition: plugins.h:261
enum hwloc_component_type_e hwloc_component_type_t
Generic component type.
hwloc_disc_status_flag_e
Discovery status flags.
Definition: plugins.h:140
void * private_data
Backend private data, or NULL if none.
Definition: plugins.h:210
const char * name
Name. If this component is built as a plugin, this name does not have to match the plugin filename...
Definition: plugins.h:42
static int hwloc_filter_check_keep_object(hwloc_topology_t topology, hwloc_obj_t obj)
Check whether the given object should be filtered-out.
Definition: plugins.h:508
unsigned phases
Discovery phases performed by this component, possibly without some of them if excluded by other comp...
Definition: plugins.h:196
CPU discovery.
Definition: plugins.h:109
Attach memory to existing CPU objects.
Definition: plugins.h:113
Operating system dma engine device. For instance the "dma0chan0" DMA channel on Linux.
Definition: hwloc.h:350
static int hwloc_filter_check_osdev_subtype_important(hwloc_obj_osdev_type_t subtype)
Check whether the given OS device subtype is important.
Definition: plugins.h:483
The sets of allowed resources were already retrieved.
Definition: plugins.h:142
hwloc_component_type_e
Generic component type.
Definition: plugins.h:248