diff --git a/AUTHORS b/AUTHORS index 596769dc800..0455dfb910f 100644 --- a/AUTHORS +++ b/AUTHORS @@ -84,8 +84,6 @@ Dave Goodell, Cisco dgoodell@cisco.com David Daniel, Los Alamos National Laboratory ddd@lanl.gov -David Solt, IBM - dsolt@us.ibm.com Denis Dimick, Los Alamos National Laboratory dgdimick@lnal.gov Devendar Bureddy, Mellanox diff --git a/ompi/communicator/comm.c b/ompi/communicator/comm.c index d25405da795..0c23d515853 100644 --- a/ompi/communicator/comm.c +++ b/ompi/communicator/comm.c @@ -22,7 +22,7 @@ * and Technology (RIST). All rights reserved. * Copyright (c) 2014-2015 Intel, Inc. All rights reserved. * Copyright (c) 2015 Mellanox Technologies. All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -158,6 +158,7 @@ int ompi_comm_set_nb ( ompi_communicator_t **ncomm, /* ompi_comm_allocate */ newcomm = OBJ_NEW(ompi_communicator_t); + newcomm->super.s_info = NULL; /* fill in the inscribing hyper-cube dimensions */ newcomm->c_cube_dim = opal_cube_dim(local_size); newcomm->c_id_available = MPI_UNDEFINED; @@ -918,6 +919,12 @@ int ompi_comm_split_type (ompi_communicator_t *comm, int split_type, int key, break; } + // Copy info if there is one. + newcomp->super.s_info = OBJ_NEW(opal_info_t); + if (info) { + opal_info_dup(info, &(newcomp->super.s_info)); + } + /* Activate the communicator and init coll-component */ rc = ompi_comm_activate (&newcomp, comm, NULL, NULL, NULL, false, mode); if (OPAL_UNLIKELY(OMPI_SUCCESS != rc)) { @@ -1015,6 +1022,12 @@ int ompi_comm_dup_with_info ( ompi_communicator_t * comm, opal_info_t *info, omp snprintf(newcomp->c_name, MPI_MAX_OBJECT_NAME, "MPI COMMUNICATOR %d DUP FROM %d", newcomp->c_contextid, comm->c_contextid ); + // Copy info if there is one. + newcomp->super.s_info = OBJ_NEW(opal_info_t); + if (info) { + opal_info_dup(info, &(newcomp->super.s_info)); + } + /* activate communicator and init coll-module */ rc = ompi_comm_activate (&newcomp, comm, NULL, NULL, NULL, false, mode); if ( OMPI_SUCCESS != rc ) { @@ -1095,6 +1108,15 @@ static int ompi_comm_idup_internal (ompi_communicator_t *comm, ompi_group_t *gro return rc; } + // Copy info if there is one. + { + ompi_communicator_t *newcomp = context->newcomp; + newcomp->super.s_info = OBJ_NEW(opal_info_t); + if (info) { + opal_info_dup(info, &(newcomp->super.s_info)); + } + } + ompi_comm_request_schedule_append (request, ompi_comm_idup_getcid, subreq, subreq[0] ? 1 : 0); /* assign the newcomm now */ @@ -1472,6 +1494,10 @@ int ompi_comm_free( ompi_communicator_t **comm ) ompi_mpi_comm_parent = &ompi_mpi_comm_null.comm; } + if (NULL != ((*comm)->super.s_info)) { + OBJ_RELEASE((*comm)->super.s_info); + } + /* Release the communicator */ if ( OMPI_COMM_IS_DYNAMIC (*comm) ) { ompi_comm_num_dyncomm --; diff --git a/ompi/communicator/comm_init.c b/ompi/communicator/comm_init.c index eb4258473f0..b848478f06f 100644 --- a/ompi/communicator/comm_init.c +++ b/ompi/communicator/comm_init.c @@ -21,7 +21,7 @@ * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. * Copyright (c) 2015 Intel, Inc. All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -221,6 +221,7 @@ ompi_communicator_t *ompi_comm_allocate ( int local_size, int remote_size ) /* create new communicator element */ new_comm = OBJ_NEW(ompi_communicator_t); + new_comm->super.s_info = NULL; new_comm->c_local_group = ompi_group_allocate ( local_size ); if ( 0 < remote_size ) { new_comm->c_remote_group = ompi_group_allocate (remote_size); diff --git a/ompi/communicator/communicator.h b/ompi/communicator/communicator.h index f268ce23372..cde4826da24 100644 --- a/ompi/communicator/communicator.h +++ b/ompi/communicator/communicator.h @@ -20,7 +20,7 @@ * Copyright (c) 2014-2015 Intel, Inc. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2017 IBM Corporation. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/debuggers/predefined_gap_test.c b/ompi/debuggers/predefined_gap_test.c index aa942348401..23b25c9eb01 100644 --- a/ompi/debuggers/predefined_gap_test.c +++ b/ompi/debuggers/predefined_gap_test.c @@ -5,7 +5,7 @@ * of Tennessee Research Foundation. All rights * reserved. * Copyright (c) 2012-2013 Inria. All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/dpm/dpm.c b/ompi/dpm/dpm.c index f277805b926..090d8f521b7 100644 --- a/ompi/dpm/dpm.c +++ b/ompi/dpm/dpm.c @@ -18,7 +18,6 @@ * Copyright (c) 2013-2016 Intel, Inc. All rights reserved. * Copyright (c) 2014-2017 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -704,7 +703,7 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[], if ( array_of_info != NULL && array_of_info[i] != MPI_INFO_NULL ) { /* check for personality - this is a job-level key */ - opal_info_get (array_of_info[i], "personality", sizeof(host) - 1, host, &flag); + ompi_info_get (array_of_info[i], "personality", sizeof(host) - 1, host, &flag); if ( flag ) { personality = true; info = OBJ_NEW(opal_value_t); @@ -714,7 +713,7 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[], } /* check for 'host' */ - opal_info_get (array_of_info[i], "host", sizeof(host) - 1, host, &flag); + ompi_info_get (array_of_info[i], "host", sizeof(host) - 1, host, &flag); if ( flag ) { info = OBJ_NEW(opal_value_t); info->key = strdup(OPAL_PMIX_HOST); @@ -723,7 +722,7 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[], } /* check for 'hostfile' */ - opal_info_get (array_of_info[i], "hostfile", sizeof(host) - 1, host, &flag); + ompi_info_get (array_of_info[i], "hostfile", sizeof(host) - 1, host, &flag); if ( flag ) { info = OBJ_NEW(opal_value_t); info->key = strdup(OPAL_PMIX_HOSTFILE); @@ -732,7 +731,7 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[], } /* check for 'add-hostfile' */ - opal_info_get (array_of_info[i], "add-hostfile", sizeof(host) - 1, host, &flag); + ompi_info_get (array_of_info[i], "add-hostfile", sizeof(host) - 1, host, &flag); if ( flag ) { info = OBJ_NEW(opal_value_t); info->key = strdup(OPAL_PMIX_ADD_HOSTFILE); @@ -741,7 +740,7 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[], } /* check for 'add-host' */ - opal_info_get (array_of_info[i], "add-host", sizeof(host) - 1, host, &flag); + ompi_info_get (array_of_info[i], "add-host", sizeof(host) - 1, host, &flag); if ( flag ) { info = OBJ_NEW(opal_value_t); info->key = strdup(OPAL_PMIX_ADD_HOST); @@ -750,7 +749,7 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[], } /* check for env */ - opal_info_get (array_of_info[i], "env", sizeof(host)-1, host, &flag); + ompi_info_get (array_of_info[i], "env", sizeof(host)-1, host, &flag); if ( flag ) { envars = opal_argv_split(host, '\n'); for (j=0; NULL != envars[j]; j++) { @@ -766,7 +765,7 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[], * * This is a job-level key */ - opal_info_get (array_of_info[i], "ompi_prefix", sizeof(prefix) - 1, prefix, &flag); + ompi_info_get (array_of_info[i], "ompi_prefix", sizeof(prefix) - 1, prefix, &flag); if ( flag ) { info = OBJ_NEW(opal_value_t); info->key = strdup(OPAL_PMIX_PREFIX); @@ -775,7 +774,7 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[], } /* check for 'wdir' */ - opal_info_get (array_of_info[i], "wdir", sizeof(cwd) - 1, cwd, &flag); + ompi_info_get (array_of_info[i], "wdir", sizeof(cwd) - 1, cwd, &flag); if ( flag ) { info = OBJ_NEW(opal_value_t); info->key = strdup(OPAL_PMIX_WDIR); @@ -785,7 +784,7 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[], } /* check for 'mapper' - a job-level key */ - opal_info_get(array_of_info[i], "mapper", sizeof(mapper) - 1, mapper, &flag); + ompi_info_get(array_of_info[i], "mapper", sizeof(mapper) - 1, mapper, &flag); if ( flag ) { info = OBJ_NEW(opal_value_t); info->key = strdup(OPAL_PMIX_MAPPER); @@ -794,7 +793,7 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[], } /* check for 'display_map' - a job-level key */ - opal_info_get_bool(array_of_info[i], "display_map", &local_spawn, &flag); + ompi_info_get_bool(array_of_info[i], "display_map", &local_spawn, &flag); if ( flag ) { info = OBJ_NEW(opal_value_t); info->key = strdup(OPAL_PMIX_DISPLAY_MAP); @@ -803,7 +802,7 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[], } /* check for 'npernode' and 'ppr' - job-level key */ - opal_info_get (array_of_info[i], "npernode", sizeof(slot_list) - 1, slot_list, &flag); + ompi_info_get (array_of_info[i], "npernode", sizeof(slot_list) - 1, slot_list, &flag); if ( flag ) { info = OBJ_NEW(opal_value_t); info->key = strdup(OPAL_PMIX_PPR); @@ -811,14 +810,14 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[], (void)asprintf(&(info->data.string), "%s:n", slot_list); opal_list_append(&job_info, &info->super); } - opal_info_get (array_of_info[i], "pernode", sizeof(slot_list) - 1, slot_list, &flag); + ompi_info_get (array_of_info[i], "pernode", sizeof(slot_list) - 1, slot_list, &flag); if ( flag ) { info = OBJ_NEW(opal_value_t); info->key = strdup(OPAL_PMIX_PPR); opal_value_load(info, "1:n", OPAL_STRING); opal_list_append(&job_info, &info->super); } - opal_info_get (array_of_info[i], "ppr", sizeof(slot_list) - 1, slot_list, &flag); + ompi_info_get (array_of_info[i], "ppr", sizeof(slot_list) - 1, slot_list, &flag); if ( flag ) { info = OBJ_NEW(opal_value_t); info->key = strdup(OPAL_PMIX_PPR); @@ -827,7 +826,7 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[], } /* check for 'map_by' - job-level key */ - opal_info_get(array_of_info[i], "map_by", sizeof(slot_list) - 1, slot_list, &flag); + ompi_info_get(array_of_info[i], "map_by", sizeof(slot_list) - 1, slot_list, &flag); if ( flag ) { info = OBJ_NEW(opal_value_t); info->key = strdup(OPAL_PMIX_MAPBY); @@ -836,7 +835,7 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[], } /* check for 'rank_by' - job-level key */ - opal_info_get(array_of_info[i], "rank_by", sizeof(slot_list) - 1, slot_list, &flag); + ompi_info_get(array_of_info[i], "rank_by", sizeof(slot_list) - 1, slot_list, &flag); if ( flag ) { info = OBJ_NEW(opal_value_t); info->key = strdup(OPAL_PMIX_RANKBY); @@ -845,7 +844,7 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[], } /* check for 'bind_to' - job-level key */ - opal_info_get(array_of_info[i], "bind_to", sizeof(slot_list) - 1, slot_list, &flag); + ompi_info_get(array_of_info[i], "bind_to", sizeof(slot_list) - 1, slot_list, &flag); if ( flag ) { info = OBJ_NEW(opal_value_t); info->key = strdup(OPAL_PMIX_BINDTO); @@ -854,7 +853,7 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[], } /* check for 'preload_binary' - job-level key */ - opal_info_get_bool(array_of_info[i], "ompi_preload_binary", &local_spawn, &flag); + ompi_info_get_bool(array_of_info[i], "ompi_preload_binary", &local_spawn, &flag); if ( flag ) { info = OBJ_NEW(opal_value_t); info->key = strdup(OPAL_PMIX_PRELOAD_BIN); @@ -863,7 +862,7 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[], } /* check for 'preload_files' - job-level key */ - opal_info_get (array_of_info[i], "ompi_preload_files", sizeof(cwd) - 1, cwd, &flag); + ompi_info_get (array_of_info[i], "ompi_preload_files", sizeof(cwd) - 1, cwd, &flag); if ( flag ) { info = OBJ_NEW(opal_value_t); info->key = strdup(OPAL_PMIX_PRELOAD_FILES); @@ -874,7 +873,7 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[], /* see if this is a non-mpi job - if so, then set the flag so ORTE * knows what to do - job-level key */ - opal_info_get_bool(array_of_info[i], "ompi_non_mpi", &non_mpi, &flag); + ompi_info_get_bool(array_of_info[i], "ompi_non_mpi", &non_mpi, &flag); if (flag && non_mpi) { info = OBJ_NEW(opal_value_t); info->key = strdup(OPAL_PMIX_NON_PMI); @@ -883,7 +882,7 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[], } /* see if this is an MCA param that the user wants applied to the child job */ - opal_info_get (array_of_info[i], "ompi_param", sizeof(params) - 1, params, &flag); + ompi_info_get (array_of_info[i], "ompi_param", sizeof(params) - 1, params, &flag); if ( flag ) { opal_argv_append_unique_nosize(&app->env, params, true); } @@ -891,7 +890,7 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[], /* see if user specified what to do with stdin - defaults to * not forwarding stdin to child processes - job-level key */ - opal_info_get (array_of_info[i], "ompi_stdin_target", sizeof(stdin_target) - 1, stdin_target, &flag); + ompi_info_get (array_of_info[i], "ompi_stdin_target", sizeof(stdin_target) - 1, stdin_target, &flag); if ( flag ) { if (0 == strcmp(stdin_target, "all")) { ui32 = OPAL_VPID_WILDCARD; diff --git a/ompi/file/file.c b/ompi/file/file.c index 1c51fb43d44..a705ed80e24 100644 --- a/ompi/file/file.c +++ b/ompi/file/file.c @@ -15,7 +15,7 @@ * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. * Copyright (c) 2016 University of Houston. All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -114,11 +114,10 @@ int ompi_file_open(struct ompi_communicator_t *comm, const char *filename, file->f_comm = comm; OBJ_RETAIN(comm); - /* Present the info to the info layer */ - - if (OPAL_SUCCESS != opal_infosubscribe_change_info(&file->super, info)) { - OBJ_RELEASE(file); - return ret; + /* Copy the info for the info layer */ + file->super.s_info = OBJ_NEW(opal_info_t); + if (info) { + opal_info_dup(info, &(file->super.s_info)); } file->f_amode = amode; @@ -310,6 +309,13 @@ static void file_destructor(ompi_file_t *file) #endif } + if (NULL != file->super.s_info) { + OBJ_RELEASE(file->super.s_info); +#if OPAL_ENABLE_DEBUG + file->super.s_info = NULL; +#endif + } + /* Reset the f_to_c table entry */ if (MPI_UNDEFINED != file->f_f_to_c_index && diff --git a/ompi/file/file.h b/ompi/file/file.h index 30c606776f1..760a9217fce 100644 --- a/ompi/file/file.h +++ b/ompi/file/file.h @@ -15,7 +15,7 @@ * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. * Copyright (c) 2016 University of Houston. All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/info/info.c b/ompi/info/info.c index 71cf85bf8c1..44d5a9527a7 100644 --- a/ompi/info/info.c +++ b/ompi/info/info.c @@ -16,7 +16,7 @@ * reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -196,6 +196,57 @@ int ompi_mpiinfo_init(void) return OMPI_SUCCESS; } +// Generally ompi_info_t processing is handled by opal_info_t now. +// But to avoid compiler warnings and to avoid having to constantly +// change code to mpiinfo->super to make MPI code use the opal_info_t +// it's convenient to have ompi_info_t wrappers for some of the opal_info_t +// related calls: + +int ompi_info_dup (ompi_info_t *info, ompi_info_t **newinfo) { + return opal_info_dup (&(info->super), (opal_info_t **)newinfo); +} +int ompi_info_dup_mpistandard (ompi_info_t *info, ompi_info_t **newinfo) { + return opal_info_dup_mpistandard (&(info->super), (opal_info_t **)newinfo); +} +int ompi_info_set (ompi_info_t *info, const char *key, const char *value) { + return opal_info_set (&(info->super), key, value); +} +int ompi_info_set_value_enum (ompi_info_t *info, const char *key, int value, + mca_base_var_enum_t *var_enum) +{ + return opal_info_set_value_enum (&(info->super), key, value, var_enum); +} +int ompi_info_get (ompi_info_t *info, const char *key, int valuelen, + char *value, int *flag) +{ + return opal_info_get (&(info->super), key, valuelen, value, flag); +} +int ompi_info_get_value_enum (ompi_info_t *info, const char *key, int *value, + int default_value, mca_base_var_enum_t *var_enum, + int *flag) +{ + return opal_info_get_value_enum (&(info->super), key, value, + default_value, var_enum, flag); +} +int ompi_info_get_bool(ompi_info_t *info, char *key, bool *value, int *flag) { + return opal_info_get_bool(&(info->super), key, value, flag); +} +int ompi_info_delete (ompi_info_t *info, const char *key) { + return opal_info_delete (&(info->super), key); +} +int ompi_info_get_valuelen (ompi_info_t *info, const char *key, int *valuelen, + int *flag) +{ + return opal_info_get_valuelen (&(info->super), key, valuelen, flag); +} +int ompi_info_get_nthkey (ompi_info_t *info, int n, char *key) { + return opal_info_get_nthkey (&(info->super), n, key); +} +int ompi_info_get_nkeys(ompi_info_t *info, int *nkeys) +{ + return opal_info_get_nkeys (&(info->super), nkeys); +} + /* * Shut down MPI_Info handling diff --git a/ompi/info/info.h b/ompi/info/info.h index 46b45cc0a57..3f529eced00 100644 --- a/ompi/info/info.h +++ b/ompi/info/info.h @@ -14,7 +14,7 @@ * Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved. * Copyright (c) 2012-2015 Los Alamos National Security, LLC. All rights * reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -99,6 +99,61 @@ int ompi_info_free (ompi_info_t **info); */ int ompi_mpiinfo_finalize(void); +/** + * ompi_info_foo() wrapper around various opal_info_foo() calls + */ +OMPI_DECLSPEC int ompi_info_dup (ompi_info_t *info, ompi_info_t **newinfo); +/** + * ompi_info_foo() wrapper around various opal_info_foo() calls + */ +OMPI_DECLSPEC int ompi_info_dup_mpistandard (ompi_info_t *info, ompi_info_t **newinfo); +/** + * ompi_info_foo() wrapper around various opal_info_foo() calls + */ +OMPI_DECLSPEC int ompi_info_set (ompi_info_t *info, const char *key, const char *value); +/** + * ompi_info_foo() wrapper around various opal_info_foo() calls + */ +OMPI_DECLSPEC int ompi_info_set_value_enum (ompi_info_t *info, const char *key, int value, + mca_base_var_enum_t *var_enum); +/** + * ompi_info_foo() wrapper around various opal_info_foo() calls + */ +OMPI_DECLSPEC int ompi_info_get_bool (ompi_info_t *info, char *key, bool *value, int *flag); +/** + * ompi_info_foo() wrapper around various opal_info_foo() calls + */ +OMPI_DECLSPEC int ompi_info_get_value_enum (ompi_info_t *info, const char *key, + int *value, int default_value, + mca_base_var_enum_t *var_enum, int *flag); +/** + * ompi_info_foo() wrapper around various opal_info_foo() calls + */ +OMPI_DECLSPEC int ompi_info_get (ompi_info_t *info, const char *key, int valuelen, + char *value, int *flag); +/** + * ompi_info_foo() wrapper around various opal_info_foo() calls + */ +OMPI_DECLSPEC int ompi_info_delete (ompi_info_t *info, const char *key); +/** + * ompi_info_foo() wrapper around various opal_info_foo() calls + */ +OMPI_DECLSPEC int ompi_info_get_valuelen (ompi_info_t *info, const char *key, int *valuelen, + int *flag); +/** + * ompi_info_foo() wrapper around various opal_info_foo() calls + */ +OMPI_DECLSPEC int ompi_info_get_nthkey (ompi_info_t *info, int n, char *key); +/** + * ompi_info_foo() wrapper around various opal_info_foo() calls + */ +OMPI_DECLSPEC int ompi_info_value_to_bool(char *value, bool *interp); +/** + * ompi_info_foo() wrapper around various opal_info_foo() calls + */ +OMPI_DECLSPEC int ompi_info_get_nkeys(ompi_info_t *info, int *nkeys); + + END_C_DECLS /** diff --git a/ompi/interlib/interlib.c b/ompi/interlib/interlib.c index 9e01d189c39..2015f6ec6aa 100644 --- a/ompi/interlib/interlib.c +++ b/ompi/interlib/interlib.c @@ -15,6 +15,7 @@ * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. * Copyright (c) 2015-2017 Intel, Inc. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -30,6 +31,7 @@ #include "ompi/mca/rte/rte.h" #include "ompi/interlib/interlib.h" +#include "mpi.h" typedef struct { int status; diff --git a/ompi/mca/common/ompio/common_ompio_file_open.c b/ompi/mca/common/ompio/common_ompio_file_open.c index 82dda94935e..137aa1771c4 100644 --- a/ompi/mca/common/ompio/common_ompio_file_open.c +++ b/ompi/mca/common/ompio/common_ompio_file_open.c @@ -13,6 +13,7 @@ * Copyright (c) 2015-2017 Research Organization for Information Science * and Technology (RIST). All rights reserved. * Copyright (c) 2016 Cisco Systems, Inc. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -281,7 +282,7 @@ int mca_common_ompio_file_close (mca_io_ompio_file_t *ompio_fh) ret = ompio_fh->f_fs->fs_file_close (ompio_fh); } if ( delete_flag && 0 == ompio_fh->f_rank ) { - mca_io_ompio_file_delete ( ompio_fh->f_filename, MPI_INFO_NULL ); + mca_io_ompio_file_delete ( ompio_fh->f_filename, &(MPI_INFO_NULL->super) ); } if ( NULL != ompio_fh->f_fs ) { diff --git a/ompi/mca/common/ompio/common_ompio_file_view.c b/ompi/mca/common/ompio/common_ompio_file_view.c index c5a1644bb15..25387392630 100644 --- a/ompi/mca/common/ompio/common_ompio_file_view.c +++ b/ompi/mca/common/ompio/common_ompio_file_view.c @@ -12,6 +12,7 @@ * Copyright (c) 2008-2016 University of Houston. All rights reserved. * Copyright (c) 2017 Research Organization for Information Science * and Technology (RIST). All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/fs/fs.h b/ompi/mca/fs/fs.h index 29cf75a9efd..f07f439da80 100644 --- a/ompi/mca/fs/fs.h +++ b/ompi/mca/fs/fs.h @@ -15,7 +15,7 @@ * reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -30,6 +30,7 @@ #include "mpi.h" #include "ompi/mca/mca.h" #include "opal/mca/base/base.h" +#include "ompi/info/info.h" BEGIN_C_DECLS diff --git a/ompi/mca/fs/lustre/fs_lustre.h b/ompi/mca/fs/lustre/fs_lustre.h index 9ef8a2c4d64..dfc5afb7faf 100644 --- a/ompi/mca/fs/lustre/fs_lustre.h +++ b/ompi/mca/fs/lustre/fs_lustre.h @@ -12,7 +12,7 @@ * Copyright (c) 2008-2016 University of Houston. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/fs/lustre/fs_lustre_file_delete.c b/ompi/mca/fs/lustre/fs_lustre_file_delete.c index 3314103267d..e1a74d15b78 100644 --- a/ompi/mca/fs/lustre/fs_lustre_file_delete.c +++ b/ompi/mca/fs/lustre/fs_lustre_file_delete.c @@ -10,7 +10,7 @@ * Copyright (c) 2004-2005 The Regents of the University of California. * All rights reserved. * Copyright (c) 2008-2011 University of Houston. All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/fs/lustre/fs_lustre_file_open.c b/ompi/mca/fs/lustre/fs_lustre_file_open.c index 716f2cfd8ed..aa3ce43a951 100644 --- a/ompi/mca/fs/lustre/fs_lustre_file_open.c +++ b/ompi/mca/fs/lustre/fs_lustre_file_open.c @@ -12,7 +12,7 @@ * Copyright (c) 2008-2015 University of Houston. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/fs/plfs/fs_plfs.h b/ompi/mca/fs/plfs/fs_plfs.h index a84779636a7..5130b32648b 100644 --- a/ompi/mca/fs/plfs/fs_plfs.h +++ b/ompi/mca/fs/plfs/fs_plfs.h @@ -12,7 +12,7 @@ * Copyright (c) 2008-2016 University of Houston. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/fs/plfs/fs_plfs_file_delete.c b/ompi/mca/fs/plfs/fs_plfs_file_delete.c index 90b8edb3102..98df3b4d255 100644 --- a/ompi/mca/fs/plfs/fs_plfs_file_delete.c +++ b/ompi/mca/fs/plfs/fs_plfs_file_delete.c @@ -10,7 +10,7 @@ * Copyright (c) 2004-2005 The Regents of the University of California. * All rights reserved. * Copyright (c) 2008-2014 University of Houston. All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/fs/plfs/fs_plfs_file_open.c b/ompi/mca/fs/plfs/fs_plfs_file_open.c index 65dc944e571..d64a597e87a 100644 --- a/ompi/mca/fs/plfs/fs_plfs_file_open.c +++ b/ompi/mca/fs/plfs/fs_plfs_file_open.c @@ -12,7 +12,7 @@ * Copyright (c) 2008-2014 University of Houston. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/fs/pvfs2/fs_pvfs2.h b/ompi/mca/fs/pvfs2/fs_pvfs2.h index fb8513c1ea1..602dcc9bb47 100644 --- a/ompi/mca/fs/pvfs2/fs_pvfs2.h +++ b/ompi/mca/fs/pvfs2/fs_pvfs2.h @@ -12,7 +12,7 @@ * Copyright (c) 2008-2016 University of Houston. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/fs/pvfs2/fs_pvfs2_file_delete.c b/ompi/mca/fs/pvfs2/fs_pvfs2_file_delete.c index 46b5ad57e37..833e08718c6 100644 --- a/ompi/mca/fs/pvfs2/fs_pvfs2_file_delete.c +++ b/ompi/mca/fs/pvfs2/fs_pvfs2_file_delete.c @@ -10,7 +10,7 @@ * Copyright (c) 2004-2005 The Regents of the University of California. * All rights reserved. * Copyright (c) 2008-2011 University of Houston. All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/fs/pvfs2/fs_pvfs2_file_open.c b/ompi/mca/fs/pvfs2/fs_pvfs2_file_open.c index 9c0824933b7..8e88d07cd38 100644 --- a/ompi/mca/fs/pvfs2/fs_pvfs2_file_open.c +++ b/ompi/mca/fs/pvfs2/fs_pvfs2_file_open.c @@ -12,7 +12,7 @@ * Copyright (c) 2008-2014 University of Houston. All rights reserved. * Copyright (c) 2015-2017 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/fs/ufs/fs_ufs.h b/ompi/mca/fs/ufs/fs_ufs.h index 3d001c7ad3d..e98f4539f40 100644 --- a/ompi/mca/fs/ufs/fs_ufs.h +++ b/ompi/mca/fs/ufs/fs_ufs.h @@ -12,7 +12,7 @@ * Copyright (c) 2008-2016 University of Houston. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/fs/ufs/fs_ufs_file_delete.c b/ompi/mca/fs/ufs/fs_ufs_file_delete.c index 9630e36e1a7..c2faaf99852 100644 --- a/ompi/mca/fs/ufs/fs_ufs_file_delete.c +++ b/ompi/mca/fs/ufs/fs_ufs_file_delete.c @@ -10,7 +10,7 @@ * Copyright (c) 2004-2005 The Regents of the University of California. * All rights reserved. * Copyright (c) 2008-2011 University of Houston. All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/fs/ufs/fs_ufs_file_open.c b/ompi/mca/fs/ufs/fs_ufs_file_open.c index 208cfc0ab06..1a5016b5b76 100644 --- a/ompi/mca/fs/ufs/fs_ufs_file_open.c +++ b/ompi/mca/fs/ufs/fs_ufs_file_open.c @@ -12,7 +12,7 @@ * Copyright (c) 2008-2014 University of Houston. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/io/base/base.h b/ompi/mca/io/base/base.h index 36d66770ba0..68fd0b69b33 100644 --- a/ompi/mca/io/base/base.h +++ b/ompi/mca/io/base/base.h @@ -12,7 +12,7 @@ * Copyright (c) 2008 Cisco Systems, Inc. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/io/base/io_base_delete.c b/ompi/mca/io/base/io_base_delete.c index 4ae6c9b2177..a9f364dab5b 100644 --- a/ompi/mca/io/base/io_base_delete.c +++ b/ompi/mca/io/base/io_base_delete.c @@ -12,7 +12,7 @@ * Copyright (c) 2008 Sun Microsystems, Inc. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/io/base/io_base_file_select.c b/ompi/mca/io/base/io_base_file_select.c index 5cdd43c25a1..3eeceeccaba 100644 --- a/ompi/mca/io/base/io_base_file_select.c +++ b/ompi/mca/io/base/io_base_file_select.c @@ -13,7 +13,7 @@ * Copyright (c) 2008-2011 University of Houston. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/io/io.h b/ompi/mca/io/io.h index 7e8e72939ca..76c202a0fa4 100644 --- a/ompi/mca/io/io.h +++ b/ompi/mca/io/io.h @@ -16,7 +16,7 @@ * Copyright (c) 2015 University of Houston. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -30,6 +30,7 @@ #include "mpi.h" #include "ompi/mca/mca.h" #include "ompi/request/request.h" +#include "ompi/info/info.h" /* * Forward declaration for private data on io components and modules. diff --git a/ompi/mca/io/ompio/io_ompio.h b/ompi/mca/io/ompio/io_ompio.h index 528c66dbd9d..b40fc8fd634 100644 --- a/ompi/mca/io/ompio/io_ompio.h +++ b/ompi/mca/io/ompio/io_ompio.h @@ -13,7 +13,7 @@ * Copyright (c) 2008-2016 University of Houston. All rights reserved. * Copyright (c) 2015-2017 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/io/ompio/io_ompio_component.c b/ompi/mca/io/ompio/io_ompio_component.c index 3aa8e7c6fe8..a48f75ae2aa 100644 --- a/ompi/mca/io/ompio/io_ompio_component.c +++ b/ompi/mca/io/ompio/io_ompio_component.c @@ -15,7 +15,7 @@ * reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/io/ompio/io_ompio_file_open.c b/ompi/mca/io/ompio/io_ompio_file_open.c index e19805fc1f9..7f11973505e 100644 --- a/ompi/mca/io/ompio/io_ompio_file_open.c +++ b/ompi/mca/io/ompio/io_ompio_file_open.c @@ -13,7 +13,7 @@ * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. * Copyright (c) 2016 Cisco Systems, Inc. All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/io/ompio/io_ompio_file_set_view.c b/ompi/mca/io/ompio/io_ompio_file_set_view.c index f93ca4f2ad6..98656e21fa2 100644 --- a/ompi/mca/io/ompio/io_ompio_file_set_view.c +++ b/ompi/mca/io/ompio/io_ompio_file_set_view.c @@ -12,7 +12,7 @@ * Copyright (c) 2008-2016 University of Houston. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/io/ompio/io_ompio_module.c b/ompi/mca/io/ompio/io_ompio_module.c index c5168d0bb4b..3f4bc97c1e7 100644 --- a/ompi/mca/io/ompio/io_ompio_module.c +++ b/ompi/mca/io/ompio/io_ompio_module.c @@ -10,7 +10,7 @@ * Copyright (c) 2004-2005 The Regents of the University of California. * All rights reserved. * Copyright (c) 2008-2011 University of Houston. All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/io/romio314/src/io_romio314.h b/ompi/mca/io/romio314/src/io_romio314.h index df640e5efce..21046f8b946 100644 --- a/ompi/mca/io/romio314/src/io_romio314.h +++ b/ompi/mca/io/romio314/src/io_romio314.h @@ -12,7 +12,7 @@ * Copyright (c) 2008 Sun Microsystems, Inc. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/io/romio314/src/io_romio314_component.c b/ompi/mca/io/romio314/src/io_romio314_component.c index 3bb83a66c1c..be0570584de 100644 --- a/ompi/mca/io/romio314/src/io_romio314_component.c +++ b/ompi/mca/io/romio314/src/io_romio314_component.c @@ -15,7 +15,7 @@ * reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -240,10 +240,20 @@ static int delete_select(const char *filename, struct opal_info_t *info, { int ret; +// An opal_info_t isn't a full ompi_info_t. so if we're using an MPI call +// below with an MPI_Info, we need to create an equivalent MPI_Info. This +// isn't ideal but it only happens a few places. + ompi_info_t *ompi_info; + ompi_info = OBJ_NEW(ompi_info_t); + if (!ompi_info) { return(MPI_ERR_NO_MEM); } + opal_info_t *opal_info = &(ompi_info->super); + opal_info_dup (info, &opal_info); + OPAL_THREAD_LOCK (&mca_io_romio314_mutex); - ret = ROMIO_PREFIX(MPI_File_delete)(filename, info); + ret = ROMIO_PREFIX(MPI_File_delete)(filename, ompi_info); OPAL_THREAD_UNLOCK (&mca_io_romio314_mutex); + ompi_info_free(&ompi_info); return ret; } diff --git a/ompi/mca/io/romio314/src/io_romio314_file_open.c b/ompi/mca/io/romio314/src/io_romio314_file_open.c index d4c2bba6e17..25d7440bd69 100644 --- a/ompi/mca/io/romio314/src/io_romio314_file_open.c +++ b/ompi/mca/io/romio314/src/io_romio314_file_open.c @@ -11,7 +11,7 @@ * All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -38,12 +38,22 @@ mca_io_romio314_file_open (ompi_communicator_t *comm, int ret; mca_io_romio314_data_t *data; +// An opal_info_t isn't a full ompi_info_t. so if we're using an MPI call +// below with an MPI_Info, we need to create an equivalent MPI_Info. This +// isn't ideal but it only happens a few places. + ompi_info_t *ompi_info; + ompi_info = OBJ_NEW(ompi_info_t); + if (!ompi_info) { return(MPI_ERR_NO_MEM); } + opal_info_t *opal_info = &(ompi_info->super); + opal_info_dup (info, &opal_info); + data = (mca_io_romio314_data_t *) fh->f_io_selected_data; // OPAL_THREAD_LOCK (&mca_io_romio314_mutex); - ret = ROMIO_PREFIX(MPI_File_open)(comm, filename, amode, info, + ret = ROMIO_PREFIX(MPI_File_open)(comm, filename, amode, ompi_info, &data->romio_fh); // OPAL_THREAD_UNLOCK (&mca_io_romio314_mutex); + ompi_info_free(&ompi_info); return ret; } @@ -155,11 +165,21 @@ mca_io_romio314_file_set_info (ompi_file_t *fh, int ret; mca_io_romio314_data_t *data; +// An opal_info_t isn't a full ompi_info_t. so if we're using an MPI call +// below with an MPI_Info, we need to create an equivalent MPI_Info. This +// isn't ideal but it only happens a few places. + ompi_info_t *ompi_info; + ompi_info = OBJ_NEW(ompi_info_t); + if (!ompi_info) { return(MPI_ERR_NO_MEM); } + opal_info_t *opal_info = &(ompi_info->super); + opal_info_dup (info, &opal_info); + data = (mca_io_romio314_data_t *) fh->f_io_selected_data; OPAL_THREAD_LOCK (&mca_io_romio314_mutex); - ret = ROMIO_PREFIX(MPI_File_set_info) (data->romio_fh, info); + ret = ROMIO_PREFIX(MPI_File_set_info) (data->romio_fh, ompi_info); OPAL_THREAD_UNLOCK (&mca_io_romio314_mutex); + ompi_info_free(&ompi_info); return ret; } @@ -171,11 +191,20 @@ mca_io_romio314_file_get_info (ompi_file_t *fh, int ret; mca_io_romio314_data_t *data; +// An opal_info_t isn't a full ompi_info_t. so if we're using an MPI call +// below with an MPI_Info, we need to create an equivalent MPI_Info. This +// isn't ideal but it only happens a few places. + ompi_info_t *ompi_info; + ompi_info = OBJ_NEW(ompi_info_t); + if (!ompi_info) { return(MPI_ERR_NO_MEM); } + data = (mca_io_romio314_data_t *) fh->f_io_selected_data; OPAL_THREAD_LOCK (&mca_io_romio314_mutex); - ret = ROMIO_PREFIX(MPI_File_get_info) (data->romio_fh, info_used); + ret = ROMIO_PREFIX(MPI_File_get_info) (data->romio_fh, &ompi_info); OPAL_THREAD_UNLOCK (&mca_io_romio314_mutex); + opal_info_dup (&(ompi_info->super), info_used); + ompi_info_free(&ompi_info); return ret; } @@ -191,13 +220,23 @@ mca_io_romio314_file_set_view (ompi_file_t *fh, int ret; mca_io_romio314_data_t *data; +// An opal_info_t isn't a full ompi_info_t. so if we're using an MPI call +// below with an MPI_Info, we need to create an equivalent MPI_Info. This +// isn't ideal but it only happens a few places. + ompi_info_t *ompi_info; + ompi_info = OBJ_NEW(ompi_info_t); + if (!ompi_info) { return(MPI_ERR_NO_MEM); } + opal_info_t *opal_info = &(ompi_info->super); + opal_info_dup (info, &opal_info); + data = (mca_io_romio314_data_t *) fh->f_io_selected_data; OPAL_THREAD_LOCK (&mca_io_romio314_mutex); ret = ROMIO_PREFIX(MPI_File_set_view) (data->romio_fh, disp, etype, filetype, - datarep, info); + datarep, ompi_info); OPAL_THREAD_UNLOCK (&mca_io_romio314_mutex); + ompi_info_free(&ompi_info); return ret; } diff --git a/ompi/mca/io/romio314/src/io_romio314_module.c b/ompi/mca/io/romio314/src/io_romio314_module.c index 3a40046cbdf..bc1b3c0b84a 100644 --- a/ompi/mca/io/romio314/src/io_romio314_module.c +++ b/ompi/mca/io/romio314/src/io_romio314_module.c @@ -11,6 +11,7 @@ * All rights reserved. * Copyright (c) 2008 Sun Microsystems, Inc. All rights reserved. * Copyright (c) 2008 Cisco Systems, Inc. All rights reserved. + * Copyright (c) 2017 IBM Corp. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -47,8 +48,6 @@ mca_io_base_module_2_0_0_t mca_io_romio314_module = { mca_io_romio314_file_preallocate, mca_io_romio314_file_get_size, mca_io_romio314_file_get_amode, - mca_io_romio314_file_set_info, - mca_io_romio314_file_get_info, mca_io_romio314_file_set_view, mca_io_romio314_file_get_view, diff --git a/ompi/mca/osc/base/base.h b/ompi/mca/osc/base/base.h index d2b46953eb7..d03d41b93cd 100644 --- a/ompi/mca/osc/base/base.h +++ b/ompi/mca/osc/base/base.h @@ -7,7 +7,7 @@ * University of Stuttgart. All rights reserved. * Copyright (c) 2004-2005 The Regents of the University of California. * All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/osc/base/osc_base_init.c b/ompi/mca/osc/base/osc_base_init.c index ca5e7a0e8d8..1c2d4ed870e 100644 --- a/ompi/mca/osc/base/osc_base_init.c +++ b/ompi/mca/osc/base/osc_base_init.c @@ -10,7 +10,7 @@ * All rights reserved. * Copyright (c) 2014 Los Alamos National Security, LLC. All rights * reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/osc/osc.h b/ompi/mca/osc/osc.h index c3d806a688e..eb5450c5a7f 100644 --- a/ompi/mca/osc/osc.h +++ b/ompi/mca/osc/osc.h @@ -13,7 +13,7 @@ * Copyright (c) 2010 Cisco Systems, Inc. All rights reserved. * Copyright (c) 2015-2017 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/osc/portals4/osc_portals4.h b/ompi/mca/osc/portals4/osc_portals4.h index 4834db5f551..56a1e0b8f3d 100644 --- a/ompi/mca/osc/portals4/osc_portals4.h +++ b/ompi/mca/osc/portals4/osc_portals4.h @@ -5,7 +5,7 @@ * reserved. * Copyright (c) 2015-2017 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/osc/portals4/osc_portals4_component.c b/ompi/mca/osc/portals4/osc_portals4_component.c index da31d72655d..83b3470b944 100644 --- a/ompi/mca/osc/portals4/osc_portals4_component.c +++ b/ompi/mca/osc/portals4/osc_portals4_component.c @@ -8,7 +8,7 @@ * Copyright (c) 2017 The University of Tennessee and The University * of Tennessee Research Foundation. All rights * reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/osc/pt2pt/osc_pt2pt.h b/ompi/mca/osc/pt2pt/osc_pt2pt.h index 801975c6fef..87c3cc3f401 100644 --- a/ompi/mca/osc/pt2pt/osc_pt2pt.h +++ b/ompi/mca/osc/pt2pt/osc_pt2pt.h @@ -15,7 +15,7 @@ * Copyright (c) 2015-2017 Research Organization for Information Science * and Technology (RIST). All rights reserved. * Copyright (c) 2016 FUJITSU LIMITED. All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/osc/pt2pt/osc_pt2pt_component.c b/ompi/mca/osc/pt2pt/osc_pt2pt_component.c index 3291c8a24cd..040a0f5ac0e 100644 --- a/ompi/mca/osc/pt2pt/osc_pt2pt_component.c +++ b/ompi/mca/osc/pt2pt/osc_pt2pt_component.c @@ -16,7 +16,7 @@ * Copyright (c) 2012-2013 Sandia National Laboratories. All rights reserved. * Copyright (c) 2015-2016 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -104,9 +104,6 @@ ompi_osc_pt2pt_module_t ompi_osc_pt2pt_module_template = { ompi_osc_pt2pt_flush_all, ompi_osc_pt2pt_flush_local, ompi_osc_pt2pt_flush_local_all, - - ompi_osc_pt2pt_set_info, - ompi_osc_pt2pt_get_info } }; diff --git a/ompi/mca/osc/rdma/osc_rdma_component.c b/ompi/mca/osc/rdma/osc_rdma_component.c index 5d74abfa8e8..a8ddf633491 100644 --- a/ompi/mca/osc/rdma/osc_rdma_component.c +++ b/ompi/mca/osc/rdma/osc_rdma_component.c @@ -16,7 +16,7 @@ * Copyright (c) 2012-2015 Sandia National Laboratories. All rights reserved. * Copyright (c) 2015 NVIDIA Corporation. All rights reserved. * Copyright (c) 2015 Intel, Inc. All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -1239,7 +1239,7 @@ static char* ompi_osc_rdma_set_no_lock_info(opal_infosubscriber_t *obj, char *ke module->no_locks = false; } /* enforce collectiveness... */ - module->comm->c_coll.coll_barrier(module->comm, module->comm->c_coll.coll_barrier_module); + module->comm->c_coll->coll_barrier(module->comm, module->comm->c_coll->coll_barrier_module); /* * Accept any value */ diff --git a/ompi/mca/osc/sm/osc_sm.h b/ompi/mca/osc/sm/osc_sm.h index 339ded4ccc2..f58cddb2e38 100644 --- a/ompi/mca/osc/sm/osc_sm.h +++ b/ompi/mca/osc/sm/osc_sm.h @@ -5,7 +5,7 @@ * reserved. * Copyright (c) 2015-2017 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/osc/sm/osc_sm_component.c b/ompi/mca/osc/sm/osc_sm_component.c index 88a46094f16..0f5978f6cbd 100644 --- a/ompi/mca/osc/sm/osc_sm_component.c +++ b/ompi/mca/osc/sm/osc_sm_component.c @@ -10,7 +10,7 @@ * Copyright (c) 2017 The University of Tennessee and The University * of Tennessee Research Foundation. All rights * reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -39,8 +39,8 @@ static int component_query(struct ompi_win_t *win, void **base, size_t size, int static int component_select(struct ompi_win_t *win, void **base, size_t size, int disp_unit, struct ompi_communicator_t *comm, struct opal_info_t *info, int flavor, int *model); -static char* component_set_blocking_fence_info(void *obj, char *key, char *val); -static char* component_set_alloc_shared_noncontig_info(void *obj, char *key, char *val); +static char* component_set_blocking_fence_info(opal_infosubscriber_t *obj, char *key, char *val); +static char* component_set_alloc_shared_noncontig_info(opal_infosubscriber_t *obj, char *key, char *val); ompi_osc_sm_component_t mca_osc_sm_component = { @@ -182,14 +182,14 @@ component_select(struct ompi_win_t *win, void **base, size_t size, int disp_unit OBJ_CONSTRUCT(&module->lock, opal_mutex_t); - ret = opal_infosubscribe_subscribe(win, "blocking_fence", "false", + ret = opal_infosubscribe_subscribe(&(win->super), "blocking_fence", "false", component_set_blocking_fence_info); module->global_state->use_barrier_for_fence = 1; if (OPAL_SUCCESS != ret) goto error; - ret = opal_infosubscribe_subscribe(win, "alloc_shared_contig", "false", component_set_alloc_shared_noncontig_info); + ret = opal_infosubscribe_subscribe(&(win->super), "alloc_shared_contig", "false", component_set_alloc_shared_noncontig_info); if (OPAL_SUCCESS != ret) goto error; @@ -521,7 +521,7 @@ ompi_osc_sm_set_info(struct ompi_win_t *win, struct opal_info_t *info) static char* -component_set_blocking_fence_info(void *obj, char *key, char *val) +component_set_blocking_fence_info(opal_infosubscriber_t *obj, char *key, char *val) { ompi_osc_sm_module_t *module = (ompi_osc_sm_module_t*) ((struct ompi_win_t*) obj)->w_osc_module; /* @@ -532,7 +532,7 @@ component_set_blocking_fence_info(void *obj, char *key, char *val) static char* -component_set_alloc_shared_noncontig_info(void *obj, char *key, char *val) +component_set_alloc_shared_noncontig_info(opal_infosubscriber_t *obj, char *key, char *val) { ompi_osc_sm_module_t *module = (ompi_osc_sm_module_t*) ((struct ompi_win_t*) obj)->w_osc_module; diff --git a/ompi/mca/rte/orte/rte_orte.h b/ompi/mca/rte/orte/rte_orte.h index ae2a9fce85f..d99b032d652 100644 --- a/ompi/mca/rte/orte/rte_orte.h +++ b/ompi/mca/rte/orte/rte_orte.h @@ -6,7 +6,7 @@ * Copyright (c) 2014-2016 Research Organization for Information Science * and Technology (RIST). All rights reserved. * Copyright (c) 2015 Intel, Inc. All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/sharedfp/addproc/sharedfp_addproc.h b/ompi/mca/sharedfp/addproc/sharedfp_addproc.h index 5b08b22fddd..e005da3b260 100644 --- a/ompi/mca/sharedfp/addproc/sharedfp_addproc.h +++ b/ompi/mca/sharedfp/addproc/sharedfp_addproc.h @@ -10,7 +10,7 @@ * Copyright (c) 2004-2005 The Regents of the University of California. * All rights reserved. * Copyright (c) 2013-2016 University of Houston. All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/sharedfp/addproc/sharedfp_addproc_file_open.c b/ompi/mca/sharedfp/addproc/sharedfp_addproc_file_open.c index cbbbc0a219f..9c8aed516ec 100644 --- a/ompi/mca/sharedfp/addproc/sharedfp_addproc_file_open.c +++ b/ompi/mca/sharedfp/addproc/sharedfp_addproc_file_open.c @@ -10,7 +10,7 @@ * Copyright (c) 2004-2005 The Regents of the University of California. * All rights reserved. * Copyright (c) 2013-2016 University of Houston. All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/sharedfp/individual/sharedfp_individual.c b/ompi/mca/sharedfp/individual/sharedfp_individual.c index 0cfe45612ec..4786d25637e 100644 --- a/ompi/mca/sharedfp/individual/sharedfp_individual.c +++ b/ompi/mca/sharedfp/individual/sharedfp_individual.c @@ -10,7 +10,7 @@ * Copyright (c) 2004-2005 The Regents of the University of California. * All rights reserved. * Copyright (c) 2013-2015 University of Houston. All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -73,7 +73,7 @@ struct mca_sharedfp_base_module_1_0_0_t * mca_sharedfp_individual_component_file int amode; bool wronly_flag=false; bool relaxed_order_flag=false; - MPI_Info info; + opal_info_t *info; int flag; int valuelen; char value[MPI_MAX_INFO_VAL+1]; @@ -102,7 +102,7 @@ struct mca_sharedfp_base_module_1_0_0_t * mca_sharedfp_individual_component_file /*---------------------------------------------------------*/ /* 2. Did the user specify MPI_INFO relaxed ordering flag? */ info = fh->f_info; - if ( info != MPI_INFO_NULL ){ + if ( info != &(MPI_INFO_NULL->super) ){ valuelen = MPI_MAX_INFO_VAL; opal_info_get ( info,"OMPIO_SHAREDFP_RELAXED_ORDERING", valuelen, value, &flag); if ( flag ) { diff --git a/ompi/mca/sharedfp/individual/sharedfp_individual.h b/ompi/mca/sharedfp/individual/sharedfp_individual.h index f5d8e9451ba..bd0a91206dc 100644 --- a/ompi/mca/sharedfp/individual/sharedfp_individual.h +++ b/ompi/mca/sharedfp/individual/sharedfp_individual.h @@ -12,7 +12,7 @@ * Copyright (c) 2013-2016 University of Houston. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/sharedfp/individual/sharedfp_individual_file_open.c b/ompi/mca/sharedfp/individual/sharedfp_individual_file_open.c index 7aff5868db5..11416f7083c 100644 --- a/ompi/mca/sharedfp/individual/sharedfp_individual_file_open.c +++ b/ompi/mca/sharedfp/individual/sharedfp_individual_file_open.c @@ -12,7 +12,7 @@ * Copyright (c) 2013-2016 University of Houston. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -114,7 +114,7 @@ int mca_sharedfp_individual_file_open (struct ompi_communicator_t *comm, } err = mca_common_ompio_file_open(MPI_COMM_SELF, datafilename, MPI_MODE_RDWR | MPI_MODE_CREATE | MPI_MODE_DELETE_ON_CLOSE, - MPI_INFO_NULL, datafilehandle, false); + &(MPI_INFO_NULL->super), datafilehandle, false); if ( OMPI_SUCCESS != err) { opal_output(0, "mca_sharedfp_individual_file_open: Error during datafile file open\n"); free (shfileHandle ); @@ -157,7 +157,7 @@ int mca_sharedfp_individual_file_open (struct ompi_communicator_t *comm, } err = mca_common_ompio_file_open ( MPI_COMM_SELF,metadatafilename, MPI_MODE_RDWR | MPI_MODE_CREATE | MPI_MODE_DELETE_ON_CLOSE, - MPI_INFO_NULL, metadatafilehandle, false); + &(MPI_INFO_NULL->super), metadatafilehandle, false); if ( OMPI_SUCCESS != err) { opal_output(0, "mca_sharedfp_individual_file_open: Error during metadatafile file open\n"); free (shfileHandle ); diff --git a/ompi/mca/sharedfp/lockedfile/sharedfp_lockedfile.h b/ompi/mca/sharedfp/lockedfile/sharedfp_lockedfile.h index 47dd489fa99..d7ab766f6bf 100644 --- a/ompi/mca/sharedfp/lockedfile/sharedfp_lockedfile.h +++ b/ompi/mca/sharedfp/lockedfile/sharedfp_lockedfile.h @@ -12,7 +12,7 @@ * Copyright (c) 2013-2016 University of Houston. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/sharedfp/lockedfile/sharedfp_lockedfile_file_open.c b/ompi/mca/sharedfp/lockedfile/sharedfp_lockedfile_file_open.c index 8070edf938d..31903c42a41 100644 --- a/ompi/mca/sharedfp/lockedfile/sharedfp_lockedfile_file_open.c +++ b/ompi/mca/sharedfp/lockedfile/sharedfp_lockedfile_file_open.c @@ -12,7 +12,7 @@ * Copyright (c) 2013-2017 University of Houston. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -68,7 +68,7 @@ int mca_sharedfp_lockedfile_file_open (struct ompi_communicator_t *comm, ompio_fh->f_etype, ompio_fh->f_orig_filetype, ompio_fh->f_datarep, - MPI_INFO_NULL); + &(MPI_INFO_NULL->super)); /*Memory is allocated here for the sh structure*/ diff --git a/ompi/mca/sharedfp/sharedfp.h b/ompi/mca/sharedfp/sharedfp.h index dbed698793d..c5d6eee492a 100644 --- a/ompi/mca/sharedfp/sharedfp.h +++ b/ompi/mca/sharedfp/sharedfp.h @@ -15,7 +15,7 @@ * reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -31,6 +31,7 @@ #include "ompi/mca/mca.h" #include "opal/mca/base/base.h" #include "ompi/request/request.h" +#include "ompi/info/info.h" BEGIN_C_DECLS diff --git a/ompi/mca/sharedfp/sm/sharedfp_sm.h b/ompi/mca/sharedfp/sm/sharedfp_sm.h index 50b33e7cb8c..f8a75ad8431 100644 --- a/ompi/mca/sharedfp/sm/sharedfp_sm.h +++ b/ompi/mca/sharedfp/sm/sharedfp_sm.h @@ -13,7 +13,7 @@ * Copyright (c) 2015 Cisco Systems, Inc. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/sharedfp/sm/sharedfp_sm_file_open.c b/ompi/mca/sharedfp/sm/sharedfp_sm_file_open.c index 2453202e116..d900460c244 100644 --- a/ompi/mca/sharedfp/sm/sharedfp_sm_file_open.c +++ b/ompi/mca/sharedfp/sm/sharedfp_sm_file_open.c @@ -14,7 +14,7 @@ * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. * Copyright (c) 2015 Cisco Systems, Inc. All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -87,7 +87,7 @@ int mca_sharedfp_sm_file_open (struct ompi_communicator_t *comm, ompio_fh->f_etype, ompio_fh->f_orig_filetype, ompio_fh->f_datarep, - MPI_INFO_NULL); + &(MPI_INFO_NULL->super)); /*Memory is allocated here for the sh structure*/ if ( mca_sharedfp_sm_verbose ) { diff --git a/ompi/mca/topo/base/base.h b/ompi/mca/topo/base/base.h index 45b2a342179..638c701d581 100644 --- a/ompi/mca/topo/base/base.h +++ b/ompi/mca/topo/base/base.h @@ -15,7 +15,7 @@ * Copyright (c) 2012-2013 Inria. All rights reserved. * Copyright (c) 2014-2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/topo/base/topo_base_dist_graph_create.c b/ompi/mca/topo/base/topo_base_dist_graph_create.c index 153d545b5ec..fdc202f879a 100644 --- a/ompi/mca/topo/base/topo_base_dist_graph_create.c +++ b/ompi/mca/topo/base/topo_base_dist_graph_create.c @@ -10,7 +10,7 @@ * Copyright (c) 2011-2013 Université Bordeaux 1 * Copyright (c) 2014-2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corporation. All rights reserved. + * Copyright (c) 2016-2017 IBM Corporation. All rights reserved. */ #include "ompi_config.h" @@ -295,6 +295,14 @@ int mca_topo_base_dist_graph_create(mca_topo_base_module_t* module, OBJ_RELEASE(module); return err; } + // But if there is an info object, the above call didn't make use + // of it, so we'll do a dup-with-info to get the final comm and + // free the above intermediate newcomm: + if (info && info != &(MPI_INFO_NULL->super)) { + ompi_communicator_t *intermediate_comm = *newcomm; + ompi_comm_dup_with_info (intermediate_comm, info, newcomm); + ompi_comm_free(&intermediate_comm); + } assert(NULL == (*newcomm)->c_topo); (*newcomm)->c_topo = module; diff --git a/ompi/mca/topo/base/topo_base_dist_graph_create_adjacent.c b/ompi/mca/topo/base/topo_base_dist_graph_create_adjacent.c index 9b1a17a7fc3..5b12042708b 100644 --- a/ompi/mca/topo/base/topo_base_dist_graph_create_adjacent.c +++ b/ompi/mca/topo/base/topo_base_dist_graph_create_adjacent.c @@ -10,6 +10,7 @@ * Copyright (c) 2011-2013 Université Bordeaux 1 * Copyright (c) 2014-2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. + * Copyright (c) 2017 IBM Corp. All rights reserved. */ #include "ompi_config.h" @@ -37,6 +38,15 @@ int mca_topo_base_dist_graph_create_adjacent(mca_topo_base_module_t* module, newcomm)) ) { return err; } + // But if there is an info object, the above call didn't make use + // of it, so we'll do a dup-with-info to get the final comm and + // free the above intermediate newcomm: + if (info && info != &(MPI_INFO_NULL->super)) { + ompi_communicator_t *intermediate_comm = *newcomm; + ompi_comm_dup_with_info (intermediate_comm, info, newcomm); + ompi_comm_free(&intermediate_comm); + } + err = OMPI_ERR_OUT_OF_RESOURCE; /* suppose by default something bad will happens */ assert( NULL == (*newcomm)->c_topo ); diff --git a/ompi/mca/topo/topo.h b/ompi/mca/topo/topo.h index ac5d159f270..3b6cd880e40 100644 --- a/ompi/mca/topo/topo.h +++ b/ompi/mca/topo/topo.h @@ -16,7 +16,7 @@ * and Technology (RIST). All rights reserved. * Copyright (c) 2015 Los Alamos National Security, LLC. All rights * reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/topo/treematch/topo_treematch.h b/ompi/mca/topo/treematch/topo_treematch.h index f92f3b46d1d..d899285e6ef 100644 --- a/ompi/mca/topo/treematch/topo_treematch.h +++ b/ompi/mca/topo/treematch/topo_treematch.h @@ -6,7 +6,7 @@ * Copyright (c) 2011-2015 Bordeaux Polytechnic Institute * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mca/topo/treematch/topo_treematch_dist_graph_create.c b/ompi/mca/topo/treematch/topo_treematch_dist_graph_create.c index e6f99c9f918..8ea491c67cb 100644 --- a/ompi/mca/topo/treematch/topo_treematch_dist_graph_create.c +++ b/ompi/mca/topo/treematch/topo_treematch_dist_graph_create.c @@ -11,7 +11,7 @@ * Copyright (c) 2016 Los Alamos National Security, LLC. All rights * reserved. * Copyright (c) 2017 Cisco Systems, Inc. All rights reserved - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mpi/c/alloc_mem.c b/ompi/mpi/c/alloc_mem.c index 11e87987ab3..8c8fb8cd545 100644 --- a/ompi/mpi/c/alloc_mem.c +++ b/ompi/mpi/c/alloc_mem.c @@ -76,7 +76,7 @@ int MPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr) if (MPI_INFO_NULL != info) { int flag; - (void) opal_info_get (info, "mpool_hints", MPI_MAX_INFO_VAL, info_value, &flag); + (void) ompi_info_get (info, "mpool_hints", MPI_MAX_INFO_VAL, info_value, &flag); if (flag) { mpool_hints = info_value; } diff --git a/ompi/mpi/c/comm_dup_with_info.c b/ompi/mpi/c/comm_dup_with_info.c index ee3596b128f..6dfce11eab3 100644 --- a/ompi/mpi/c/comm_dup_with_info.c +++ b/ompi/mpi/c/comm_dup_with_info.c @@ -16,7 +16,7 @@ * reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/mpi/c/comm_get_info.c b/ompi/mpi/c/comm_get_info.c index 40edc0071a4..33258e01a16 100644 --- a/ompi/mpi/c/comm_get_info.c +++ b/ompi/mpi/c/comm_get_info.c @@ -3,7 +3,7 @@ * Copyright (c) 2014 Cisco Systems, Inc. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -51,7 +51,7 @@ int MPI_Comm_get_info(MPI_Comm comm, MPI_Info *info_used) /* * Setup any defaults if MPI_Win_set_info was never called */ - opal_infosubscribe_change_info(comm, &MPI_INFO_NULL->super); + opal_infosubscribe_change_info(&comm->super, &MPI_INFO_NULL->super); } @@ -60,8 +60,9 @@ int MPI_Comm_get_info(MPI_Comm comm, MPI_Info *info_used) return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_NO_MEM, FUNC_NAME); } + opal_info_t *opal_info_used = &(*info_used)->super; - opal_info_dup(comm->super.s_info, &(*info_used)->super); + opal_info_dup_mpistandard(comm->super.s_info, &opal_info_used); return MPI_SUCCESS; } diff --git a/ompi/mpi/c/comm_set_info.c b/ompi/mpi/c/comm_set_info.c index 6ac12d78260..da7c99000e7 100644 --- a/ompi/mpi/c/comm_set_info.c +++ b/ompi/mpi/c/comm_set_info.c @@ -3,7 +3,7 @@ * Copyright (c) 2014 Cisco Systems, Inc. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -50,7 +50,7 @@ int MPI_Comm_set_info(MPI_Comm comm, MPI_Info info) OPAL_CR_ENTER_LIBRARY(); - opal_infosubscribe_change_info(comm, info); + opal_infosubscribe_change_info(&(comm->super), &(info->super)); return MPI_SUCCESS; } diff --git a/ompi/mpi/c/comm_spawn.c b/ompi/mpi/c/comm_spawn.c index 9de5bd9d52a..45e0f24a51e 100644 --- a/ompi/mpi/c/comm_spawn.c +++ b/ompi/mpi/c/comm_spawn.c @@ -17,7 +17,6 @@ * Copyright (c) 2015 Intel, Inc. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -110,7 +109,7 @@ int MPI_Comm_spawn(const char *command, char *argv[], int maxprocs, MPI_Info inf /* See if the info key "ompi_non_mpi" was set to true */ if (rank == root) { - opal_info_get_bool(info, "ompi_non_mpi", &non_mpi, &flag); + ompi_info_get_bool(info, "ompi_non_mpi", &non_mpi, &flag); } OPAL_CR_ENTER_LIBRARY(); diff --git a/ompi/mpi/c/comm_spawn_multiple.c b/ompi/mpi/c/comm_spawn_multiple.c index 0cba28ef651..5afdfa39ebc 100644 --- a/ompi/mpi/c/comm_spawn_multiple.c +++ b/ompi/mpi/c/comm_spawn_multiple.c @@ -17,7 +17,6 @@ * Copyright (c) 2015 Intel, Inc. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -106,7 +105,7 @@ int MPI_Comm_spawn_multiple(int count, char *array_of_commands[], char **array_o be set to true on all of them. Note that not setting ompi_non_mpi is the same as setting it to false. */ - opal_info_get_bool(array_of_info[i], "ompi_non_mpi", &non_mpi, + ompi_info_get_bool(array_of_info[i], "ompi_non_mpi", &non_mpi, &flag); if (flag && 0 == i) { /* If this is the first info, save its @@ -142,7 +141,7 @@ int MPI_Comm_spawn_multiple(int count, char *array_of_commands[], char **array_o if (MPI_INFO_NULL == array_of_info[0]) { non_mpi = false; } else { - opal_info_get_bool(array_of_info[0], "ompi_non_mpi", &non_mpi, + ompi_info_get_bool(array_of_info[0], "ompi_non_mpi", &non_mpi, &flag); if (!flag) { non_mpi = false; diff --git a/ompi/mpi/c/comm_split_type.c b/ompi/mpi/c/comm_split_type.c index 7bce9ad890c..535c3897652 100644 --- a/ompi/mpi/c/comm_split_type.c +++ b/ompi/mpi/c/comm_split_type.c @@ -13,6 +13,7 @@ * Copyright (c) 2012 Sandia National Laboratories. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -92,7 +93,7 @@ int MPI_Comm_split_type(MPI_Comm comm, int split_type, int key, *newcomm = MPI_COMM_NULL; rc = MPI_SUCCESS; } else { - rc = ompi_comm_split_type( (ompi_communicator_t*)comm, split_type, key, info, + rc = ompi_comm_split_type( (ompi_communicator_t*)comm, split_type, key, &(info->super), (ompi_communicator_t**)newcomm); } OMPI_ERRHANDLER_RETURN ( rc, comm, rc, FUNC_NAME); diff --git a/ompi/mpi/c/dist_graph_create.c b/ompi/mpi/c/dist_graph_create.c index efb3eb1857f..2200d155e77 100644 --- a/ompi/mpi/c/dist_graph_create.c +++ b/ompi/mpi/c/dist_graph_create.c @@ -8,6 +8,7 @@ * reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -88,7 +89,7 @@ int MPI_Dist_graph_create(MPI_Comm comm_old, int n, const int sources[], } err = topo->topo.dist_graph.dist_graph_create(topo, comm_old, n, sources, degrees, - destinations, weights, info, + destinations, weights, &(info->super), reorder, newcomm); OMPI_ERRHANDLER_RETURN(err, comm_old, err, FUNC_NAME); } diff --git a/ompi/mpi/c/dist_graph_create_adjacent.c b/ompi/mpi/c/dist_graph_create_adjacent.c index bf2f2cfa979..67ced39011c 100644 --- a/ompi/mpi/c/dist_graph_create_adjacent.c +++ b/ompi/mpi/c/dist_graph_create_adjacent.c @@ -12,6 +12,7 @@ * Copyright (c) 2012-2013 Inria. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -100,7 +101,7 @@ int MPI_Dist_graph_create_adjacent(MPI_Comm comm_old, err = topo->topo.dist_graph.dist_graph_create_adjacent(topo, comm_old, indegree, sources, sourceweights, outdegree, - destinations, destweights, info, + destinations, destweights, &(info->super), reorder, comm_dist_graph); OMPI_ERRHANDLER_RETURN(err, comm_old, err, FUNC_NAME); } diff --git a/ompi/mpi/c/file_delete.c b/ompi/mpi/c/file_delete.c index cad11c4c35a..652b6843284 100644 --- a/ompi/mpi/c/file_delete.c +++ b/ompi/mpi/c/file_delete.c @@ -14,6 +14,7 @@ * reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -78,6 +79,6 @@ int MPI_File_delete(const char *filename, MPI_Info info) /* Since there is no MPI_File handle associated with this function, the MCA has to do a selection and perform the action */ - rc = mca_io_base_delete(filename, info); + rc = mca_io_base_delete(filename, &(info->super)); OMPI_ERRHANDLER_RETURN(rc, MPI_FILE_NULL, rc, FUNC_NAME); } diff --git a/ompi/mpi/c/file_get_info.c b/ompi/mpi/c/file_get_info.c index 0135e29dc9e..4fd46ac9234 100644 --- a/ompi/mpi/c/file_get_info.c +++ b/ompi/mpi/c/file_get_info.c @@ -12,7 +12,7 @@ * Copyright (c) 2008 Sun Microsystems, Inc. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -57,7 +57,7 @@ int MPI_File_get_info(MPI_File fh, MPI_Info *info_used) /* * Setup any defaults if MPI_Win_set_info was never called */ - opal_infosubscribe_change_info(fh, &MPI_INFO_NULL->super); + opal_infosubscribe_change_info(&fh->super, &MPI_INFO_NULL->super); } @@ -65,8 +65,9 @@ int MPI_File_get_info(MPI_File fh, MPI_Info *info_used) if (NULL == (*info_used)) { return OMPI_ERRHANDLER_INVOKE(fh, MPI_ERR_NO_MEM, FUNC_NAME); } + opal_info_t *opal_info_used = &(*info_used)->super; - opal_info_dup(fh->super.s_info, &(*info_used)->super); + opal_info_dup_mpistandard(fh->super.s_info, &opal_info_used); return OMPI_SUCCESS; } diff --git a/ompi/mpi/c/file_open.c b/ompi/mpi/c/file_open.c index 74d63e16a95..13f003dad23 100644 --- a/ompi/mpi/c/file_open.c +++ b/ompi/mpi/c/file_open.c @@ -16,6 +16,7 @@ * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. * Copyright (c) 2016 University of Houston. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -105,7 +106,7 @@ int MPI_File_open(MPI_Comm comm, const char *filename, int amode, /* Create an empty MPI_File handle */ *fh = MPI_FILE_NULL; - rc = ompi_file_open(comm, filename, amode, info, fh); + rc = ompi_file_open(comm, filename, amode, &(info->super), fh); /* Creating the file handle also selects a component to use, creates a module, and calls file_open() on the module. So diff --git a/ompi/mpi/c/file_set_info.c b/ompi/mpi/c/file_set_info.c index 37e9b546d45..f25eec57883 100644 --- a/ompi/mpi/c/file_set_info.c +++ b/ompi/mpi/c/file_set_info.c @@ -12,7 +12,7 @@ * Copyright (c) 2008 Sun Microsystems, Inc. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -62,7 +62,7 @@ int MPI_File_set_info(MPI_File fh, MPI_Info info) OPAL_CR_ENTER_LIBRARY(); - ret = opal_infosubscribe_change_info(fh, &info->super); + ret = opal_infosubscribe_change_info(&fh->super, &info->super); OMPI_ERRHANDLER_RETURN(ret, fh, ret, FUNC_NAME); } diff --git a/ompi/mpi/c/file_set_view.c b/ompi/mpi/c/file_set_view.c index 5200418c686..ed0883650e4 100644 --- a/ompi/mpi/c/file_set_view.c +++ b/ompi/mpi/c/file_set_view.c @@ -15,6 +15,7 @@ * reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -73,7 +74,7 @@ int MPI_File_set_view(MPI_File fh, MPI_Offset disp, MPI_Datatype etype, switch (fh->f_io_version) { case MCA_IO_BASE_V_2_0_0: rc = fh->f_io_selected_module.v2_0_0. - io_module_file_set_view(fh, disp, etype, filetype, datarep, info); + io_module_file_set_view(fh, disp, etype, filetype, datarep, &(info->super)); break; default: diff --git a/ompi/mpi/c/info_delete.c b/ompi/mpi/c/info_delete.c index 7800884aa0b..dc246ea3288 100644 --- a/ompi/mpi/c/info_delete.c +++ b/ompi/mpi/c/info_delete.c @@ -14,7 +14,6 @@ * reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -78,6 +77,6 @@ int MPI_Info_delete(MPI_Info info, const char *key) { OPAL_CR_ENTER_LIBRARY(); - err = opal_info_delete (info, key); + err = ompi_info_delete (info, key); OMPI_ERRHANDLER_RETURN(err, MPI_COMM_WORLD, err, FUNC_NAME); } diff --git a/ompi/mpi/c/info_dup.c b/ompi/mpi/c/info_dup.c index f772fab3a56..5d3c2f5cdeb 100644 --- a/ompi/mpi/c/info_dup.c +++ b/ompi/mpi/c/info_dup.c @@ -11,7 +11,6 @@ * All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -74,7 +73,7 @@ int MPI_Info_dup(MPI_Info info, MPI_Info *newinfo) { } } - *newinfo = OBJ_NEW(opal_info_t); + *newinfo = OBJ_NEW(ompi_info_t); if (NULL == *newinfo) { return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_NO_MEM, FUNC_NAME); @@ -85,6 +84,6 @@ int MPI_Info_dup(MPI_Info info, MPI_Info *newinfo) { /* * Now to actually duplicate all the values */ - err = opal_info_dup (info, newinfo); + err = ompi_info_dup (info, newinfo); OMPI_ERRHANDLER_RETURN(err, MPI_COMM_WORLD, err, FUNC_NAME); } diff --git a/ompi/mpi/c/info_get.c b/ompi/mpi/c/info_get.c index ad1c284d40f..e0f26c0371c 100644 --- a/ompi/mpi/c/info_get.c +++ b/ompi/mpi/c/info_get.c @@ -14,7 +14,7 @@ * reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -101,6 +101,6 @@ int MPI_Info_get(MPI_Info info, const char *key, int valuelen, OPAL_CR_ENTER_LIBRARY(); - err = opal_info_get(info, key, valuelen, value, flag); + err = ompi_info_get(info, key, valuelen, value, flag); OMPI_ERRHANDLER_RETURN(err, MPI_COMM_WORLD, err, FUNC_NAME); } diff --git a/ompi/mpi/c/info_get_nkeys.c b/ompi/mpi/c/info_get_nkeys.c index 57e2944748e..db0887466e5 100644 --- a/ompi/mpi/c/info_get_nkeys.c +++ b/ompi/mpi/c/info_get_nkeys.c @@ -11,7 +11,6 @@ * All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -70,6 +69,6 @@ int MPI_Info_get_nkeys(MPI_Info info, int *nkeys) OPAL_CR_ENTER_LIBRARY(); - err = opal_info_get_nkeys(info, nkeys); + err = ompi_info_get_nkeys(info, nkeys); OMPI_ERRHANDLER_RETURN(err, MPI_COMM_WORLD, err, FUNC_NAME); } diff --git a/ompi/mpi/c/info_get_nthkey.c b/ompi/mpi/c/info_get_nthkey.c index 1bb0165a4ba..59da2bd0001 100644 --- a/ompi/mpi/c/info_get_nthkey.c +++ b/ompi/mpi/c/info_get_nthkey.c @@ -11,7 +11,6 @@ * All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -83,7 +82,7 @@ int MPI_Info_get_nthkey(MPI_Info info, int n, char *key) 1 from the value returned by get_nkeys(). So be sure to compare appropriately. */ - err = opal_info_get_nkeys(info, &nkeys); + err = ompi_info_get_nkeys(info, &nkeys); OMPI_ERRHANDLER_CHECK(err, MPI_COMM_WORLD, err, FUNC_NAME); if (n > (nkeys - 1)) { OPAL_CR_EXIT_LIBRARY(); @@ -93,6 +92,6 @@ int MPI_Info_get_nthkey(MPI_Info info, int n, char *key) /* Everything seems alright. Call the back end key copy */ - err = opal_info_get_nthkey (info, n, key); + err = ompi_info_get_nthkey (info, n, key); OMPI_ERRHANDLER_RETURN(err, MPI_COMM_WORLD, err, FUNC_NAME); } diff --git a/ompi/mpi/c/info_get_valuelen.c b/ompi/mpi/c/info_get_valuelen.c index 4a0605e70f1..3e55ee05b03 100644 --- a/ompi/mpi/c/info_get_valuelen.c +++ b/ompi/mpi/c/info_get_valuelen.c @@ -14,7 +14,6 @@ * reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -91,6 +90,6 @@ int MPI_Info_get_valuelen(MPI_Info info, const char *key, int *valuelen, OPAL_CR_ENTER_LIBRARY(); - err = opal_info_get_valuelen (info, key, valuelen, flag); + err = ompi_info_get_valuelen (info, key, valuelen, flag); OMPI_ERRHANDLER_RETURN(err, MPI_COMM_WORLD, err, FUNC_NAME); } diff --git a/ompi/mpi/c/info_set.c b/ompi/mpi/c/info_set.c index c0242bf1a52..0b4874c211e 100644 --- a/ompi/mpi/c/info_set.c +++ b/ompi/mpi/c/info_set.c @@ -12,7 +12,6 @@ * Copyright (c) 2012-2013 Inria. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -105,6 +104,6 @@ int MPI_Info_set(MPI_Info info, const char *key, const char *value) * allocator. */ - err = opal_info_set (info, key, value); + err = ompi_info_set (info, key, value); OMPI_ERRHANDLER_RETURN(err, MPI_COMM_WORLD, err, FUNC_NAME); } diff --git a/ompi/mpi/c/lookup_name.c b/ompi/mpi/c/lookup_name.c index 0e790e727f4..42a71c367c4 100644 --- a/ompi/mpi/c/lookup_name.c +++ b/ompi/mpi/c/lookup_name.c @@ -16,7 +16,6 @@ * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. * Copyright (c) 2015 Cisco Systems, Inc. All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -89,7 +88,7 @@ int MPI_Lookup_name(const char *service_name, MPI_Info info, char *port_name) /* OMPI supports info keys to pass the range to * be searched for the given key */ if (MPI_INFO_NULL != info) { - opal_info_get (info, "range", sizeof(range) - 1, range, &flag); + ompi_info_get (info, "range", sizeof(range) - 1, range, &flag); if (flag) { if (0 == strcmp(range, "nspace")) { rng = OBJ_NEW(opal_value_t); diff --git a/ompi/mpi/c/publish_name.c b/ompi/mpi/c/publish_name.c index f7c40aa91a5..24270cea8f0 100644 --- a/ompi/mpi/c/publish_name.c +++ b/ompi/mpi/c/publish_name.c @@ -16,7 +16,6 @@ * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. * Copyright (c) 2015 Cisco Systems, Inc. All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -89,7 +88,7 @@ int MPI_Publish_name(const char *service_name, MPI_Info info, /* OMPI supports info keys to pass the range and persistence to * be used for the given key */ if (MPI_INFO_NULL != info) { - opal_info_get (info, "range", sizeof(range) - 1, range, &flag); + ompi_info_get (info, "range", sizeof(range) - 1, range, &flag); if (flag) { if (0 == strcmp(range, "nspace")) { rng = OBJ_NEW(opal_value_t); @@ -111,7 +110,7 @@ int MPI_Publish_name(const char *service_name, MPI_Info info, FUNC_NAME); } } - opal_info_get (info, "persistence", sizeof(range) - 1, range, &flag); + ompi_info_get (info, "persistence", sizeof(range) - 1, range, &flag); if (flag) { if (0 == strcmp(range, "indef")) { rng = OBJ_NEW(opal_value_t); diff --git a/ompi/mpi/c/unpublish_name.c b/ompi/mpi/c/unpublish_name.c index aa103ae11c4..019d7106fe6 100644 --- a/ompi/mpi/c/unpublish_name.c +++ b/ompi/mpi/c/unpublish_name.c @@ -16,7 +16,6 @@ * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. * Copyright (c) 2015 Cisco Systems, Inc. All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -91,7 +90,7 @@ int MPI_Unpublish_name(const char *service_name, MPI_Info info, /* OMPI supports info keys to pass the range to * be searched for the given key */ if (MPI_INFO_NULL != info) { - opal_info_get (info, "range", sizeof(range) - 1, range, &flag); + ompi_info_get (info, "range", sizeof(range) - 1, range, &flag); if (flag) { if (0 == strcmp(range, "nspace")) { rng = OBJ_NEW(opal_value_t); diff --git a/ompi/mpi/c/win_allocate.c b/ompi/mpi/c/win_allocate.c index f259c3c8ae6..f0d1dbd5e9a 100644 --- a/ompi/mpi/c/win_allocate.c +++ b/ompi/mpi/c/win_allocate.c @@ -12,6 +12,7 @@ * Copyright (c) 2006 Cisco Systems, Inc. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -77,7 +78,7 @@ int MPI_Win_allocate(MPI_Aint size, int disp_unit, MPI_Info info, OPAL_CR_ENTER_LIBRARY(); /* create window and return */ - ret = ompi_win_allocate((size_t)size, disp_unit, info, + ret = ompi_win_allocate((size_t)size, disp_unit, &(info->super), comm, baseptr, win); if (OMPI_SUCCESS != ret) { *win = MPI_WIN_NULL; diff --git a/ompi/mpi/c/win_allocate_shared.c b/ompi/mpi/c/win_allocate_shared.c index 5179a5d0955..36d26df0c21 100644 --- a/ompi/mpi/c/win_allocate_shared.c +++ b/ompi/mpi/c/win_allocate_shared.c @@ -15,6 +15,7 @@ * reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -78,7 +79,7 @@ int MPI_Win_allocate_shared(MPI_Aint size, int disp_unit, MPI_Info info, OPAL_CR_ENTER_LIBRARY(); /* create window and return */ - ret = ompi_win_allocate_shared((size_t)size, disp_unit, info, + ret = ompi_win_allocate_shared((size_t)size, disp_unit, &(info->super), comm, baseptr, win); if (OMPI_SUCCESS != ret) { *win = MPI_WIN_NULL; diff --git a/ompi/mpi/c/win_create.c b/ompi/mpi/c/win_create.c index c5e7f9d463e..7b322c690bd 100644 --- a/ompi/mpi/c/win_create.c +++ b/ompi/mpi/c/win_create.c @@ -12,6 +12,7 @@ * Copyright (c) 2006 Cisco Systems, Inc. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -78,7 +79,7 @@ int MPI_Win_create(void *base, MPI_Aint size, int disp_unit, /* create window and return */ ret = ompi_win_create(base, (size_t)size, disp_unit, comm, - info, win); + &(info->super), win); if (OMPI_SUCCESS != ret) { *win = MPI_WIN_NULL; OPAL_CR_EXIT_LIBRARY(); diff --git a/ompi/mpi/c/win_create_dynamic.c b/ompi/mpi/c/win_create_dynamic.c index dfafed94c29..438b5900325 100644 --- a/ompi/mpi/c/win_create_dynamic.c +++ b/ompi/mpi/c/win_create_dynamic.c @@ -12,6 +12,7 @@ * Copyright (c) 2006 Cisco Systems, Inc. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -73,7 +74,7 @@ int MPI_Win_create_dynamic(MPI_Info info, MPI_Comm comm, MPI_Win *win) OPAL_CR_ENTER_LIBRARY(); /* create_dynamic window and return */ - ret = ompi_win_create_dynamic(info, comm, win); + ret = ompi_win_create_dynamic(&(info->super), comm, win); if (OMPI_SUCCESS != ret) { *win = MPI_WIN_NULL; OPAL_CR_EXIT_LIBRARY(); diff --git a/ompi/mpi/c/win_get_info.c b/ompi/mpi/c/win_get_info.c index 8b5a03f536e..df3ec951fbc 100644 --- a/ompi/mpi/c/win_get_info.c +++ b/ompi/mpi/c/win_get_info.c @@ -5,7 +5,7 @@ * reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -53,15 +53,16 @@ int MPI_Win_get_info(MPI_Win win, MPI_Info *info_used) /* * Setup any defaults if MPI_Win_set_info was never called */ - opal_infosubscribe_change_info(win, &MPI_INFO_NULL->super); + opal_infosubscribe_change_info(&win->super, &MPI_INFO_NULL->super); } (*info_used) = OBJ_NEW(ompi_info_t); if (NULL == (*info_used)) { return OMPI_ERRHANDLER_INVOKE(win, MPI_ERR_NO_MEM, FUNC_NAME); } + opal_info_t *opal_info_used = &(*info_used)->super; - ret = opal_info_dup(&win->super.s_info, &(*info_used)->super); + ret = opal_info_dup_mpistandard(win->super.s_info, &opal_info_used); OMPI_ERRHANDLER_RETURN(ret, win, ret, FUNC_NAME); } diff --git a/ompi/mpi/c/win_set_info.c b/ompi/mpi/c/win_set_info.c index 20a3a584750..4ddf0176c60 100644 --- a/ompi/mpi/c/win_set_info.c +++ b/ompi/mpi/c/win_set_info.c @@ -2,7 +2,7 @@ * Copyright (c) 2013 Sandia National Laboratories. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -48,7 +48,7 @@ int MPI_Win_set_info(MPI_Win win, MPI_Info info) OPAL_CR_ENTER_LIBRARY(); - ret = opal_infosubscribe_change_info(win, info); + ret = opal_infosubscribe_change_info(&(win->super), &(info->super)); OMPI_ERRHANDLER_RETURN(ret, win, ret, FUNC_NAME); } diff --git a/ompi/mpiext/cr/c/quiesce_start.c b/ompi/mpiext/cr/c/quiesce_start.c index ba835ad1085..0cc347d5b1a 100644 --- a/ompi/mpiext/cr/c/quiesce_start.c +++ b/ompi/mpiext/cr/c/quiesce_start.c @@ -6,7 +6,7 @@ * of Tennessee Research Foundation. All rights * reserved. * Copyright (c) 2012 Cisco Systems, Inc. All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/runtime/ompi_mpi_finalize.c b/ompi/runtime/ompi_mpi_finalize.c index cd56bad30fd..bd26790e9b4 100644 --- a/ompi/runtime/ompi_mpi_finalize.c +++ b/ompi/runtime/ompi_mpi_finalize.c @@ -20,7 +20,7 @@ * Copyright (c) 2016 Research Organization for Information Science * and Technology (RIST). All rights reserved. * - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/runtime/ompi_mpi_init.c b/ompi/runtime/ompi_mpi_init.c index 40c13eb638d..0000f737258 100644 --- a/ompi/runtime/ompi_mpi_init.c +++ b/ompi/runtime/ompi_mpi_init.c @@ -22,7 +22,7 @@ * and Technology (RIST). All rights reserved. * Copyright (c) 2016 Mellanox Technologies Ltd. All rights reserved. * - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/ompi/win/win.c b/ompi/win/win.c index 082e4ab6669..d5db3573e6a 100644 --- a/ompi/win/win.c +++ b/ompi/win/win.c @@ -16,7 +16,7 @@ * reserved. * Copyright (c) 2015-2016 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -179,6 +179,12 @@ static int alloc_window(struct ompi_communicator_t *comm, opal_info_t *info, int OBJ_RETAIN(group); win->w_group = group; + /* Copy the info for the info layer */ + win->super.s_info = OBJ_NEW(opal_info_t); + if (info) { + opal_info_dup(info, &(win->super.s_info)); + } + *win_out = win; return OMPI_SUCCESS; @@ -361,6 +367,10 @@ ompi_win_free(ompi_win_t *win) NULL); } + if (NULL != (win->super.s_info)) { + OBJ_RELEASE(win->super.s_info); + } + if (OMPI_SUCCESS == ret) { OBJ_RELEASE(win); } diff --git a/ompi/win/win.h b/ompi/win/win.h index d93951c0945..dc6f36e158d 100644 --- a/ompi/win/win.h +++ b/ompi/win/win.h @@ -14,7 +14,7 @@ * Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved. * Copyright (c) 2013-2015 Los Alamos National Security, LLC. All rights * reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/opal/mca/mpool/base/mpool_base_alloc.c b/opal/mca/mpool/base/mpool_base_alloc.c index af396191c1d..95a6ac3a115 100644 --- a/opal/mca/mpool/base/mpool_base_alloc.c +++ b/opal/mca/mpool/base/mpool_base_alloc.c @@ -11,7 +11,7 @@ * Copyright (c) 2004-2005 The Regents of the University of California. * All rights reserved. * Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved. - * Copyright (c) 2010-2016 IBM Corp. All rights reserved. + * Copyright (c) 2010-2017 IBM Corporation. All rights reserved. * Copyright (c) 2015 Los Alamos National Security, LLC. All rights * reserved. * $COPYRIGHT$ diff --git a/opal/util/Makefile.am b/opal/util/Makefile.am index 5a396a4dfc6..f6b86493ba7 100644 --- a/opal/util/Makefile.am +++ b/opal/util/Makefile.am @@ -16,7 +16,7 @@ # reserved. # Copyright (c) 2016 Research Organization for Information Science # and Technology (RIST). All rights reserved. -# Copyright (c) 2016 IBM Corp. All rights reserved. +# Copyright (c) 2017 IBM Corporation. All rights reserved. # $COPYRIGHT$ # # Additional copyrights may follow diff --git a/opal/util/info.c b/opal/util/info.c index c7232562e7e..05187a950b2 100644 --- a/opal/util/info.c +++ b/opal/util/info.c @@ -16,6 +16,7 @@ * reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -100,6 +101,124 @@ int opal_info_dup (opal_info_t *info, opal_info_t **newinfo) return MPI_SUCCESS; } +/* + * An object's info can be set, but those settings can be modified by + * system callbacks. When those callbacks happen, we save a "__IN_"/"val" + * copy of changed or erased values. + * + * extra options for how to dup: + * include_system_extras (default 1) + * omit_ignored (default 1) + * show_modifications (default 0) + */ +static +int opal_info_dup_mode (opal_info_t *info, opal_info_t **newinfo, + int include_system_extras, // (k/v with no corresponding __IN_k) + int omit_ignored, // (__IN_k with no k/v) + int show_modifications) // (pick v from k/v or __IN_k/v) +{ + int err, flag; + opal_list_item_t *item; + opal_info_entry_t *iterator; + char savedkey[MPI_MAX_INFO_KEY]; + char savedval[MPI_MAX_INFO_VAL]; + char *valptr, *pkey; + int is_IN_key; + int exists_IN_key, exists_reg_key; + + OPAL_THREAD_LOCK(info->i_lock); + for (item = opal_list_get_first(&(info->super)); + item != opal_list_get_end(&(info->super)); + item = opal_list_get_next(iterator)) { + iterator = (opal_info_entry_t *) item; + +// If we see an __IN_ key but no , decide what to do based on mode. +// If we see an __IN_ and a , skip since it'll be handled when +// we process . + is_IN_key = 0; + exists_IN_key = 0; + exists_reg_key = 0; + pkey = iterator->ie_key; + if (0 == strncmp(iterator->ie_key, "__IN_", 5)) { + pkey += 5; + + is_IN_key = 1; + exists_IN_key = 1; + opal_info_get (info, pkey, 0, NULL, &flag); + if (flag) { + exists_reg_key = 1; + } + } else { + is_IN_key = 0; + exists_reg_key = 1; + +// see if there is an __IN_ for the current + if (strlen(iterator->ie_key) + 5 < MPI_MAX_INFO_KEY) { + sprintf(savedkey, "__IN_%s", iterator->ie_key); + err = opal_info_get (info, savedkey, MPI_MAX_INFO_VAL, + savedval, &flag); + } else { + flag = 0; + } + if (flag) { + exists_IN_key = 1; + } + } + + if (is_IN_key) { + if (exists_reg_key) { +// we're processing __IN_ and there exists a so we'll handle it then + continue; + } else { +// we're processing __IN_ and no exists +// this would mean was set by the user but ignored by the system +// so base our behavior on the omit_ignored + if (!omit_ignored) { + err = opal_info_set(*newinfo, pkey, iterator->ie_value); + if (MPI_SUCCESS != err) { + OPAL_THREAD_UNLOCK(info->i_lock); + return err; + } + } + } + } else { + valptr = 0; + if (!exists_IN_key) { +// we're processing and no __IN_ exists +// this would mean it's a system setting, not something that came from the user + if (include_system_extras) { + valptr = iterator->ie_value; + } + } else { +// we're processing and __IN_ also exists +// pick which value to use + if (!show_modifications) { + valptr = savedval; + } else { + valptr = iterator->ie_value; + } + } + if (valptr) { + err = opal_info_set(*newinfo, pkey, valptr); + if (MPI_SUCCESS != err) { + OPAL_THREAD_UNLOCK(info->i_lock); + return err; + } + } + } + } + OPAL_THREAD_UNLOCK(info->i_lock); + return MPI_SUCCESS; +} + +/* + * Implement opal_info_dup_mpistandard by using whatever mode + * settings represent our interpretation of the standard + */ +int opal_info_dup_mpistandard (opal_info_t *info, opal_info_t **newinfo) +{ + return opal_info_dup_mode (info, newinfo, 1, 1, 0); +} /* * Set a value on the info @@ -167,7 +286,7 @@ int opal_info_get (opal_info_t *info, const char *key, int valuelen, search = info_find_key (info, key); if (NULL == search){ *flag = 0; - } else { + } else if (value && valuelen) { /* * We have found the element, so we can return the value * Set the flag, value_length and value diff --git a/opal/util/info.h b/opal/util/info.h index fedeab626ee..b030fd180db 100644 --- a/opal/util/info.h +++ b/opal/util/info.h @@ -14,6 +14,7 @@ * Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved. * Copyright (c) 2012-2015 Los Alamos National Security, LLC. All rights * reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -107,6 +108,34 @@ int opal_mpiinfo_init(void*); */ int opal_info_dup (opal_info_t *info, opal_info_t **newinfo); +/** + * opal_info_dup_mpistandard - Duplicate an 'MPI_Info' object + * + * @param info source info object (handle) + * @param newinfo pointer to the new info object (handle) + * + * @retval MPI_SUCCESS upon success + * @retval MPI_ERR_NO_MEM if out of memory + * + * The user sets an info object with key/value pairs and once processed, + * we keep key/val pairs that might have been modified vs what the user + * provided, and some user inputs might have been ignored too. The original + * user inpust are kept as __IN_/. + * + * This routine then outputs key/value pairs as: + * + * if and __IN_ both exist: + * This means the user set a k/v pair and it was used. + * output: / value(__IN_), the original user input + * if exists but __IN_ doesn't: + * This is a system-provided setting. + * output: /value() + * if __IN_ exists but doesn't: + * The user provided a setting that was rejected (ignored) by the system + * output: nothing for this key + */ +int opal_info_dup_mpistandard (opal_info_t *info, opal_info_t **newinfo); + /** * Set a new key,value pair on info. * diff --git a/opal/util/info_subscriber.c b/opal/util/info_subscriber.c index 845538c1865..f49289f7b8e 100644 --- a/opal/util/info_subscriber.c +++ b/opal/util/info_subscriber.c @@ -16,6 +16,7 @@ * reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -42,7 +43,7 @@ #include "opal/util/strncpy.h" #include "opal/util/info_subscriber.h" -static char* opal_infosubscribe_inform_subscribers(opal_infosubscriber_t * object, char *key, char *new_value); +static char* opal_infosubscribe_inform_subscribers(opal_infosubscriber_t * object, char *key, char *new_value, int *found_callback); static void infosubscriber_construct(opal_infosubscriber_t *obj); static void infosubscriber_destruct(opal_infosubscriber_t *obj); @@ -66,10 +67,11 @@ OBJ_CLASS_INSTANCE(opal_infosubscriber_t, infosubscriber_destruct); OPAL_DECLSPEC OBJ_CLASS_DECLARATION(opal_callback_list_item_t); +static void opal_callback_list_item_destruct(opal_callback_list_item_t *obj); OBJ_CLASS_INSTANCE(opal_callback_list_item_t, opal_list_item_t, NULL, - NULL); + opal_callback_list_item_destruct); static void infosubscriber_construct(opal_infosubscriber_t *obj) { OBJ_CONSTRUCT(&obj->s_subscriber_table, opal_hash_table_t); @@ -77,16 +79,39 @@ static void infosubscriber_construct(opal_infosubscriber_t *obj) { } static void infosubscriber_destruct(opal_infosubscriber_t *obj) { + opal_hash_table_t *table = &obj->s_subscriber_table; + void *node = NULL; + int err; + char *next_key; + size_t key_size; + opal_list_t *list = NULL; + + err = opal_hash_table_get_first_key_ptr(table, + (void**) &next_key, &key_size, (void**) &list, &node); + while (list && err == OPAL_SUCCESS) { + OPAL_LIST_RELEASE(list); + + err = opal_hash_table_get_next_key_ptr(table, + (void**) &next_key, &key_size, (void**) &list, node, &node); + } + OBJ_DESTRUCT(&obj->s_subscriber_table); } -static char* opal_infosubscribe_inform_subscribers(opal_infosubscriber_t *object, char *key, char *new_value) +static void opal_callback_list_item_destruct(opal_callback_list_item_t *obj) { + if (obj->default_value) { + free(obj->default_value); // came from a strdup() + } +} + +static char* opal_infosubscribe_inform_subscribers(opal_infosubscriber_t *object, char *key, char *new_value, int *found_callback) { opal_hash_table_t *table = &object->s_subscriber_table; opal_list_t *list = NULL; opal_callback_list_item_t *item; char *updated_value = NULL; + if (found_callback) { *found_callback = 0; } /* * Present the new value to each subscriber. They can decide to accept it, ignore it, or * over-ride it with their own value (like ignore, but they specify what value they want it to have). @@ -101,6 +126,7 @@ static char* opal_infosubscribe_inform_subscribers(opal_infosubscriber_t *object updated_value = new_value; OPAL_LIST_FOREACH(item, list, opal_callback_list_item_t) { updated_value = item->callback(object, key, updated_value); + if (found_callback) { *found_callback = 1; } } } } @@ -111,106 +137,210 @@ static char* opal_infosubscribe_inform_subscribers(opal_infosubscriber_t *object +/* + * Testing-only static data, all paths using this code should be + * inactive in a normal run. In particular ntesting_callbacks is 0 + * unless testing is in play. + */ +static int ntesting_callbacks = 0; +static opal_key_interest_callback_t *testing_callbacks[5]; +static char *testing_keys[5]; +static char *testing_initialvals[5]; +// User-level call, user adds their own callback function to be subscribed +// to every object: +int opal_infosubscribe_testcallback(opal_key_interest_callback_t *callback, + char *key, char *val); + int -opal_infosubscribe_change_info(opal_infosubscriber_t *object, opal_info_t *new_info) +opal_infosubscribe_testcallback(opal_key_interest_callback_t *callback, + char *key, char *val) +{ + int i = ntesting_callbacks; + if (ntesting_callbacks >= 5) { return -1; } + + testing_callbacks[i] = callback; + testing_keys[i] = key; + testing_initialvals[i] = val; + ++ntesting_callbacks; + return 0; +} + +int opal_infosubscribe_testregister(opal_infosubscriber_t *object); +int +opal_infosubscribe_testregister(opal_infosubscriber_t *object) { - int err; - size_t key_size; - int flag; - opal_info_entry_t *iterator; - opal_info_t **old_info = &object->s_info; - opal_info_t *real_info; - char *updated_value; - void *node = NULL; - char *next_key; opal_hash_table_t *table = &object->s_subscriber_table; opal_callback_list_item_t *item; opal_list_t *list = NULL; - /* for each key/value in new info, let subscribers know of new value */ +// The testing section should only ever be activated if the testing callback +// above is used. + if (ntesting_callbacks != 0) { + int i; + for (i=0; idefault_value, testing_initialvals[i]) + && + item->callback == testing_callbacks[i]) + { + found = 1; + } + } + } + list = NULL; - real_info = OBJ_NEW(opal_info_t); - - OPAL_LIST_FOREACH(iterator, &new_info->super, opal_info_entry_t) { - - if ((updated_value = opal_infosubscribe_inform_subscribers(object, iterator->ie_key, iterator->ie_value))) { - err = opal_info_set(real_info, iterator->ie_key, updated_value); - if (MPI_SUCCESS != err) { - return err; + if (!found) { + opal_infosubscribe_subscribe(object, + testing_keys[i], + testing_initialvals[i], testing_callbacks[i]); } } } -/* - * Now any values in the old_info that were not included in the new info we should - * tell them that they are going away and give a chance to set them in the new info - * SOLT: TODO: This should be a compare with MPI_INFO_NULL?? - */ - if (NULL != *old_info) { - - /* let subscribers know it is going away, they may set a new value for it */ - - OPAL_LIST_FOREACH(iterator, &(*old_info)->super, opal_info_entry_t) { - -/* - * See if this is updated in the new_info. If so, we don't need to tell them about it - * going away, we already told them about the value change. - */ - err = opal_info_get (new_info, iterator->ie_key, 0, NULL, &flag); - if (MPI_SUCCESS != err) { - return err; - } - - if (!flag && (updated_value = opal_infosubscribe_inform_subscribers(object, iterator->ie_key, NULL))) { - err = opal_info_set(real_info, iterator->ie_key, updated_value); - if (MPI_SUCCESS != err) { - return err; +// For testing-mode only, while we're here, lets walk the whole list +// to see if there are any duplicates. + if (ntesting_callbacks != 0) { + int err; + void *node = NULL; + size_t key_size; + char *next_key; + opal_callback_list_item_t *item1, *item2; + + err = opal_hash_table_get_first_key_ptr(table, (void**) &next_key, + &key_size, (void**) &list, &node); + while (list && err == OPAL_SUCCESS) { + int counter = 0; + OPAL_LIST_FOREACH(item1, list, opal_callback_list_item_t) { + OPAL_LIST_FOREACH(item2, list, opal_callback_list_item_t) { + if (0 == + strcmp(item1->default_value, item2->default_value) + && + item1->callback == item2->callback) + { + ++counter; + } } } + if (counter > 1) { + printf("ERROR: duplicate info key/val subscription found " + "in hash table\n"); + exit(-1); + } + + err = opal_hash_table_get_next_key_ptr(table, + (void**) &next_key, &key_size, (void**) &list, node, &node); } + } - /* Clear old info */ - OBJ_DESTRUCT(old_info); - - } else { -/* - * If there is no old_info, then this is the first time that we are setting something and we should set all - * defaults that were not changed in new_info - */ - err = opal_hash_table_get_first_key_ptr(table, (void**) &next_key, &key_size, (void**) &list, &node); - - - while (list && err == OPAL_SUCCESS) { + return OPAL_SUCCESS; +} - err = opal_info_get (new_info, next_key, 0, NULL, &flag); +// This routine is to be used after making a callback for a +// key/val pair. The callback would have ggiven a new value to associate +// with , and this function saves the previous value under +// __IN_. +// +// The last argument indicates whether to overwrite a previous +// __IN_ or not. +static int +save_original_key_val(opal_info_t *info, char *key, char *val, int overwrite) +{ + char modkey[MPI_MAX_INFO_KEY]; + int flag, err; + + // Checking strlen, even though it should be unnecessary. + // This should only happen on predefined keys with short lengths. + if (strlen(key) + 5 < MPI_MAX_INFO_KEY) { + sprintf(modkey, "__IN_%s", key); + + flag = 0; + opal_info_get(info, modkey, 0, NULL, &flag); + if (!flag || overwrite) { + err = opal_info_set(info, modkey, val); if (MPI_SUCCESS != err) { return err; } -/* - * Figure out which subscriber's default value we will take. (Psst, we are going to - * take the first one we see) - */ - updated_value = NULL; - OPAL_LIST_FOREACH(item, list, opal_callback_list_item_t) { - if (item->default_value) { - updated_value = item->default_value; - break; - } - } - - if (updated_value) { - err = opal_info_set(real_info, next_key, updated_value); - } } +// FIXME: use whatever the Open MPI convention is for DEBUG options like this +// Even though I don't expect this codepath to happen, if it somehow DID happen +// in a real run with user-keys, I'd rather it be silent at that point rather +// being noisy and/or aborting. +#ifdef OMPI_DEBUG + } else { + printf("WARNING: Unexpected key length [%s]\n", key); +#endif + } + return MPI_SUCCESS; +} + +int +opal_infosubscribe_change_info(opal_infosubscriber_t *object, opal_info_t *new_info) +{ + int err; + opal_info_entry_t *iterator; + char *updated_value; - err = opal_hash_table_get_next_key_ptr(table, (void**) next_key, &key_size, (void**) &list, node, &node); + /* for each key/value in new info, let subscribers know of new value */ + int found_callback; + + if (!object->s_info) { + object->s_info = OBJ_NEW(opal_info_t); } + + if (NULL != new_info) { + OPAL_LIST_FOREACH(iterator, &new_info->super, opal_info_entry_t) { + + updated_value = opal_infosubscribe_inform_subscribers(object, iterator->ie_key, iterator->ie_value, &found_callback); + if (updated_value) { + err = opal_info_set(object->s_info, iterator->ie_key, updated_value); + } else { +// This path would happen if there was no callback for this key, +// or if there was a callback and it returned null. One way the +// setting was unrecognized the other way it was recognized and ignored, +// either way it shouldn't be set, which we'll ensure with an unset +// in case a previous value exists. + err = opal_info_delete(object->s_info, iterator->ie_key); + err = MPI_SUCCESS; // we don't care if the key was found or not + } + if (MPI_SUCCESS != err) { + return err; + } +// Save the original at "__IN_":"original" +// And if multiple set-info calls happen, the last would be the most relevant +// to save, so overwrite a previously saved value if there is one. + save_original_key_val(object->s_info, + iterator->ie_key, iterator->ie_value, 1); + }} - *old_info = real_info; - - return OPAL_SUCCESS; + return OPAL_SUCCESS; } +// Callers can provide a callback for processing info k/v pairs. +// +// Currently the callback() is expected to return a static string, and the +// callers of callback() do not try to free the string it returns. for example +// current callbacks do things like +// return some_condition ? "true" : "false"; +// the caller of callback() uses the return value in an opal_info_set() which +// strdups the string. The string returned from callback() is not kept beyond +// that. Currently if the callback() did malloc/strdup/etc for its return value +// the caller of callback() would have no way to know whether it needed freeing +// or not, so that string would be leaked. +// +// For future consideration I'd propose a model where callback() is expected +// to always strdup() its return value, so the value returned by callback() +// would either be NULL or it would be a string that needs free()ed. It seems +// to me this might be required if the strings become more dynamic than the +// simple true/false values seen in the current code. It'll be an easy change, +// callback() is only used two places. int opal_infosubscribe_subscribe(opal_infosubscriber_t *object, char *key, char *value, opal_key_interest_callback_t *callback) { opal_list_t *list = NULL; @@ -234,6 +364,51 @@ int opal_infosubscribe_subscribe(opal_infosubscriber_t *object, char *key, char } opal_list_append(list, (opal_list_item_t*) callback_list_item); + +// Trigger callback() on either the default value or the info that's in the +// object if there is one. Unfortunately there's some code duplication as +// this is similar to the job of opal_infosubscribe_change_info(). +// +// The value we store for key is whatever the callback() returns. +// We also leave a backup __IN_* key with the previous value. + +// - is there an info object yet attached to this object + if (NULL == object->s_info) { + object->s_info = OBJ_NEW(opal_info_t); + } +// - is there a value already associated with key in this obj's info: +// to use in the callback() + char *buffer = malloc(MPI_MAX_INFO_VAL+1); // (+1 shouldn't be needed) + char *val = value; // start as default value + int flag = 0; + char *updated_value; + int err; + opal_info_get(object->s_info, key, MPI_MAX_INFO_VAL, buffer, &flag); + if (flag) { + val = buffer; // become info value if this key was in info + } +// - callback() and modify the val in info + updated_value = callback(object, key, val); + if (updated_value) { + err = opal_info_set(object->s_info, key, updated_value); + } else { + err = opal_info_delete(object->s_info, key); + err = MPI_SUCCESS; // we don't care if the key was found or not + } + if (MPI_SUCCESS != err) { + free(buffer); + return err; + } +// - save the previous val under key __IN_* +// This function might be called separately for the same key multiple +// times (multiple modules might register an interest in the same key), +// so we only save __IN_ for the first. +// Note we're saving the first k/v regardless of whether it was the default +// or whether it came from info. This means system settings will show +// up if the user queries later with get_info. + save_original_key_val(object->s_info, key, val, 0); + + free(buffer); } else { /* * TODO: This should not happen diff --git a/opal/util/info_subscriber.h b/opal/util/info_subscriber.h index e3c856d34e0..c676ab0338e 100644 --- a/opal/util/info_subscriber.h +++ b/opal/util/info_subscriber.h @@ -14,6 +14,7 @@ * Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved. * Copyright (c) 2012-2015 Los Alamos National Security, LLC. All rights * reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/oshmem/runtime/oshmem_info_support.c b/oshmem/runtime/oshmem_info_support.c index 033fe47a73d..738511ccb4f 100644 --- a/oshmem/runtime/oshmem_info_support.c +++ b/oshmem/runtime/oshmem_info_support.c @@ -2,7 +2,7 @@ * Copyright (c) 2013 Mellanox Technologies, Inc. * All rights reserved. * Copyright (c) 2014 Cisco Systems, Inc. All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/oshmem/tools/oshmem_info/oshmem_info.c b/oshmem/tools/oshmem_info/oshmem_info.c index 991609c9b13..a6166ba4525 100644 --- a/oshmem/tools/oshmem_info/oshmem_info.c +++ b/oshmem/tools/oshmem_info/oshmem_info.c @@ -3,7 +3,7 @@ * All rights reserved. * Copyright (c) 2014 Intel, Inc. All rights reserved. * - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow diff --git a/oshmem/tools/oshmem_info/param.c b/oshmem/tools/oshmem_info/param.c index aedd844ed8f..b0c44c7a302 100644 --- a/oshmem/tools/oshmem_info/param.c +++ b/oshmem/tools/oshmem_info/param.c @@ -5,7 +5,7 @@ * Copyright (c) 2014-2015 Cisco Systems, Inc. All rights reserved. * Copyright (c) 2014-2016 Research Organization for Information Science * and Technology (RIST). All rights reserved. - * Copyright (c) 2016 IBM Corp. All rights reserved. + * Copyright (c) 2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow