Hardware Locality (hwloc) 1.6.2

- Main Page
- Related Pages
- Modules
- Data Structures

openfabrics-verbs.h
1 /*
2 * Copyright © 2009 CNRS
3 * Copyright © 2009-2012 inria. All rights reserved.
4 * Copyright © 2009-2010 Université Bordeaux 1
5 * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
6 * See COPYING in top-level directory.
7 */
8
19 #ifndef HWLOC_OPENFABRICS_VERBS_H
20 #define HWLOC_OPENFABRICS_VERBS_H
21
22 #include <hwloc.h>
23 #include <hwloc/autogen/config.h>
24 #include <hwloc/linux.h>
25
26 #include <infiniband/verbs.h>
27
28
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32
33
48 static inline int
49 hwloc_ibv_get_device_cpuset(hwloc_topology_t topology ,
50 struct ibv_device *ibdev, hwloc_cpuset_t set)
51 {
52 #ifdef HWLOC_LINUX_SYS
53 /* If we're on Linux, use the verbs-provided sysfs mechanism to
54 get the local cpus */
55 #define HWLOC_OPENFABRICS_VERBS_SYSFS_PATH_MAX 128
56 char path[HWLOC_OPENFABRICS_VERBS_SYSFS_PATH_MAX];
57 FILE *sysfile = NULL;
58
59 if (!hwloc_topology_is_thissystem(topology)) {
60 errno = EINVAL;
61 return -1;
62 }
63
64 sprintf(path, "/sys/class/infiniband/%s/device/local_cpus",
65 ibv_get_device_name(ibdev));
66 sysfile = fopen(path, "r");
67 if (!sysfile)
68 return -1;
69
70 hwloc_linux_parse_cpumap_file(sysfile, set);
71 if (hwloc_bitmap_iszero(set))
72 hwloc_bitmap_copy(set, hwloc_topology_get_complete_cpuset(topology));
73
74 fclose(sysfile);
75 #else
76 /* Non-Linux systems simply get a full cpuset */
77 hwloc_bitmap_copy(set, hwloc_topology_get_complete_cpuset(topology));
78 #endif
79 return 0;
80 }
81
98 static inline hwloc_obj_t
99 hwloc_ibv_get_device_osdev_by_name(hwloc_topology_t topology,
100 const char *ibname)
101 {
102 hwloc_obj_t osdev = NULL;
103 while ((osdev = hwloc_get_next_osdev(topology, osdev)) != NULL) {
104 if (HWLOC_OBJ_OSDEV_OPENFABRICS == osdev->attr->osdev.type
105 && osdev->name && !strcmp(ibname, osdev->name))
106 return osdev;
107 }
108 return NULL;
109 }
110
114 #ifdef __cplusplus
115 } /* extern "C" */
116 #endif
117
118
119 #endif /* HWLOC_OPENFABRICS_VERBS_H */