Skip to content

Commit f70f14c

Browse files
committed
Apply suggestions
1 parent 2b11666 commit f70f14c

File tree

3 files changed

+28
-7
lines changed

3 files changed

+28
-7
lines changed

source/loader/layers/sanitizer/asan_buffer.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ struct MemBuffer {
5959

6060
std::optional<SubBuffer_t> SubBuffer;
6161

62-
std::atomic<int32_t> RefCount;
62+
std::atomic<int32_t> RefCount = 1;
6363

6464
ur_shared_mutex Mutex;
6565
};

source/loader/layers/sanitizer/asan_interceptor.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ struct QueueInfo {
8383
struct KernelInfo {
8484
ur_kernel_handle_t Handle;
8585
ur_shared_mutex Mutex;
86+
std::atomic<int32_t> RefCount = 1;
8687
std::unordered_map<uint32_t, std::shared_ptr<MemBuffer>> BufferArgs;
8788

8889
explicit KernelInfo(ur_kernel_handle_t Kernel) : Handle(Kernel) {

source/loader/layers/sanitizer/ur_sanddi.cpp

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1120,6 +1120,28 @@ __urdlllocal ur_result_t UR_APICALL urKernelCreate(
11201120
return UR_RESULT_SUCCESS;
11211121
}
11221122

1123+
///////////////////////////////////////////////////////////////////////////////
1124+
/// @brief Intercept function for urKernelRetain
1125+
__urdlllocal ur_result_t UR_APICALL urKernelRetain(
1126+
ur_kernel_handle_t hKernel ///< [in] handle for the Kernel to retain
1127+
) {
1128+
auto pfnRetain = context.urDdiTable.Kernel.pfnRetain;
1129+
1130+
if (nullptr == pfnRetain) {
1131+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
1132+
}
1133+
1134+
context.logger.debug("==== urKernelRetain");
1135+
1136+
UR_CALL(pfnRetain(hKernel));
1137+
1138+
if (auto KernelInfo = context.interceptor->getKernelInfo(hKernel)) {
1139+
KernelInfo->RefCount++;
1140+
}
1141+
1142+
return UR_RESULT_SUCCESS;
1143+
}
1144+
11231145
///////////////////////////////////////////////////////////////////////////////
11241146
/// @brief Intercept function for urKernelRelease
11251147
__urdlllocal ur_result_t urKernelRelease(
@@ -1135,13 +1157,10 @@ __urdlllocal ur_result_t urKernelRelease(
11351157
UR_CALL(pfnRelease(hKernel));
11361158

11371159
if (auto KernelInfo = context.interceptor->getKernelInfo(hKernel)) {
1138-
uint32_t RefCount;
1139-
UR_CALL(context.urDdiTable.Kernel.pfnGetInfo(
1140-
hKernel, UR_KERNEL_INFO_REFERENCE_COUNT, sizeof(RefCount),
1141-
&RefCount, nullptr));
1142-
if (RefCount == 1) {
1143-
UR_CALL(context.interceptor->eraseKernel(hKernel));
1160+
if (--KernelInfo->RefCount != 0) {
1161+
return UR_RESULT_SUCCESS;
11441162
}
1163+
UR_CALL(context.interceptor->eraseKernel(hKernel));
11451164
}
11461165

11471166
return UR_RESULT_SUCCESS;
@@ -1300,6 +1319,7 @@ __urdlllocal ur_result_t UR_APICALL urGetKernelProcAddrTable(
13001319
ur_result_t result = UR_RESULT_SUCCESS;
13011320

13021321
pDdiTable->pfnCreate = ur_sanitizer_layer::urKernelCreate;
1322+
pDdiTable->pfnRetain = ur_sanitizer_layer::urKernelRetain;
13031323
pDdiTable->pfnRelease = ur_sanitizer_layer::urKernelRelease;
13041324
pDdiTable->pfnSetArgValue = ur_sanitizer_layer::urKernelSetArgValue;
13051325
pDdiTable->pfnSetArgMemObj = ur_sanitizer_layer::urKernelSetArgMemObj;

0 commit comments

Comments
 (0)