From 2cce18fb38c359f716a2630ee96feb9b56c5282c Mon Sep 17 00:00:00 2001 From: Tao Sang Date: Wed, 23 Oct 2024 10:32:46 -0400 Subject: [PATCH] SWDEV-492563 - Fix Ocl issues 1. Fix LDSSize type to be uint32_t. 2. Prevent clWaitForEvents running on complete events whose HostQueue have been destructed. Change-Id: I829e915f56b37db2ba76bb876c9656166534f154 [ROCm/clr commit: 82dff9a67d74345e35164c68ca1dfe9fae963eac] --- projects/clr/opencl/amdocl/cl_event.cpp | 7 +++++-- projects/clr/rocclr/device/pal/palkernel.cpp | 3 ++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/projects/clr/opencl/amdocl/cl_event.cpp b/projects/clr/opencl/amdocl/cl_event.cpp index 65b4f45e64..d4f2b04e26 100644 --- a/projects/clr/opencl/amdocl/cl_event.cpp +++ b/projects/clr/opencl/amdocl/cl_event.cpp @@ -94,14 +94,17 @@ RUNTIME_ENTRY(cl_int, clWaitForEvents, (cl_uint num_events, const cl_event* even } // Make sure all the events are associated with the same context - const amd::Context* context = &as_amd(event)->context(); + amd::Event* amdEvent = as_amd(event); + if (amdEvent->status() == CL_COMPLETE) continue; + + const amd::Context* context = &amdEvent->context(); if (prevContext != NULL && prevContext != context) { return CL_INVALID_CONTEXT; } prevContext = context; // Flush the command queues associated with event1...eventN - amd::HostQueue* queue = as_amd(event)->command().queue(); + amd::HostQueue* queue = amdEvent->command().queue(); if (queue != NULL && prevQueue != queue) { queue->flush(); } diff --git a/projects/clr/rocclr/device/pal/palkernel.cpp b/projects/clr/rocclr/device/pal/palkernel.cpp index 817b300e22..470851282d 100644 --- a/projects/clr/rocclr/device/pal/palkernel.cpp +++ b/projects/clr/rocclr/device/pal/palkernel.cpp @@ -441,7 +441,8 @@ hsa_kernel_dispatch_packet_t* HSAILKernel::loadArguments( WriteAqlArgAt(hidden_arguments, gpu.hsaQueueMem()->vmAddress(), it.size_, it.offset_); break; case amd::KernelParameterDescriptor::HiddenDynamicLdsSize: - WriteAqlArgAt(hidden_arguments, ldsAddress - ldsSize(), it.size_, it.offset_); + WriteAqlArgAt(hidden_arguments, static_cast(ldsAddress - ldsSize()), + it.size_, it.offset_); break; } }