This source file includes following definitions.
- opal_pmix_base_frame_register
- opal_pmix_base_frame_close
- opal_pmix_base_frame_open
- lkcon
- lkdes
- mdcon
- mddes
- apcon
- apdes
- qcon
- qdes
1
2
3
4
5
6
7
8
9
10
11
12 #include "opal_config.h"
13 #include "opal/constants.h"
14
15 #include "opal/mca/mca.h"
16 #include "opal/threads/thread_usage.h"
17 #include "opal/util/argv.h"
18 #include "opal/util/output.h"
19 #include "opal/mca/base/base.h"
20
21 #include "opal/mca/pmix/pmix.h"
22 #include "opal/mca/pmix/base/base.h"
23
24
25
26
27
28
29
30
31 #include "opal/mca/pmix/base/static-components.h"
32
33
34
35 opal_pmix_base_module_t opal_pmix = { 0 };
36 bool opal_pmix_collect_all_data = true;
37 int opal_pmix_verbose_output = -1;
38 bool opal_pmix_base_async_modex = false;
39 opal_pmix_base_t opal_pmix_base = {
40 .evbase = NULL,
41 .timeout = 0,
42 .initialized = 0,
43 .lock = {
44 .mutex = OPAL_MUTEX_STATIC_INIT,
45 .cond = OPAL_PMIX_CONDITION_STATIC_INIT,
46 .active = false
47 }
48 };
49
50 static int opal_pmix_base_frame_register(mca_base_register_flag_t flags)
51 {
52 opal_pmix_base_async_modex = false;
53 (void) mca_base_var_register("opal", "pmix", "base", "async_modex", "Use asynchronous modex mode",
54 MCA_BASE_VAR_TYPE_BOOL, NULL, 0, 0, OPAL_INFO_LVL_9,
55 MCA_BASE_VAR_SCOPE_READONLY, &opal_pmix_base_async_modex);
56 opal_pmix_collect_all_data = true;
57 (void) mca_base_var_register("opal", "pmix", "base", "collect_data", "Collect all data during modex",
58 MCA_BASE_VAR_TYPE_BOOL, NULL, 0, 0, OPAL_INFO_LVL_9,
59 MCA_BASE_VAR_SCOPE_READONLY, &opal_pmix_collect_all_data);
60
61 opal_pmix_base.timeout = -1;
62 (void) mca_base_var_register("opal", "pmix", "base", "exchange_timeout",
63 "Time (in seconds) to wait for a data exchange to complete",
64 MCA_BASE_VAR_TYPE_INT, NULL, 0, 0, OPAL_INFO_LVL_3,
65 MCA_BASE_VAR_SCOPE_READONLY, &opal_pmix_base.timeout);
66 return OPAL_SUCCESS;
67 }
68
69 static int opal_pmix_base_frame_close(void)
70 {
71 int rc;
72
73 rc = mca_base_framework_components_close(&opal_pmix_base_framework, NULL);
74
75 memset(&opal_pmix, 0, sizeof(opal_pmix));
76 return rc;
77 }
78
79 static int opal_pmix_base_frame_open(mca_base_open_flag_t flags)
80 {
81 int rc;
82
83
84 rc = mca_base_framework_components_open(&opal_pmix_base_framework, flags);
85
86 memset(&opal_pmix, 0, sizeof(opal_pmix));
87
88 opal_pmix_base.evbase = opal_sync_event_base;
89
90 opal_pmix_verbose_output = opal_pmix_base_framework.framework_output;
91 return rc;
92 }
93
94 MCA_BASE_FRAMEWORK_DECLARE(opal, pmix, "OPAL PMI Client Framework",
95 opal_pmix_base_frame_register,
96 opal_pmix_base_frame_open,
97 opal_pmix_base_frame_close,
98 mca_pmix_base_static_components, 0);
99
100
101 static void lkcon(opal_pmix_pdata_t *p)
102 {
103 p->proc.jobid = OPAL_JOBID_INVALID;
104 p->proc.vpid = OPAL_VPID_INVALID;
105 OBJ_CONSTRUCT(&p->value, opal_value_t);
106 }
107 static void lkdes(opal_pmix_pdata_t *p)
108 {
109 OBJ_DESTRUCT(&p->value);
110 }
111 OBJ_CLASS_INSTANCE(opal_pmix_pdata_t,
112 opal_list_item_t,
113 lkcon, lkdes);
114
115 static void mdcon(opal_pmix_modex_data_t *p)
116 {
117 p->proc.jobid = OPAL_JOBID_INVALID;
118 p->proc.vpid = OPAL_VPID_INVALID;
119 p->blob = NULL;
120 p->size = 0;
121 }
122 static void mddes(opal_pmix_modex_data_t *p)
123 {
124 if (NULL != p->blob) {
125 free(p->blob);
126 }
127 }
128 OBJ_CLASS_INSTANCE(opal_pmix_modex_data_t,
129 opal_list_item_t,
130 mdcon, mddes);
131
132 static void apcon(opal_pmix_app_t *p)
133 {
134 p->cmd = NULL;
135 p->argv = NULL;
136 p->env = NULL;
137 p->cwd = NULL;
138 p->maxprocs = 0;
139 OBJ_CONSTRUCT(&p->info, opal_list_t);
140 }
141 static void apdes(opal_pmix_app_t *p)
142 {
143 if (NULL != p->cmd) {
144 free(p->cmd);
145 }
146 if (NULL != p->argv) {
147 opal_argv_free(p->argv);
148 }
149 if (NULL != p->env) {
150 opal_argv_free(p->env);
151 }
152 if (NULL != p->cwd) {
153 free(p->cwd);
154 }
155 OPAL_LIST_DESTRUCT(&p->info);
156 }
157 OBJ_CLASS_INSTANCE(opal_pmix_app_t,
158 opal_list_item_t,
159 apcon, apdes);
160
161 static void qcon(opal_pmix_query_t *p)
162 {
163 p->keys = NULL;
164 OBJ_CONSTRUCT(&p->qualifiers, opal_list_t);
165 }
166 static void qdes(opal_pmix_query_t *p)
167 {
168 if (NULL != p->keys) {
169 opal_argv_free(p->keys);
170 }
171 OPAL_LIST_DESTRUCT(&p->qualifiers);
172 }
173 OBJ_CLASS_INSTANCE(opal_pmix_query_t,
174 opal_list_item_t,
175 qcon, qdes);