Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00015 #ifndef HWLOC_MYRIEXPRESS_H
00016 #define HWLOC_MYRIEXPRESS_H
00017
00018 #include <hwloc.h>
00019 #include <hwloc/autogen/config.h>
00020 #include <hwloc/linux.h>
00021
00022 #include <myriexpress.h>
00023
00024
00025 #ifdef __cplusplus
00026 extern "C" {
00027 #endif
00028
00029
00040 static inline int
00041 hwloc_mx_board_get_device_cpuset(hwloc_topology_t topology,
00042 unsigned id, hwloc_cpuset_t set)
00043 {
00044 uint32_t in, out;
00045
00046 in = id;
00047 if (mx_get_info(NULL, MX_NUMA_NODE, &in, sizeof(in), &out, sizeof(out)) != MX_SUCCESS) {
00048 errno = EINVAL;
00049 return -1;
00050 }
00051
00052 if (out != (uint32_t) -1) {
00053 hwloc_obj_t obj = NULL;
00054 while ((obj = hwloc_get_next_obj_by_type(topology, HWLOC_OBJ_NODE, obj)) != NULL)
00055 if (obj->os_index == out) {
00056 hwloc_bitmap_copy(set, obj->cpuset);
00057 goto out;
00058 }
00059 }
00060
00061 hwloc_bitmap_copy(set, hwloc_topology_get_complete_cpuset(topology));
00062
00063 out:
00064 return 0;
00065 }
00066
00073 static inline int
00074 hwloc_mx_endpoint_get_device_cpuset(hwloc_topology_t topology,
00075 mx_endpoint_t endpoint, hwloc_cpuset_t set)
00076 {
00077 uint64_t nid;
00078 uint32_t nindex, eid;
00079 mx_endpoint_addr_t eaddr;
00080
00081 if (mx_get_endpoint_addr(endpoint, &eaddr) != MX_SUCCESS) {
00082 errno = EINVAL;
00083 return -1;
00084 }
00085
00086 if (mx_decompose_endpoint_addr(eaddr, &nid, &eid) != MX_SUCCESS) {
00087 errno = EINVAL;
00088 return -1;
00089 }
00090
00091 if (mx_nic_id_to_board_number(nid, &nindex) != MX_SUCCESS) {
00092 errno = EINVAL;
00093 return -1;
00094 }
00095
00096 return hwloc_mx_board_get_device_cpuset(topology, nindex, set);
00097 }
00098
00102 #ifdef __cplusplus
00103 }
00104 #endif
00105
00106
00107 #endif