Skip to content

Make translate_numa_mode return umf_result_t #439

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 22 additions & 17 deletions src/provider/provider_os_memory.c
Original file line number Diff line number Diff line change
Expand Up @@ -133,37 +133,42 @@ umf_result_t os_translate_flags(unsigned in_flags, unsigned max,
return UMF_RESULT_SUCCESS;
}

static hwloc_membind_policy_t translate_numa_mode(umf_numa_mode_t mode,
int nodemaskEmpty) {
static umf_result_t translate_numa_mode(umf_numa_mode_t mode, int nodemaskEmpty,
hwloc_membind_policy_t *numa_policy) {
switch (mode) {
case UMF_NUMA_MODE_DEFAULT:
if (!nodemaskEmpty) {
// nodeset must be empty
return -1;
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
}
return HWLOC_MEMBIND_DEFAULT;
*numa_policy = HWLOC_MEMBIND_DEFAULT;
return UMF_RESULT_SUCCESS;
case UMF_NUMA_MODE_BIND:
if (nodemaskEmpty) {
// nodeset must not be empty
return -1;
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
}
return HWLOC_MEMBIND_BIND;
*numa_policy = HWLOC_MEMBIND_BIND;
return UMF_RESULT_SUCCESS;
case UMF_NUMA_MODE_INTERLEAVE:
if (nodemaskEmpty) {
// nodeset must not be empty
return -1;
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
}
return HWLOC_MEMBIND_INTERLEAVE;
*numa_policy = HWLOC_MEMBIND_INTERLEAVE;
return UMF_RESULT_SUCCESS;
case UMF_NUMA_MODE_PREFERRED:
return HWLOC_MEMBIND_BIND;
*numa_policy = HWLOC_MEMBIND_BIND;
return UMF_RESULT_SUCCESS;
case UMF_NUMA_MODE_LOCAL:
if (!nodemaskEmpty) {
// nodeset must be empty
return -1;
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
}
return HWLOC_MEMBIND_BIND;
*numa_policy = HWLOC_MEMBIND_BIND;
return UMF_RESULT_SUCCESS;
}
return -1;
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
}

static int getHwlocMembindFlags(umf_numa_mode_t mode) {
Expand All @@ -179,7 +184,6 @@ static int getHwlocMembindFlags(umf_numa_mode_t mode) {
static umf_result_t translate_params(umf_os_memory_provider_params_t *in_params,
os_memory_provider_t *provider) {
umf_result_t result;
int ret;

result = os_translate_mem_protection_flags(in_params->protection,
&provider->protection);
Expand All @@ -190,12 +194,13 @@ static umf_result_t translate_params(umf_os_memory_provider_params_t *in_params,

// NUMA config
int emptyNodeset = (!in_params->maxnode || !in_params->nodemask);
ret = translate_numa_mode(in_params->numa_mode, emptyNodeset);
if (ret < 0) {
result = translate_numa_mode(in_params->numa_mode, emptyNodeset,
&provider->numa_policy);
if (result != UMF_RESULT_SUCCESS) {
LOG_ERR("incorrect NUMA mode: %u", in_params->numa_mode);
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
return result;
}
provider->numa_policy = ret;

provider->numa_flags = getHwlocMembindFlags(in_params->numa_mode);

return nodemask_to_hwloc_nodeset(in_params->nodemask, in_params->maxnode,
Expand Down