diff --git a/src/components/cuda/papi_cupti_common.c b/src/components/cuda/papi_cupti_common.c index 71d001bdd..3d74b0635 100644 --- a/src/components/cuda/papi_cupti_common.c +++ b/src/components/cuda/papi_cupti_common.c @@ -623,7 +623,6 @@ int cuptic_ctxarr_update_current(cuptic_info_t info, int evt_dev_id) if (cuda_err != CUDA_SUCCESS) { return PAPI_EMISC; } - if (info[dev_id].ctx == NULL) { // Store current user created CUDA context cuda_err = cuCtxGetCurrentPtr(&info[dev_id].ctx); @@ -639,11 +638,14 @@ int cuptic_ctxarr_update_current(cuptic_info_t info, int evt_dev_id) // for them. Note, that for machine with multiple devices, we need to // call cudaSetDevice. else { - cudaArtCheckErrors(cudaSetDevicePtr(evt_dev_id), return PAPI_EMISC); - cudaArtCheckErrors(cudaFreePtr(NULL), return PAPI_EMISC); - - cudaCheckErrors(cuCtxGetCurrentPtr(&info[evt_dev_id].ctx), return PAPI_EMISC); - cudaCheckErrors(cuCtxPopCurrentPtr(&pctx), PAPI_EMISC); + // Guard against a user PopCurrent + if (info[evt_dev_id].ctx == NULL) { + cudaArtCheckErrors(cudaSetDevicePtr(evt_dev_id), return PAPI_EMISC); + cudaArtCheckErrors(cudaFreePtr(NULL), return PAPI_EMISC); + + cudaCheckErrors(cuCtxGetCurrentPtr(&info[evt_dev_id].ctx), return PAPI_EMISC); + cudaCheckErrors(cuCtxPopCurrentPtr(&pctx), PAPI_EMISC); + } } return PAPI_OK;