From c20919607fe6647880695eed75fe67c144864e33 Mon Sep 17 00:00:00 2001 From: Mark Allen Date: Mon, 30 Jan 2017 20:29:50 -0500 Subject: [PATCH] fixes for Dave's get/set info code The expected sequence of events for processing info during object creation is that if there's an incoming info arg, it is opal_info_dup()ed into the obj at obj->s_info first. Then interested components register callbacks for keys they want to know about using opal_infosubscribe_infosubscribe(). Inside info_subscribe_subscribe() the specified callback() is called with whatever matching k/v is in the object's info, or with the default. The return string from the callback goes into the new k/v stored in info, and the input k/v is saved as __IN_/. It's saved the same way whether the input came from info or whether it was a default. A null return from the callback indicates an ignored key/val, and no k/v is stored for it, but an __IN_/ is still kept so we still have access to the original. At MPI_*_set_info() time, opal_infosubscribe_change_info() is used. That function calls the registered callbacks for each item in the provided info. If the callback returns non-null, the info is updated with that k/v, or if the callback returns null, that key is deleted from info. An __IN_/ is saved either way, and overwrites any previously saved value. When MPI_*_get_info() is called, opal_info_dup_mpistandard() is used, which allows relatively easy changes in interpretation of the standard, by looking at both the / and __IN_/ in info. Right now it does 1. includes system extras, eg k/v defaults not expliclty set by the user 2. omits ignored keys 3. shows input values, not callback modifications, eg not the internal values Currently the callbacks are doing things like return some_condition ? "true" : "false" that is, returning static strings that are not to be freed. If the return strings start becoming more dynamic in the future I don't see how unallocated strings could support that, so I'd propose a change for the future that the callback()s registered with info_subscribe_subscribe() do a strdup on their return, and we change the callers of callback() to free the strings it returns (there are only two callers). Rough outline of the smaller changes spread over the less central files: comm.c initialize comm->super.s_info to NULL copy into comm->super.s_info in comm creation calls that provide info OBJ_RELEASE comm->super.s_info at free time comm_init.c initialize comm->super.s_info to NULL file.c copy into file->super.s_info if file creation provides info OBJ_RELEASE file->super.s_info at free time win.c copy into win->super.s_info if win creation provides info OBJ_RELEASE win->super.s_info at free time comm_get_info.c file_get_info.c win_get_info.c change_info() if there's no info attached (shouldn't happen if callbacks are registered) copy the info for the user The other category of change is generally addressing compiler warnings where ompi_info_t and opal_info_t were being used a little too interchangably. An ompi_info_t* contains an opal_info_t*, at &(ompi_info->super) Also this commit updates the copyrights. Signed-off-by: Mark Allen --- AUTHORS | 2 - ompi/communicator/comm.c | 28 +- ompi/communicator/comm_init.c | 3 +- ompi/communicator/communicator.h | 2 +- ompi/debuggers/predefined_gap_test.c | 2 +- ompi/dpm/dpm.c | 43 ++- ompi/file/file.c | 18 +- ompi/file/file.h | 2 +- ompi/info/info.c | 53 ++- ompi/info/info.h | 57 ++- ompi/interlib/interlib.c | 2 + .../mca/common/ompio/common_ompio_file_open.c | 3 +- .../mca/common/ompio/common_ompio_file_view.c | 1 + ompi/mca/fs/fs.h | 3 +- ompi/mca/fs/lustre/fs_lustre.h | 2 +- ompi/mca/fs/lustre/fs_lustre_file_delete.c | 2 +- ompi/mca/fs/lustre/fs_lustre_file_open.c | 2 +- ompi/mca/fs/plfs/fs_plfs.h | 2 +- ompi/mca/fs/plfs/fs_plfs_file_delete.c | 2 +- ompi/mca/fs/plfs/fs_plfs_file_open.c | 2 +- ompi/mca/fs/pvfs2/fs_pvfs2.h | 2 +- ompi/mca/fs/pvfs2/fs_pvfs2_file_delete.c | 2 +- ompi/mca/fs/pvfs2/fs_pvfs2_file_open.c | 2 +- ompi/mca/fs/ufs/fs_ufs.h | 2 +- ompi/mca/fs/ufs/fs_ufs_file_delete.c | 2 +- ompi/mca/fs/ufs/fs_ufs_file_open.c | 2 +- ompi/mca/io/base/base.h | 2 +- ompi/mca/io/base/io_base_delete.c | 2 +- ompi/mca/io/base/io_base_file_select.c | 2 +- ompi/mca/io/io.h | 3 +- ompi/mca/io/ompio/io_ompio.h | 2 +- ompi/mca/io/ompio/io_ompio_component.c | 2 +- ompi/mca/io/ompio/io_ompio_file_open.c | 2 +- ompi/mca/io/ompio/io_ompio_file_set_view.c | 2 +- ompi/mca/io/ompio/io_ompio_module.c | 2 +- ompi/mca/io/romio314/src/io_romio314.h | 2 +- .../io/romio314/src/io_romio314_component.c | 14 +- .../io/romio314/src/io_romio314_file_open.c | 49 ++- ompi/mca/io/romio314/src/io_romio314_module.c | 3 +- ompi/mca/osc/base/base.h | 2 +- ompi/mca/osc/base/osc_base_init.c | 2 +- ompi/mca/osc/osc.h | 2 +- ompi/mca/osc/portals4/osc_portals4.h | 2 +- .../mca/osc/portals4/osc_portals4_component.c | 2 +- ompi/mca/osc/pt2pt/osc_pt2pt.h | 2 +- ompi/mca/osc/pt2pt/osc_pt2pt_component.c | 5 +- ompi/mca/osc/rdma/osc_rdma_component.c | 4 +- ompi/mca/osc/sm/osc_sm.h | 2 +- ompi/mca/osc/sm/osc_sm_component.c | 14 +- ompi/mca/rte/orte/rte_orte.h | 2 +- ompi/mca/sharedfp/addproc/sharedfp_addproc.h | 2 +- .../addproc/sharedfp_addproc_file_open.c | 2 +- .../sharedfp/individual/sharedfp_individual.c | 6 +- .../sharedfp/individual/sharedfp_individual.h | 2 +- .../sharedfp_individual_file_open.c | 6 +- .../sharedfp/lockedfile/sharedfp_lockedfile.h | 2 +- .../sharedfp_lockedfile_file_open.c | 4 +- ompi/mca/sharedfp/sharedfp.h | 3 +- ompi/mca/sharedfp/sm/sharedfp_sm.h | 2 +- ompi/mca/sharedfp/sm/sharedfp_sm_file_open.c | 4 +- ompi/mca/topo/base/base.h | 2 +- .../topo/base/topo_base_dist_graph_create.c | 10 +- .../topo_base_dist_graph_create_adjacent.c | 10 + ompi/mca/topo/topo.h | 2 +- ompi/mca/topo/treematch/topo_treematch.h | 2 +- .../topo_treematch_dist_graph_create.c | 2 +- ompi/mpi/c/alloc_mem.c | 2 +- ompi/mpi/c/comm_dup_with_info.c | 2 +- ompi/mpi/c/comm_get_info.c | 7 +- ompi/mpi/c/comm_set_info.c | 4 +- ompi/mpi/c/comm_spawn.c | 3 +- ompi/mpi/c/comm_spawn_multiple.c | 5 +- ompi/mpi/c/comm_split_type.c | 3 +- ompi/mpi/c/dist_graph_create.c | 3 +- ompi/mpi/c/dist_graph_create_adjacent.c | 3 +- ompi/mpi/c/file_delete.c | 3 +- ompi/mpi/c/file_get_info.c | 7 +- ompi/mpi/c/file_open.c | 3 +- ompi/mpi/c/file_set_info.c | 4 +- ompi/mpi/c/file_set_view.c | 3 +- ompi/mpi/c/info_delete.c | 3 +- ompi/mpi/c/info_dup.c | 5 +- ompi/mpi/c/info_get.c | 4 +- ompi/mpi/c/info_get_nkeys.c | 3 +- ompi/mpi/c/info_get_nthkey.c | 5 +- ompi/mpi/c/info_get_valuelen.c | 3 +- ompi/mpi/c/info_set.c | 3 +- ompi/mpi/c/lookup_name.c | 3 +- ompi/mpi/c/publish_name.c | 5 +- ompi/mpi/c/unpublish_name.c | 3 +- ompi/mpi/c/win_allocate.c | 3 +- ompi/mpi/c/win_allocate_shared.c | 3 +- ompi/mpi/c/win_create.c | 3 +- ompi/mpi/c/win_create_dynamic.c | 3 +- ompi/mpi/c/win_get_info.c | 7 +- ompi/mpi/c/win_set_info.c | 4 +- ompi/mpiext/cr/c/quiesce_start.c | 2 +- ompi/runtime/ompi_mpi_finalize.c | 2 +- ompi/runtime/ompi_mpi_init.c | 2 +- ompi/win/win.c | 12 +- ompi/win/win.h | 2 +- opal/mca/mpool/base/mpool_base_alloc.c | 2 +- opal/util/Makefile.am | 2 +- opal/util/info.c | 121 ++++++- opal/util/info.h | 29 ++ opal/util/info_subscriber.c | 331 +++++++++++++----- opal/util/info_subscriber.h | 1 + oshmem/runtime/oshmem_info_support.c | 2 +- oshmem/tools/oshmem_info/oshmem_info.c | 2 +- oshmem/tools/oshmem_info/param.c | 2 +- 110 files changed, 798 insertions(+), 256 deletions(-) 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