From fe05fcc11a5f94fdde9a97423428f9ad779c296c Mon Sep 17 00:00:00 2001 From: Gilles Gouaillardet Date: Wed, 20 Feb 2019 09:49:37 +0900 Subject: [PATCH] osc/rdma: correctly handle communications to self mark the "self" peer OMPI_OSC_RDMA_PEER_LOCAL_BASE when the window is dynamically created and use_cpu_atomics is set in order to correctly handle communications to self. Thanks Bart Janssens for reporting this issue. Refs. open-mpi/ompi#6394 Signed-off-by: Gilles Gouaillardet --- ompi/mca/osc/rdma/osc_rdma_component.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/ompi/mca/osc/rdma/osc_rdma_component.c b/ompi/mca/osc/rdma/osc_rdma_component.c index d379350fdd..5afac944d5 100644 --- a/ompi/mca/osc/rdma/osc_rdma_component.c +++ b/ompi/mca/osc/rdma/osc_rdma_component.c @@ -19,6 +19,8 @@ * Copyright (c) 2016-2017 IBM Corporation. All rights reserved. * Copyright (c) 2018 Cisco Systems, Inc. All rights reserved * Copyright (c) 2018 Amazon.com, Inc. or its affiliates. All Rights reserved. + * Copyright (c) 2019 Research Organization for Information Science + * and Technology (RIST). All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -722,7 +724,13 @@ static int allocate_state_shared (ompi_osc_rdma_module_t *module, void **base, s ompi_osc_module_add_peer (module, peer); - if (MPI_WIN_FLAVOR_DYNAMIC == module->flavor || 0 == temp[i].size) { + if (MPI_WIN_FLAVOR_DYNAMIC == module->flavor) { + if (module->use_cpu_atomics && peer_rank == my_rank) { + peer->flags |= OMPI_OSC_RDMA_PEER_LOCAL_BASE; + } + /* nothing more to do */ + continue; + } else if (0 == temp[i].size) { /* nothing more to do */ continue; }