Skip to content

Commit ce867bd

Browse files
refactor: clSetKernelArgSVMPtr ptr error if debug var set
Related-To: NEO-12988 Signed-off-by: John Falkowski <[email protected]> Source: 764fd33
1 parent 59078a2 commit ce867bd

File tree

8 files changed

+110
-9
lines changed

8 files changed

+110
-9
lines changed

opencl/source/api/api.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5192,11 +5192,13 @@ cl_int CL_API_CALL clSetKernelArgSVMPointer(cl_kernel kernel,
51925192
if (argValue != nullptr) {
51935193
auto svmData = svmManager->getSVMAlloc(argValue);
51945194
if (svmData == nullptr) {
5195-
for (const auto &pDevice : multiDeviceKernel->getDevices()) {
5196-
if ((pDevice->getHardwareInfo().capabilityTable.sharedSystemMemCapabilities == 0) || (debugManager.flags.EnableSharedSystemUsmSupport.get() == 0)) {
5197-
retVal = CL_INVALID_ARG_VALUE;
5198-
TRACING_EXIT(ClSetKernelArgSvmPointer, &retVal);
5199-
return retVal;
5195+
if (debugManager.flags.DetectIncorrectPointersOnSetArgCalls.get() == 1) {
5196+
for (const auto &pDevice : multiDeviceKernel->getDevices()) {
5197+
if ((pDevice->getHardwareInfo().capabilityTable.sharedSystemMemCapabilities == 0) || (debugManager.flags.EnableSharedSystemUsmSupport.get() == 0)) {
5198+
retVal = CL_INVALID_ARG_VALUE;
5199+
TRACING_EXIT(ClSetKernelArgSvmPointer, &retVal);
5200+
return retVal;
5201+
}
52005202
}
52015203
}
52025204
} else {

opencl/test/unit_test/api/cl_get_platform_info_tests.inl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2018-2024 Intel Corporation
2+
* Copyright (C) 2018-2025 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -226,6 +226,8 @@ TEST_F(ClGetPlatformInfoTests, WhenCheckingPlatformExtensionsWithVersionThenThey
226226
for (size_t i = 0; i < extensionsCount; i++) {
227227
if (strcmp(platformExtensionsWithVersion[i].name, "cl_khr_integer_dot_product") == 0) {
228228
EXPECT_EQ(CL_MAKE_VERSION(2u, 0, 0), platformExtensionsWithVersion[i].version);
229+
} else if (strcmp(platformExtensionsWithVersion[i].name, "cl_intel_unified_shared_memory") == 0) {
230+
EXPECT_EQ(CL_MAKE_VERSION(1u, 1u, 0), platformExtensionsWithVersion[i].version);
229231
} else if (strcmp(platformExtensionsWithVersion[i].name, "cl_khr_external_memory") == 0) {
230232
EXPECT_EQ(CL_MAKE_VERSION(0, 9u, 1u), platformExtensionsWithVersion[i].version);
231233
} else {

opencl/test/unit_test/api/cl_set_kernel_arg_svm_pointer_tests.inl

Lines changed: 85 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,13 +91,27 @@ TEST_F(clSetKernelArgSVMPointerTests, GivenLocalAddressAndNullArgValueWhenSettin
9191
EXPECT_EQ(CL_INVALID_ARG_VALUE, retVal);
9292
}
9393

94-
TEST_F(clSetKernelArgSVMPointerTests, GivenInvalidArgValueWhenSettingKernelArgThenInvalidArgValueErrorIsReturned) {
94+
TEST_F(clSetKernelArgSVMPointerTests, GivenInvalidArgValueWhenSettingKernelArgAndDebugVarSetThenInvalidArgValueErrorIsReturned) {
9595
pDevice->deviceInfo.sharedSystemMemCapabilities = 0u;
9696
pDevice->getRootDeviceEnvironment().getMutableHardwareInfo()->capabilityTable.sharedSystemMemCapabilities = 0;
9797
void *ptrHost = malloc(256);
9898
EXPECT_NE(nullptr, ptrHost);
9999

100-
auto retVal = clSetKernelArgSVMPointer(
100+
DebugManagerStateRestore restore;
101+
debugManager.flags.DetectIncorrectPointersOnSetArgCalls.set(1);
102+
103+
cl_int retVal = clSetKernelArgSVMPointer(
104+
pMockMultiDeviceKernel, // cl_kernel kernel
105+
0, // cl_uint arg_index
106+
ptrHost // const void *arg_value
107+
);
108+
EXPECT_EQ(CL_INVALID_ARG_VALUE, retVal);
109+
110+
pDevice->deviceInfo.sharedSystemMemCapabilities = 0xF;
111+
pDevice->getRootDeviceEnvironment().getMutableHardwareInfo()->capabilityTable.sharedSystemMemCapabilities = 0xF;
112+
debugManager.flags.EnableSharedSystemUsmSupport.set(0);
113+
114+
retVal = clSetKernelArgSVMPointer(
101115
pMockMultiDeviceKernel, // cl_kernel kernel
102116
0, // cl_uint arg_index
103117
ptrHost // const void *arg_value
@@ -107,6 +121,44 @@ TEST_F(clSetKernelArgSVMPointerTests, GivenInvalidArgValueWhenSettingKernelArgTh
107121
free(ptrHost);
108122
}
109123

124+
TEST_F(clSetKernelArgSVMPointerTests, GivenInvalidArgValueWhenSettingKernelArgAndDebugVarNotSetThenSuccessIsReturned) {
125+
pDevice->deviceInfo.sharedSystemMemCapabilities = 0u;
126+
pDevice->getRootDeviceEnvironment().getMutableHardwareInfo()->capabilityTable.sharedSystemMemCapabilities = 0;
127+
void *ptrHost = malloc(256);
128+
EXPECT_NE(nullptr, ptrHost);
129+
130+
DebugManagerStateRestore restore;
131+
debugManager.flags.DetectIncorrectPointersOnSetArgCalls.set(-1);
132+
133+
auto retVal = clSetKernelArgSVMPointer(
134+
pMockMultiDeviceKernel, // cl_kernel kernel
135+
0, // cl_uint arg_index
136+
ptrHost // const void *arg_value
137+
);
138+
EXPECT_EQ(CL_SUCCESS, retVal);
139+
140+
free(ptrHost);
141+
}
142+
143+
TEST_F(clSetKernelArgSVMPointerTests, GivenInvalidArgValueWhenSettingKernelArgAndDebugVarSetAndSharedSystemCapabilitesNonZeroThenSuccessIsReturned) {
144+
pDevice->deviceInfo.sharedSystemMemCapabilities = 0xF;
145+
pDevice->getRootDeviceEnvironment().getMutableHardwareInfo()->capabilityTable.sharedSystemMemCapabilities = 0xF;
146+
void *ptrHost = malloc(256);
147+
EXPECT_NE(nullptr, ptrHost);
148+
149+
DebugManagerStateRestore restore;
150+
debugManager.flags.DetectIncorrectPointersOnSetArgCalls.set(1);
151+
152+
auto retVal = clSetKernelArgSVMPointer(
153+
pMockMultiDeviceKernel, // cl_kernel kernel
154+
0, // cl_uint arg_index
155+
ptrHost // const void *arg_value
156+
);
157+
EXPECT_EQ(CL_SUCCESS, retVal);
158+
159+
free(ptrHost);
160+
}
161+
110162
TEST_F(clSetKernelArgSVMPointerTests, GivenSvmAndNullArgValueWhenSettingKernelArgThenSuccessIsReturned) {
111163
const ClDeviceInfo &devInfo = pDevice->getDeviceInfo();
112164
if (devInfo.svmCapabilities != 0) {
@@ -173,10 +225,13 @@ TEST_F(clSetKernelArgSVMPointerTests, GivenSvmAndPointerWithOffsetWhenSettingKer
173225
}
174226
}
175227

176-
TEST_F(clSetKernelArgSVMPointerTests, GivenSvmAndPointerWithInvalidOffsetWhenSettingKernelArgThenInvalidArgValueErrorIsReturned) {
228+
TEST_F(clSetKernelArgSVMPointerTests, GivenSvmAndPointerWithInvalidOffsetWhenSettingKernelArgAndDebugVarSetThenInvalidArgValueErrorIsReturned) {
177229
pDevice->deviceInfo.sharedSystemMemCapabilities = 0u;
178230
pDevice->getRootDeviceEnvironment().getMutableHardwareInfo()->capabilityTable.sharedSystemMemCapabilities = 0;
179231
const ClDeviceInfo &devInfo = pDevice->getDeviceInfo();
232+
DebugManagerStateRestore restore;
233+
debugManager.flags.DetectIncorrectPointersOnSetArgCalls.set(1);
234+
180235
if (devInfo.svmCapabilities != 0) {
181236
void *ptrSvm = clSVMAlloc(pContext, CL_MEM_READ_WRITE, 256, 4);
182237
auto svmData = pContext->getSVMAllocsManager()->getSVMAlloc(ptrSvm);
@@ -197,6 +252,33 @@ TEST_F(clSetKernelArgSVMPointerTests, GivenSvmAndPointerWithInvalidOffsetWhenSet
197252
}
198253
}
199254

255+
TEST_F(clSetKernelArgSVMPointerTests, GivenSvmAndPointerWithInvalidOffsetWhenSettingKernelArgAndDebugVarNotSetThenSuccessIsReturned) {
256+
pDevice->deviceInfo.sharedSystemMemCapabilities = 0u;
257+
pDevice->getRootDeviceEnvironment().getMutableHardwareInfo()->capabilityTable.sharedSystemMemCapabilities = 0;
258+
const ClDeviceInfo &devInfo = pDevice->getDeviceInfo();
259+
DebugManagerStateRestore restore;
260+
debugManager.flags.DetectIncorrectPointersOnSetArgCalls.set(-1);
261+
262+
if (devInfo.svmCapabilities != 0) {
263+
void *ptrSvm = clSVMAlloc(pContext, CL_MEM_READ_WRITE, 256, 4);
264+
auto svmData = pContext->getSVMAllocsManager()->getSVMAlloc(ptrSvm);
265+
ASSERT_NE(nullptr, svmData);
266+
auto svmAlloc = svmData->gpuAllocations.getGraphicsAllocation(pContext->getDevice(0)->getRootDeviceIndex());
267+
EXPECT_NE(nullptr, svmAlloc);
268+
269+
size_t offset = svmAlloc->getUnderlyingBufferSize() + 1;
270+
271+
auto retVal = clSetKernelArgSVMPointer(
272+
pMockMultiDeviceKernel, // cl_kernel kernel
273+
0, // cl_uint arg_index
274+
(char *)ptrSvm + offset // const void *arg_value
275+
);
276+
EXPECT_EQ(CL_SUCCESS, retVal);
277+
278+
clSVMFree(pContext, ptrSvm);
279+
}
280+
}
281+
200282
TEST_F(clSetKernelArgSVMPointerTests, givenSvmAndValidArgValueWhenSettingSameKernelArgThenSetArgSvmAllocCalledOnlyWhenNeeded) {
201283
const ClDeviceInfo &devInfo = pDevice->getDeviceInfo();
202284
if (devInfo.svmCapabilities != 0) {

opencl/test/unit_test/device/device_caps_tests.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -847,6 +847,8 @@ TEST_F(DeviceGetCapsTest, givenDefaultDeviceWhenQueriedForExtensionsWithVersionT
847847
for (auto extensionWithVersion : pClDevice->getDeviceInfo().extensionsWithVersion) {
848848
if (strcmp(extensionWithVersion.name, "cl_khr_integer_dot_product") == 0) {
849849
EXPECT_EQ(CL_MAKE_VERSION(2u, 0, 0), extensionWithVersion.version);
850+
} else if (strcmp(extensionWithVersion.name, "cl_intel_unified_shared_memory") == 0) {
851+
EXPECT_EQ(CL_MAKE_VERSION(1u, 1u, 0), extensionWithVersion.version);
850852
} else if (strcmp(extensionWithVersion.name, "cl_khr_external_memory") == 0) {
851853
EXPECT_EQ(CL_MAKE_VERSION(0, 9u, 1u), extensionWithVersion.version);
852854
} else {
@@ -866,6 +868,8 @@ TEST_F(DeviceGetCapsTest, givenClDeviceWhenGetExtensionsVersionCalledThenCorrect
866868
for (auto extensionWithVersion : pClDevice->getDeviceInfo().extensionsWithVersion) {
867869
if (strcmp(extensionWithVersion.name, "cl_khr_integer_dot_product") == 0) {
868870
EXPECT_EQ(CL_MAKE_VERSION(2u, 0, 0), pClDevice->getExtensionVersion(std::string(extensionWithVersion.name)));
871+
} else if (strcmp(extensionWithVersion.name, "cl_intel_unified_shared_memory") == 0) {
872+
EXPECT_EQ(CL_MAKE_VERSION(1u, 1u, 0), pClDevice->getExtensionVersion(std::string(extensionWithVersion.name)));
869873
} else if (strcmp(extensionWithVersion.name, "cl_khr_external_memory") == 0) {
870874
EXPECT_EQ(CL_MAKE_VERSION(0, 9u, 1u), pClDevice->getExtensionVersion(std::string(extensionWithVersion.name)));
871875
} else {

shared/source/compiler_interface/oclc_extensions.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,8 @@ std::string getOclVersionCompilerInternalOption(unsigned int oclVersion) {
155155
cl_version getOclCExtensionVersion(std::string name, cl_version defaultVer) {
156156
if (name.compare("cl_khr_integer_dot_product") == 0) {
157157
return CL_MAKE_VERSION(2u, 0, 0);
158+
} else if (name.compare("cl_intel_unified_shared_memory") == 0) {
159+
return CL_MAKE_VERSION(1u, 1u, 0);
158160
} else if (name.compare("cl_khr_external_memory") == 0) {
159161
return CL_MAKE_VERSION(0, 9u, 1u);
160162
} else {

shared/source/debug_settings/debug_variables_base.inl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,7 @@ DECLARE_DEBUG_VARIABLE(int32_t, GetSipBinaryFromExternalLib, -1, "-1: default, 0
316316
DECLARE_DEBUG_VARIABLE(int32_t, EnablePidFdOrSocketsForIpc, -1, "-1: default, 0: disabled (default), 1: enabled. If enabled, L0 IPC handles are opaque and pidfd or sockets are used for IPC exchange")
317317
DECLARE_DEBUG_VARIABLE(int32_t, OverrideCopyOffloadMode, -1, "-1: default, 0: disabled, >=1: if enabled, override to any value from CopyOffloadModes enum")
318318
DECLARE_DEBUG_VARIABLE(int32_t, UseSingleListForTemporaryAllocations, -1, "-1: default, 0: disabled, 0: enabled. If enabled, use single list, instead of per CSR for tracking temporary allocations")
319+
DECLARE_DEBUG_VARIABLE(int32_t, DetectIncorrectPointersOnSetArgCalls, -1, "-1: default do not detect, 0: do not detect, 1: detect incorrect pointers and return error")
319320

320321
/*LOGGING FLAGS*/
321322
DECLARE_DEBUG_VARIABLE(int32_t, PrintDriverDiagnostics, -1, "prints driver diagnostics messages to standard output, value corresponds to hint level")

shared/test/common/test_files/igdrcl.config

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -666,4 +666,5 @@ EnablePidFdOrSocketsForIpc = -1
666666
ExposeSingleDevice=-1
667667
OverrideCopyOffloadMode = -1
668668
UseSingleListForTemporaryAllocations = -1
669+
DetectIncorrectPointersOnSetArgCalls =-1
669670
# Please don't edit below this line

shared/test/unit_test/compiler_interface/compiler_interface_tests.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1585,6 +1585,13 @@ TEST(getOclCExtensionVersion, whenQueryingVersionOfIntegerDotProductExtensionThe
15851585
EXPECT_EQ(expectedVer, ver);
15861586
}
15871587

1588+
TEST(getOclCExtensionVersion, whenQueryingVersionOfUnifiedSharedMemoryExtensionThenReturns110) {
1589+
cl_version defaultVer = CL_MAKE_VERSION(7, 2, 5);
1590+
cl_version ver = NEO::getOclCExtensionVersion("cl_intel_unified_shared_memory", defaultVer);
1591+
cl_version expectedVer = CL_MAKE_VERSION(1, 1, 0);
1592+
EXPECT_EQ(expectedVer, ver);
1593+
}
1594+
15881595
TEST(getOclCExtensionVersion, whenCheckingVersionOfExternalMemoryExtensionThenReturns091) {
15891596
cl_version defaultVer = CL_MAKE_VERSION(7, 2, 5);
15901597
cl_version ver = NEO::getOclCExtensionVersion("cl_khr_external_memory", defaultVer);

0 commit comments

Comments
 (0)