@@ -133,37 +133,42 @@ umf_result_t os_translate_flags(unsigned in_flags, unsigned max,
133
133
return UMF_RESULT_SUCCESS ;
134
134
}
135
135
136
- static hwloc_membind_policy_t translate_numa_mode (umf_numa_mode_t mode ,
137
- int nodemaskEmpty ) {
136
+ static umf_result_t translate_numa_mode (umf_numa_mode_t mode , int nodemaskEmpty ,
137
+ hwloc_membind_policy_t * numa_policy ) {
138
138
switch (mode ) {
139
139
case UMF_NUMA_MODE_DEFAULT :
140
140
if (!nodemaskEmpty ) {
141
141
// nodeset must be empty
142
- return -1 ;
142
+ return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
143
143
}
144
- return HWLOC_MEMBIND_DEFAULT ;
144
+ * numa_policy = HWLOC_MEMBIND_DEFAULT ;
145
+ return UMF_RESULT_SUCCESS ;
145
146
case UMF_NUMA_MODE_BIND :
146
147
if (nodemaskEmpty ) {
147
148
// nodeset must not be empty
148
- return -1 ;
149
+ return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
149
150
}
150
- return HWLOC_MEMBIND_BIND ;
151
+ * numa_policy = HWLOC_MEMBIND_BIND ;
152
+ return UMF_RESULT_SUCCESS ;
151
153
case UMF_NUMA_MODE_INTERLEAVE :
152
154
if (nodemaskEmpty ) {
153
155
// nodeset must not be empty
154
- return -1 ;
156
+ return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
155
157
}
156
- return HWLOC_MEMBIND_INTERLEAVE ;
158
+ * numa_policy = HWLOC_MEMBIND_INTERLEAVE ;
159
+ return UMF_RESULT_SUCCESS ;
157
160
case UMF_NUMA_MODE_PREFERRED :
158
- return HWLOC_MEMBIND_BIND ;
161
+ * numa_policy = HWLOC_MEMBIND_BIND ;
162
+ return UMF_RESULT_SUCCESS ;
159
163
case UMF_NUMA_MODE_LOCAL :
160
164
if (!nodemaskEmpty ) {
161
165
// nodeset must be empty
162
- return -1 ;
166
+ return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
163
167
}
164
- return HWLOC_MEMBIND_BIND ;
168
+ * numa_policy = HWLOC_MEMBIND_BIND ;
169
+ return UMF_RESULT_SUCCESS ;
165
170
}
166
- return -1 ;
171
+ return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
167
172
}
168
173
169
174
static int getHwlocMembindFlags (umf_numa_mode_t mode ) {
@@ -179,7 +184,6 @@ static int getHwlocMembindFlags(umf_numa_mode_t mode) {
179
184
static umf_result_t translate_params (umf_os_memory_provider_params_t * in_params ,
180
185
os_memory_provider_t * provider ) {
181
186
umf_result_t result ;
182
- int ret ;
183
187
184
188
result = os_translate_mem_protection_flags (in_params -> protection ,
185
189
& provider -> protection );
@@ -190,12 +194,13 @@ static umf_result_t translate_params(umf_os_memory_provider_params_t *in_params,
190
194
191
195
// NUMA config
192
196
int emptyNodeset = (!in_params -> maxnode || !in_params -> nodemask );
193
- ret = translate_numa_mode (in_params -> numa_mode , emptyNodeset );
194
- if (ret < 0 ) {
197
+ result = translate_numa_mode (in_params -> numa_mode , emptyNodeset ,
198
+ & provider -> numa_policy );
199
+ if (result != UMF_RESULT_SUCCESS ) {
195
200
LOG_ERR ("incorrect NUMA mode: %u" , in_params -> numa_mode );
196
- return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
201
+ return result ;
197
202
}
198
- provider -> numa_policy = ret ;
203
+
199
204
provider -> numa_flags = getHwlocMembindFlags (in_params -> numa_mode );
200
205
201
206
return nodemask_to_hwloc_nodeset (in_params -> nodemask , in_params -> maxnode ,
0 commit comments