From daafd303ecdf783f10e86ff824f4bbc27a22d199 Mon Sep 17 00:00:00 2001 From: Satyanvesh Dittakavi Date: Mon, 8 Mar 2021 07:48:24 -0800 Subject: [PATCH] SWDEV-275317 - Fix hipMemcpy2DFromArray to return proper error types Change-Id: Id722865d81460bfd2fa6ad7a198b6e3c2a08265a --- hipamd/include/hip/hip_runtime_api.h | 1 + hipamd/rocclr/hip_error.cpp | 2 ++ hipamd/rocclr/hip_memory.cpp | 12 ++++++++++++ hipamd/rocclr/trace_helper.h | 1 + 4 files changed, 16 insertions(+) diff --git a/hipamd/include/hip/hip_runtime_api.h b/hipamd/include/hip/hip_runtime_api.h index 792b794afa..3c67216d24 100644 --- a/hipamd/include/hip/hip_runtime_api.h +++ b/hipamd/include/hip/hip_runtime_api.h @@ -218,6 +218,7 @@ typedef enum __HIP_NODISCARD hipError_t { hipErrorProfilerAlreadyStarted = 7, hipErrorProfilerAlreadyStopped = 8, hipErrorInvalidConfiguration = 9, + hipErrorInvalidPitchValue = 12, hipErrorInvalidSymbol = 13, hipErrorInvalidDevicePointer = 17, ///< Invalid Device Pointer hipErrorInvalidMemcpyDirection = 21, ///< Invalid memory copy direction diff --git a/hipamd/rocclr/hip_error.cpp b/hipamd/rocclr/hip_error.cpp index 11a9ad2f8f..7ecedff8d4 100644 --- a/hipamd/rocclr/hip_error.cpp +++ b/hipamd/rocclr/hip_error.cpp @@ -78,6 +78,8 @@ const char *hipGetErrorName(hipError_t hip_error) return "hipErrorNoDevice"; case hipErrorInvalidDevice: return "hipErrorInvalidDevice"; + case hipErrorInvalidPitchValue: + return "hipErrorInvalidPitchValue"; case hipErrorInvalidImage: return "hipErrorInvalidImage"; case hipErrorInvalidContext: diff --git a/hipamd/rocclr/hip_memory.cpp b/hipamd/rocclr/hip_memory.cpp index 3404c55622..694c2c515b 100755 --- a/hipamd/rocclr/hip_memory.cpp +++ b/hipamd/rocclr/hip_memory.cpp @@ -1665,6 +1665,10 @@ hipError_t hipMemcpyToArray(hipArray* dst, size_t wOffset, size_t hOffset, const } hipError_t ihipMemcpy2DFromArray(void* dst, size_t dpitch, hipArray_const_t src, size_t wOffsetSrc, size_t hOffsetSrc, size_t width, size_t height, hipMemcpyKind kind, hipStream_t stream, bool isAsync = false) { + if (src == nullptr) { + HIP_RETURN(hipErrorInvalidResourceHandle); + } + hip_Memcpy2D desc = {}; desc.srcXInBytes = wOffsetSrc; @@ -2241,12 +2245,20 @@ hipError_t hipMemcpyArrayToArray(hipArray_t dst, size_t wOffsetDst, size_t hOffs hipError_t hipMemcpy2DFromArray(void* dst, size_t dpitch, hipArray_const_t src, size_t wOffsetSrc, size_t hOffset, size_t width, size_t height, hipMemcpyKind kind) { HIP_INIT_API(hipMemcpy2DFromArray, dst, dpitch, src, wOffsetSrc, hOffset, width, height, kind); + if (dpitch == 0) { + HIP_RETURN(hipErrorInvalidPitchValue); + } + HIP_RETURN_DURATION(ihipMemcpy2DFromArray(dst, dpitch, src, wOffsetSrc, hOffset, width, height, kind, nullptr)); } hipError_t hipMemcpy2DFromArrayAsync(void* dst, size_t dpitch, hipArray_const_t src, size_t wOffsetSrc, size_t hOffsetSrc, size_t width, size_t height, hipMemcpyKind kind, hipStream_t stream) { HIP_INIT_API(hipMemcpy2DFromArrayAsync, dst, dpitch, src, wOffsetSrc, hOffsetSrc, width, height, kind, stream); + if (dpitch == 0) { + HIP_RETURN(hipErrorInvalidPitchValue); + } + HIP_RETURN_DURATION(ihipMemcpy2DFromArray(dst, dpitch, src, wOffsetSrc, hOffsetSrc, width, height, kind, stream, true)); } diff --git a/hipamd/rocclr/trace_helper.h b/hipamd/rocclr/trace_helper.h index 5c9eb97700..ee4eae68ac 100644 --- a/hipamd/rocclr/trace_helper.h +++ b/hipamd/rocclr/trace_helper.h @@ -83,6 +83,7 @@ inline const char* ihipErrorString(hipError_t hip_error) { CASE_STR(hipErrorInvalidConfiguration); CASE_STR(hipErrorInvalidDevice); CASE_STR(hipErrorInvalidValue); + CASE_STR(hipErrorInvalidPitchValue); CASE_STR(hipErrorInvalidDevicePointer); CASE_STR(hipErrorInvalidMemcpyDirection); CASE_STR(hipErrorUnknown);