From 3997f5b8c899f43820ff9982e2b36e1859a7fb71 Mon Sep 17 00:00:00 2001 From: foreman Date: Mon, 21 Sep 2015 15:35:28 -0400 Subject: [PATCH] P4 to Git Change 1192674 by jatang@jatang-opencl-hsa-stg1 on 2015/09/21 15:20:26 SWDEV-423121 - Support CL_THREAD_TRACE_BUFFERS_SIZE correctly. The current implementation hardcoded valueSize to size of 4 unsigned integers. We need to support both 2 SEs (Bonarie) and 4 SEs (Tonga/Fiji). Affected files ... ... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_thread_trace_amd.cpp#7 edit [ROCm/clr commit: 847f589e48de141276f18f2a2d25a8c5d9bb5830] --- .../api/opencl/amdocl/cl_thread_trace_amd.cpp | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/projects/clr/opencl/api/opencl/amdocl/cl_thread_trace_amd.cpp b/projects/clr/opencl/api/opencl/amdocl/cl_thread_trace_amd.cpp index 99322c0400..55edca5ee5 100644 --- a/projects/clr/opencl/api/opencl/amdocl/cl_thread_trace_amd.cpp +++ b/projects/clr/opencl/api/opencl/amdocl/cl_thread_trace_amd.cpp @@ -8,6 +8,7 @@ #include "platform/threadtrace.hpp" #include #include +#include /*! \addtogroup API * @{ @@ -215,7 +216,6 @@ RUNTIME_ENTRY(cl_int, clGetThreadTraceInfoAMD, ( { return amd::clGetInfo(seNum, param_value_size, param_value, param_value_size_ret); - break; } case CL_THREAD_TRACE_BUFFERS_SIZE: { @@ -223,14 +223,34 @@ RUNTIME_ENTRY(cl_int, clGetThreadTraceInfoAMD, ( if (devThreadTrace == NULL) { return CL_INVALID_OPERATION; } - unsigned int bufSize2Se[4] = {0}; - if (!devThreadTrace->info(thread_trace_info_param, bufSize2Se, seNum)) { + std::unique_ptr bufSize2Se(new uint[seNum]); + + if (bufSize2Se.get() == NULL) { + return CL_OUT_OF_HOST_MEMORY; + } + + if (!devThreadTrace->info(thread_trace_info_param, bufSize2Se.get(), seNum)) { return CL_INVALID_VALUE; } - return amd::clGetInfo(bufSize2Se, - param_value_size, param_value, param_value_size_ret); - break; + + const size_t valueSize = seNum * sizeof(unsigned int); + + if (param_value != NULL && param_value_size < valueSize) { + return CL_INVALID_VALUE; + } + + *not_null(param_value_size_ret) = valueSize; + + if (param_value != NULL) { + ::memcpy(param_value, bufSize2Se.get(), valueSize); + if (param_value_size > valueSize) { + ::memset(static_cast
(param_value) + valueSize, + '\0', param_value_size - valueSize); + } + } + + return CL_SUCCESS; } }