From 11b7e95416b21efc17ce69d764f847b2cf0b7769 Mon Sep 17 00:00:00 2001
From: foreman
Date: Wed, 18 Feb 2015 17:22:47 -0500
Subject: [PATCH] P4 to Git Change 1123271 by wchau@wchau_WINDOWS7_OCL on
2015/02/18 16:59:12
ECR #399840 - OpenCL Runtime HW Debug support development - add install_trap API to avoid the expose of runtime trap handler to the DBE.
Affected files ...
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_context.cpp#41 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_debugger_amd.cpp#5 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_debugger_amd.h#5 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpudebugmanager.cpp#6 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/hwdebug.cpp#4 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/hwdebug.hpp#5 edit
---
opencl/api/opencl/amdocl/cl_context.cpp | 5 ++-
opencl/api/opencl/amdocl/cl_debugger_amd.cpp | 40 ++++++++++++++++++
opencl/api/opencl/amdocl/cl_debugger_amd.h | 43 +++++++++++++++++++-
3 files changed, 84 insertions(+), 4 deletions(-)
diff --git a/opencl/api/opencl/amdocl/cl_context.cpp b/opencl/api/opencl/amdocl/cl_context.cpp
index 35483646e2..e9896532ed 100644
--- a/opencl/api/opencl/amdocl/cl_context.cpp
+++ b/opencl/api/opencl/amdocl/cl_context.cpp
@@ -419,7 +419,7 @@ RUNTIME_ENTRY(cl_int, clGetContextInfo, (
}
return CL_SUCCESS;
}
- case CL_CONTEXT_ADAPTER_D3D9EX_KHR: {
+ case CL_CONTEXT_ADAPTER_D3D9EX_KHR: {
if (param_value != NULL && param_value_size < sizeof(void*)) {
return CL_INVALID_VALUE;
}
@@ -534,7 +534,7 @@ clGetExtensionFunctionAddress(const char* func_name)
CL_EXTENSION_ENTRYPOINT_CHECK(clEnqueueAcquireD3D10ObjectsKHR);
CL_EXTENSION_ENTRYPOINT_CHECK(clEnqueueReleaseD3D10ObjectsKHR);
CL_EXTENSION_ENTRYPOINT_CHECK(clEnqueueAcquireDX9MediaSurfacesKHR);
- CL_EXTENSION_ENTRYPOINT_CHECK(clEnqueueReleaseDX9MediaSurfacesKHR);
+ CL_EXTENSION_ENTRYPOINT_CHECK(clEnqueueReleaseDX9MediaSurfacesKHR);
#endif //_WIN32
#if cl_amd_open_video
CL_EXTENSION_ENTRYPOINT_CHECK(clEnqueueRunVideoProgramAMD);
@@ -590,6 +590,7 @@ clGetExtensionFunctionAddress(const char* func_name)
CL_EXTENSION_ENTRYPOINT_CHECK(clHwDbgUnmapScratchRingAMD);
CL_EXTENSION_ENTRYPOINT_CHECK(clHwDbgGetKernelParamMemAMD);
CL_EXTENSION_ENTRYPOINT_CHECK(clHwDbgSetGlobalMemoryAMD);
+ CL_EXTENSION_ENTRYPOINT_CHECK(clHwDbgInstallTrapAMD);
#endif //_WIN32
break;
case 'I':
diff --git a/opencl/api/opencl/amdocl/cl_debugger_amd.cpp b/opencl/api/opencl/amdocl/cl_debugger_amd.cpp
index 9781fc3ea5..90d884494e 100644
--- a/opencl/api/opencl/amdocl/cl_debugger_amd.cpp
+++ b/opencl/api/opencl/amdocl/cl_debugger_amd.cpp
@@ -911,6 +911,46 @@ RUNTIME_ENTRY(cl_int, clHwDbgSetGlobalMemoryAMD, (
RUNTIME_EXIT
+/*! \brief Install the trap handler of a given type
+ *
+ * \param device specifies the device to be used
+ *
+ * \param trapType is the type of trap handler
+ *
+ * \param trapHandler is the pointer of trap handler (TBA)
+ *
+ * \param trapBuffer is the pointer of trap handler buffer (TMA)
+ *
+ * \return One of the following values:
+ * - CL_SUCCESS if the event occurs before the timeout
+ * - CL_INVALID_DEVICE if the device is not valid
+ * - CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD if there is no HW DEBUG manager
+ */
+RUNTIME_ENTRY(cl_int, clHwDbgInstallTrapAMD, (
+ cl_device_id device,
+ cl_dbg_trap_type_amd trapType,
+ cl_mem trapHandler,
+ cl_mem trapBuffer))
+{
+ if (!is_valid(device)) {
+ return CL_INVALID_DEVICE;
+ }
+
+ amd::HwDebugManager * debugManager = as_amd(device)->hwDebugMgr();
+ if (NULL == debugManager) {
+ return CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD;
+ }
+
+ amd::Memory* pTrapHandler = as_amd(trapHandler);
+ amd::Memory* pTrapBuffer = as_amd(trapBuffer);
+ debugManager->installTrap(trapType, pTrapHandler, pTrapBuffer);
+
+ return CL_SUCCESS;
+}
+
+RUNTIME_EXIT
+
+
/*! @}
* @}
*/
diff --git a/opencl/api/opencl/amdocl/cl_debugger_amd.h b/opencl/api/opencl/amdocl/cl_debugger_amd.h
index e27cdad5e8..bd0ef2d487 100644
--- a/opencl/api/opencl/amdocl/cl_debugger_amd.h
+++ b/opencl/api/opencl/amdocl/cl_debugger_amd.h
@@ -114,6 +114,16 @@ extern "C" {
typedef uintptr_t cl_dbg_event_amd; //! debug event
+/*! \brief Trap Handler Type
+ *
+ * The trap handler for each support type.
+ */
+enum cl_dbg_trap_type_amd
+{
+ CL_DBG_DEBUG_TRAP = 0, //! HW debug
+ CL_DBG_MAX_TRAP
+};
+
/*! \brief Wave actions used to control the wave execution on the hardware
*
* The wave action enumerations are used to specify the desired
@@ -245,7 +255,7 @@ typedef struct _cl_dispatch_debug_info_amd
*/
typedef struct _cl_aql_packet_info_amd
{
- unsigned int trapReservedVgprIndex; //! VGPR index reserved for trap
+ cl_uint trapReservedVgprIndex; //! VGPR index reserved for trap
//! value is -1 when kernel was not compiled
//! in debug mode.
cl_uint scratchBufferWaveOffset; //! scratch buffer wave offset
@@ -285,7 +295,6 @@ typedef void * (*cl_PreDispatchCallBackFunctionAMD) ( cl_device_id device,
void *ocl_event_handle,
const void *aql_packet,
void *acl_binary,
- cl_ulong *device_trap_buffer,
void *user_args);
/*! \brief Post-dispatch call back function signature
@@ -761,6 +770,36 @@ extern CL_API_ENTRY cl_int CL_API_CALL clHwDbgSetGlobalMemoryAMD(
cl_uint /* size */
) CL_API_SUFFIX__VERSION_2_0;
+
+/*! \brief Install the trap handler of a given type
+ *
+ * \param device specifies the device to be used
+ *
+ * \param trapType is the type of trap handler
+ *
+ * \param trapHandler is the pointer of trap handler (TBA)
+ *
+ * \param trapBuffer is the pointer of trap handler buffer (TMA)
+ *
+ * \param trapHandlerSize size (in bytes) of the trap handler
+ *
+ * \param trapBufferSize size (in bytes) of the trap handler buffer
+ *
+ * \return One of the following values:
+ * - CL_SUCCESS if the event occurs before the timeout
+ * - CL_INVALID_DEVICE if the device is not valid
+ * - CL_INVALID_VALUE if trapHandler is NULL or trapHandlerSize <= 0
+ * - CL_HWDBG_MANAGER_NOT_AVAILABLE_AMD if there is no HW DEBUG manager
+ */
+extern CL_API_ENTRY cl_int CL_API_CALL clHwDbgInstallTrapAMD(
+ cl_device_id /* device */,
+ cl_dbg_trap_type_amd /* trapType */,
+ cl_mem /* trapHandler */,
+ cl_mem /* trapBuffer */
+) CL_API_SUFFIX__VERSION_2_0;
+
+
+
#ifdef __cplusplus
} /*extern "C"*/
#endif /*__cplusplus*/