diff --git a/opal/mca/btl/smcuda/btl_smcuda.c b/opal/mca/btl/smcuda/btl_smcuda.c index 70499fcaa9..c41808fcf6 100644 --- a/opal/mca/btl/smcuda/btl_smcuda.c +++ b/opal/mca/btl/smcuda/btl_smcuda.c @@ -1197,17 +1197,16 @@ static void mca_btl_smcuda_send_cuda_ipc_request(struct mca_btl_base_module_t* b if (endpoint->ipcstate != IPC_INIT) { OPAL_THREAD_UNLOCK(&endpoint->endpoint_lock); return; - } else { - endpoint->ipctries++; - if (endpoint->ipctries > MAXTRIES) { - endpoint->ipcstate = IPC_BAD; - OPAL_THREAD_UNLOCK(&endpoint->endpoint_lock); - return; - } - /* All is good. Set up state and continue. */ - endpoint->ipcstate = IPC_SENT; - OPAL_THREAD_UNLOCK(&endpoint->endpoint_lock); } + endpoint->ipctries++; + if (endpoint->ipctries > MAXTRIES) { + endpoint->ipcstate = IPC_BAD; + OPAL_THREAD_UNLOCK(&endpoint->endpoint_lock); + return; + } + /* All is good. Set up state and continue. */ + endpoint->ipcstate = IPC_SENT; + OPAL_THREAD_UNLOCK(&endpoint->endpoint_lock); if ( mca_btl_smcuda_component.num_outstanding_frags * 2 > (int) mca_btl_smcuda_component.fifo_size ) { mca_btl_smcuda_component_progress(); diff --git a/opal/mca/btl/smcuda/btl_smcuda_component.c b/opal/mca/btl/smcuda/btl_smcuda_component.c index 3b770bb1a4..c31c6d9a93 100644 --- a/opal/mca/btl/smcuda/btl_smcuda_component.c +++ b/opal/mca/btl/smcuda/btl_smcuda_component.c @@ -136,8 +136,15 @@ static inline unsigned int mca_btl_smcuda_param_register_uint( return *storage; } -static int mca_btl_smcuda_component_verify(void) { - +static int mca_btl_smcuda_component_verify(void) +{ + /* We canot support async memcpy right now */ + if( (mca_btl_smcuda.super.btl_flags & MCA_BTL_FLAGS_CUDA_COPY_ASYNC_RECV) || + (mca_btl_smcuda.super.btl_flags & MCA_BTL_FLAGS_CUDA_COPY_ASYNC_SEND) ) { + opal_output_verbose(10, opal_btl_base_framework.framework_output, + "btl: smcuda: disable all asynchronous memcpy support"); + } + mca_btl_smcuda.super.btl_flags &= ~(MCA_BTL_FLAGS_CUDA_COPY_ASYNC_RECV | MCA_BTL_FLAGS_CUDA_COPY_ASYNC_SEND); return mca_btl_base_param_verify(&mca_btl_smcuda.super); } @@ -1100,27 +1107,27 @@ int mca_btl_smcuda_component_progress(void) } goto recheck_peer; } - default: - /* unknown */ - /* - * This code path should presumably never be called. - * It's unclear if it should exist or, if so, how it should be written. - * If we want to return it to the sending process, - * we have to figure out who the sender is. - * It seems we need to subtract the mask bits. - * Then, hopefully this is an sm header that has an smp_rank field. - * Presumably that means the received header was relative. - * Or, maybe this code should just be removed. - */ - opal_output(0, "mca_btl_smcuda_component_progress read an unknown type of header"); - hdr = (mca_btl_smcuda_hdr_t *) RELATIVE2VIRTUAL(hdr); - peer_smp_rank = hdr->my_smp_rank; - hdr = (mca_btl_smcuda_hdr_t*)((uintptr_t)hdr->frag | - MCA_BTL_SMCUDA_FRAG_STATUS_MASK); - MCA_BTL_SMCUDA_FIFO_WRITE( - mca_btl_smcuda_component.sm_peers[peer_smp_rank], - my_smp_rank, peer_smp_rank, hdr, false, true, rc); - break; + default: + /* unknown */ + /* + * This code path should presumably never be called. + * It's unclear if it should exist or, if so, how it should be written. + * If we want to return it to the sending process, + * we have to figure out who the sender is. + * It seems we need to subtract the mask bits. + * Then, hopefully this is an sm header that has an smp_rank field. + * Presumably that means the received header was relative. + * Or, maybe this code should just be removed. + */ + opal_output(0, "mca_btl_smcuda_component_progress read an unknown type of header"); + hdr = (mca_btl_smcuda_hdr_t *) RELATIVE2VIRTUAL(hdr); + peer_smp_rank = hdr->my_smp_rank; + hdr = (mca_btl_smcuda_hdr_t*)((uintptr_t)hdr->frag | + MCA_BTL_SMCUDA_FRAG_STATUS_MASK); + MCA_BTL_SMCUDA_FIFO_WRITE( + mca_btl_smcuda_component.sm_peers[peer_smp_rank], + my_smp_rank, peer_smp_rank, hdr, false, true, rc); + break; } } (void)rc; /* this is safe to ignore as the message is requeued till success */