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;
}
}