This source file includes following definitions.
- mca_scoll_base_find_available
- init_query
1
2
3
4
5
6
7
8
9
10
11 #include <stdio.h>
12 #include <stdlib.h>
13 #include <string.h>
14
15 #include "oshmem_config.h"
16
17 #include "opal/class/opal_list.h"
18 #include "oshmem/mca/mca.h"
19 #include "opal/mca/base/base.h"
20 #include "opal/mca/base/mca_base_component_repository.h"
21
22 #include "oshmem/util/oshmem_util.h"
23 #include "oshmem/constants.h"
24 #include "oshmem/mca/scoll/scoll.h"
25 #include "oshmem/mca/scoll/base/base.h"
26
27
28
29
30 static int init_query(const mca_base_component_t * ls,
31 bool enable_progress_threads,
32 bool enable_threads);
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 int mca_scoll_base_find_available(bool enable_progress_threads,
48 bool enable_threads)
49 {
50 mca_base_component_list_item_t *cli, *next;
51 const mca_base_component_t *component;
52
53 OPAL_LIST_FOREACH_SAFE(cli, next, &oshmem_scoll_base_framework.framework_components, mca_base_component_list_item_t) {
54 component = cli->cli_component;
55
56
57
58
59 if (OSHMEM_SUCCESS != init_query(component, enable_progress_threads,
60 enable_threads)) {
61
62
63 opal_list_remove_item(&oshmem_scoll_base_framework.framework_components, &cli->super);
64 mca_base_component_close(component, oshmem_scoll_base_framework.framework_output);
65 OBJ_RELEASE(cli);
66 }
67 }
68
69
70
71
72 if (opal_list_get_size(&oshmem_scoll_base_framework.framework_components) == 0) {
73 SCOLL_VERBOSE(10,
74 "scoll:find_available: no components available!");
75 return OSHMEM_ERROR;
76 }
77
78
79
80 return OSHMEM_SUCCESS;
81 }
82
83
84
85
86
87 static int init_query(const mca_base_component_t * component,
88 bool enable_progress_threads,
89 bool enable_threads)
90 {
91 int ret;
92
93 SCOLL_VERBOSE(10,
94 "scoll:find_available: querying scoll component %s",
95 component->mca_component_name);
96
97
98
99
100 if (1 == component->mca_type_major_version
101 && 0 == component->mca_type_minor_version
102 && 0 == component->mca_type_release_version) {
103
104 mca_scoll_base_component_t *scoll =
105 (mca_scoll_base_component_t *) component;
106
107 ret = scoll->scoll_init(enable_progress_threads, enable_threads);
108 } else {
109
110
111 SCOLL_VERBOSE(10,
112 "scoll:find_available: unrecognized scoll API version (%d.%d.%d, ignored)",
113 component->mca_type_major_version,
114 component->mca_type_minor_version,
115 component->mca_type_release_version);
116 return OSHMEM_ERROR;
117 }
118
119
120
121 if (OSHMEM_SUCCESS != ret) {
122 SCOLL_VERBOSE(10,
123 "scoll:find_available: scoll component %s is not available",
124 component->mca_component_name);
125 if (NULL != component->mca_close_component) {
126 component->mca_close_component();
127 }
128 } else {
129 SCOLL_VERBOSE(10,
130 "scoll:find_available: scoll component %s is available",
131 component->mca_component_name);
132 }
133
134
135
136 return ret;
137 }