Skip to content

Commit ca7d475

Browse files
Reintroduce prelim DRM debug support
It was verified that the issue existed before the failing commit. Signed-off-by: Daniel Chabrowski [email protected] Related-To: NEO-6591
1 parent 8aa2e76 commit ca7d475

File tree

16 files changed

+665
-31
lines changed

16 files changed

+665
-31
lines changed

opencl/test/unit_test/os_interface/linux/CMakeLists.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ set(IGDRCL_SRCS_tests_os_interface_linux
1515
${CMAKE_CURRENT_SOURCE_DIR}/drm_command_stream_mm_tests.cpp
1616
${CMAKE_CURRENT_SOURCE_DIR}/drm_command_stream_tests_1.cpp
1717
${CMAKE_CURRENT_SOURCE_DIR}/drm_command_stream_tests_2.cpp
18-
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}drm_debug_tests.cpp
1918
${CMAKE_CURRENT_SOURCE_DIR}/drm_gem_close_worker_tests.cpp
2019
${CMAKE_CURRENT_SOURCE_DIR}/drm_mapper_tests.cpp
2120
${CMAKE_CURRENT_SOURCE_DIR}/drm_memory_manager_tests.cpp
@@ -24,7 +23,7 @@ set(IGDRCL_SRCS_tests_os_interface_linux
2423
${CMAKE_CURRENT_SOURCE_DIR}/drm_residency_handler_tests.cpp
2524
${CMAKE_CURRENT_SOURCE_DIR}/drm_system_info_tests.cpp
2625
${CMAKE_CURRENT_SOURCE_DIR}/drm_tests.cpp
27-
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}drm_uuid_tests.cpp
26+
${CMAKE_CURRENT_SOURCE_DIR}/drm_uuid_tests.cpp
2827
${CMAKE_CURRENT_SOURCE_DIR}/file_logger_linux_tests.cpp
2928
${CMAKE_CURRENT_SOURCE_DIR}/hw_info_config_linux_tests.cpp
3029
${CMAKE_CURRENT_SOURCE_DIR}/hw_info_config_linux_tests.h

opencl/test/unit_test/os_interface/linux/drm_uuid_tests.cpp

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*
66
*/
77

8+
#include "shared/source/os_interface/linux/drm_debug.h"
89
#include "shared/test/common/libult/linux/drm_mock.h"
910

1011
#include "gtest/gtest.h"
@@ -32,8 +33,49 @@ TEST(DrmUuidTest, GivenDrmWhenGeneratingElfUUIDThenCorrectStringsAreReturned) {
3233
auto executionEnvironment = std::make_unique<ExecutionEnvironment>();
3334
executionEnvironment->prepareRootDeviceEnvironments(1);
3435
DrmMock drm{*executionEnvironment->rootDeviceEnvironments[0]};
36+
37+
std::string elfClassUuid = classNamesToUuid[static_cast<uint32_t>(Drm::ResourceClass::Elf)].second;
38+
std::string Uuid1stElfClass = elfClassUuid.substr(0, 18);
39+
3540
char data[] = "abc";
3641
auto uuid1 = drm.generateElfUUID(static_cast<const void *>(data));
42+
std::string Uuid1stElfBin1 = uuid1.substr(0, 18);
43+
EXPECT_STREQ(Uuid1stElfClass.c_str(), Uuid1stElfBin1.c_str());
3744

38-
EXPECT_STREQ("00000000-0000-0000-0000-000000000001", uuid1.c_str());
45+
char data2[] = "123";
46+
auto uuid2 = drm.generateElfUUID(static_cast<const void *>(data2));
47+
std::string Uuid1stElfBin2 = uuid2.substr(0, 18);
48+
EXPECT_STREQ(Uuid1stElfClass.c_str(), Uuid1stElfBin2.c_str());
49+
50+
auto uuid3 = drm.generateElfUUID(reinterpret_cast<const void *>(0xFFFFFFFFFFFFFFFF));
51+
std::string UuidElf = Uuid1stElfClass + "-ffff-ffffffffffff";
52+
EXPECT_STREQ(UuidElf.c_str(), uuid3.c_str());
53+
}
54+
55+
TEST(DrmUuidTest, whenResourceClassIsUsedToIndexClassNamesThenCorrectNamesAreReturned) {
56+
EXPECT_STREQ(classNamesToUuid[static_cast<uint32_t>(Drm::ResourceClass::Elf)].first, "I915_UUID_CLASS_ELF_BINARY");
57+
EXPECT_STREQ(classNamesToUuid[static_cast<uint32_t>(Drm::ResourceClass::Isa)].first, "I915_UUID_CLASS_ISA_BYTECODE");
58+
EXPECT_STREQ(classNamesToUuid[static_cast<uint32_t>(Drm::ResourceClass::ContextSaveArea)].first, "I915_UUID_L0_SIP_AREA");
59+
EXPECT_STREQ(classNamesToUuid[static_cast<uint32_t>(Drm::ResourceClass::ModuleHeapDebugArea)].first, "I915_UUID_L0_MODULE_AREA");
60+
EXPECT_STREQ(classNamesToUuid[static_cast<uint32_t>(Drm::ResourceClass::SbaTrackingBuffer)].first, "I915_UUID_L0_SBA_AREA");
61+
EXPECT_STREQ(classNamesToUuid[static_cast<uint32_t>(Drm::ResourceClass::L0ZebinModule)].first, "L0_ZEBIN_MODULE");
62+
}
63+
64+
TEST(DrmUuidTest, givenUuidStringWhenGettingClassIndexThenCorrectIndexForValidStringsIsReturned) {
65+
uint32_t index = 100;
66+
auto validUuid = DrmUuid::getClassUuidIndex(classNamesToUuid[static_cast<uint32_t>(Drm::ResourceClass::ContextSaveArea)].second, index);
67+
68+
EXPECT_TRUE(validUuid);
69+
EXPECT_EQ(static_cast<uint32_t>(Drm::ResourceClass::ContextSaveArea), index);
70+
71+
validUuid = DrmUuid::getClassUuidIndex(classNamesToUuid[static_cast<uint32_t>(Drm::ResourceClass::ModuleHeapDebugArea)].second, index);
72+
73+
EXPECT_TRUE(validUuid);
74+
EXPECT_EQ(static_cast<uint32_t>(Drm::ResourceClass::ModuleHeapDebugArea), index);
75+
76+
index = 100;
77+
validUuid = DrmUuid::getClassUuidIndex("invalid", index);
78+
79+
EXPECT_FALSE(validUuid);
80+
EXPECT_EQ(100u, index);
3981
}

shared/source/os_interface/linux/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ set(NEO_CORE_OS_INTERFACE_LINUX
2424
${CMAKE_CURRENT_SOURCE_DIR}/drm_command_stream.h
2525
${CMAKE_CURRENT_SOURCE_DIR}/drm_command_stream.inl
2626
${CMAKE_CURRENT_SOURCE_DIR}/drm_command_stream_bdw_and_later.inl
27-
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}drm_debug.cpp
27+
${CMAKE_CURRENT_SOURCE_DIR}/drm_debug.cpp
28+
${CMAKE_CURRENT_SOURCE_DIR}/drm_debug.h
2829
${CMAKE_CURRENT_SOURCE_DIR}/drm_gem_close_worker.cpp
2930
${CMAKE_CURRENT_SOURCE_DIR}/drm_gem_close_worker.h
3031
${CMAKE_CURRENT_SOURCE_DIR}/drm_memory_manager.cpp

shared/source/os_interface/linux/drm_debug.cpp

Lines changed: 79 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,68 @@
55
*
66
*/
77

8-
#include "drm_neo.h"
8+
#include "shared/source/os_interface/linux/drm_debug.h"
9+
10+
#include "shared/source/helpers/string.h"
11+
#include "shared/source/os_interface/linux/drm_neo.h"
12+
13+
#include <string>
14+
#include <utility>
915

1016
namespace NEO {
1117

1218
bool Drm::registerResourceClasses() {
13-
return false;
19+
for (auto classNameUUID : classNamesToUuid) {
20+
auto className = classNameUUID.first;
21+
auto uuid = classNameUUID.second;
22+
23+
const auto result = ioctlHelper->registerStringClassUuid(this, uuid, (uintptr_t)className, strnlen_s(className, 100));
24+
if (result.retVal != 0) {
25+
return false;
26+
}
27+
28+
classHandles.push_back(result.handle);
29+
}
30+
return true;
1431
}
1532

1633
uint32_t Drm::registerResource(ResourceClass classType, const void *data, size_t size) {
17-
return 0;
34+
if (classHandles.size() < static_cast<uint32_t>(classType)) {
35+
return 0;
36+
}
37+
38+
std::string uuid;
39+
if (classType == NEO::Drm::ResourceClass::Elf) {
40+
uuid = generateElfUUID(data);
41+
} else {
42+
uuid = generateUUID();
43+
}
44+
45+
const auto uuidClass = classHandles[static_cast<uint32_t>(classType)];
46+
const auto ptr = size > 0 ? (uintptr_t)data : 0;
47+
const auto result = ioctlHelper->registerUuid(this, uuid, uuidClass, ptr, size);
48+
49+
PRINT_DEBUGGER_INFO_LOG("PRELIM_DRM_IOCTL_I915_UUID_REGISTER: classType = %d, uuid = %s, data = %p, handle = %lu, ret = %d\n", (int)classType, std::string(uuid, 36).c_str(), ptr, result.handle, result.retVal);
50+
DEBUG_BREAK_IF(result.retVal != 0);
51+
52+
return result.handle;
1853
}
1954

2055
uint32_t Drm::registerIsaCookie(uint32_t isaHandle) {
21-
return 0;
56+
auto uuid = generateUUID();
57+
58+
const auto result = ioctlHelper->registerUuid(this, uuid, isaHandle, 0, 0);
59+
60+
PRINT_DEBUGGER_INFO_LOG("PRELIM_DRM_IOCTL_I915_UUID_REGISTER: isa handle = %lu, uuid = %s, data = %p, handle = %lu, ret = %d\n", isaHandle, std::string(uuid, 36).c_str(), 0, result.handle, result.retVal);
61+
DEBUG_BREAK_IF(result.retVal != 0);
62+
63+
return result.handle;
2264
}
2365

2466
void Drm::unregisterResource(uint32_t handle) {
67+
PRINT_DEBUGGER_INFO_LOG("PRELIM_DRM_IOCTL_I915_UUID_UNREGISTER: handle = %lu\n", handle);
68+
[[maybe_unused]] const auto ret = ioctlHelper->unregisterUuid(this, handle);
69+
DEBUG_BREAK_IF(ret != 0);
2570
}
2671

2772
std::string Drm::generateUUID() {
@@ -40,12 +85,37 @@ std::string Drm::generateUUID() {
4085
}
4186

4287
std::string Drm::generateElfUUID(const void *data) {
43-
return generateUUID();
88+
std::string elf_class_uuid = classNamesToUuid[static_cast<uint32_t>(Drm::ResourceClass::Elf)].second;
89+
std::string UUID1st = elf_class_uuid.substr(0, 18);
90+
91+
const char uuidString[] = "%s-%04" SCNx64 "-%012" SCNx64;
92+
char buffer[36 + 1] = "00000000-0000-0000-0000-000000000000";
93+
94+
uint64_t parts[2] = {0, 0};
95+
parts[0] = reinterpret_cast<uintptr_t>(data) & 0xFFFFFFFFFFFF;
96+
parts[1] = (reinterpret_cast<uintptr_t>(data) & 0xFFFF000000000000) >> 48;
97+
snprintf(buffer, sizeof(buffer), uuidString, UUID1st.c_str(), parts[1], parts[0]);
98+
99+
return std::string(buffer, 36);
100+
}
101+
102+
void Drm::checkContextDebugSupport() {
103+
contextDebugSupported = ioctlHelper->isContextDebugSupported(this);
104+
}
105+
106+
void Drm::setContextDebugFlag(uint32_t drmContextId) {
107+
[[maybe_unused]] const auto retVal = ioctlHelper->setContextDebugFlag(this, drmContextId);
108+
DEBUG_BREAK_IF(retVal != 0 && contextDebugSupported);
44109
}
45110

46-
void Drm::checkContextDebugSupport() {}
47-
void Drm::setContextDebugFlag(uint32_t drmContextId) {}
48-
uint32_t Drm::notifyFirstCommandQueueCreated() { return 0; }
49-
void Drm::notifyLastCommandQueueDestroyed(uint32_t handle) {}
111+
uint32_t Drm::notifyFirstCommandQueueCreated() {
112+
const auto result = ioctlHelper->registerStringClassUuid(this, uuidL0CommandQueueHash, (uintptr_t)uuidL0CommandQueueName, strnlen_s(uuidL0CommandQueueName, 100));
113+
DEBUG_BREAK_IF(result.retVal);
114+
return result.handle;
115+
}
116+
117+
void Drm::notifyLastCommandQueueDestroyed(uint32_t handle) {
118+
unregisterResource(handle);
119+
}
50120

51121
} // namespace NEO
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/*
2+
* Copyright (C) 2022 Intel Corporation
3+
*
4+
* SPDX-License-Identifier: MIT
5+
*
6+
*/
7+
8+
#include "shared/source/os_interface/linux/drm_neo.h"
9+
10+
#include <string>
11+
#include <utility>
12+
13+
namespace NEO {
14+
15+
/*
16+
17+
UUIDs: Deterministic generation
18+
19+
$ python -q # Version 3.x
20+
>>> import uuid
21+
>>>
22+
>>> I915_UUID_NAMESPACE = uuid.UUID(bytes = b'i915' * 4);
23+
>>> I915_UUID_NAMESPACE
24+
UUID('69393135-6939-3135-6939-313569393135')
25+
>>>
26+
>>>
27+
>>> I915_UUID = lambda x: uuid.uuid5(I915_UUID_NAMESPACE, x)
28+
>>> I915_UUID('I915_UUID_CLASS_CUSTOM')
29+
UUID('74644f12-6a2c-59e6-ac92-ea7f2ef530eb')
30+
>>>
31+
>>>
32+
>>> L0_UUID_NAMESPACE = uuid.UUID(bytes = b'L0' * 8);
33+
>>> L0_UUID_NAMESPACE
34+
UUID('4c304c30-4c30-4c30-4c30-4c304c304c30')
35+
>>>
36+
>>>
37+
>>> L0_UUID = lambda x: uuid.uuid5(L0_UUID_NAMESPACE, x)
38+
>>> L0_UUID('L0_ZEBIN_MODULE')
39+
UUID('88d347c1-c79b-530a-b68f-e0db7d575e04')
40+
>>>
41+
>>>
42+
>>> L0_UUID('L0_COMMAND_QUEUE')
43+
UUID('285208b2-c5e0-5fcb-90bb-7576ed7a9697')
44+
45+
*/
46+
47+
using ClassNamesArray = std::array<std::pair<const char *, const std::string>, size_t(Drm::ResourceClass::MaxSize)>;
48+
const ClassNamesArray classNamesToUuid = {std::make_pair("I915_UUID_CLASS_ELF_BINARY", "31203221-8069-5a0a-9d43-94a4d3395ee1"),
49+
std::make_pair("I915_UUID_CLASS_ISA_BYTECODE", "53baed0a-12c3-5d19-aa69-ab9c51aa1039"),
50+
std::make_pair("I915_UUID_L0_MODULE_AREA", "a411e82e-16c9-58b7-bfb5-b209b8601d5f"),
51+
std::make_pair("I915_UUID_L0_SIP_AREA", "21fd6baf-f918-53cc-ba74-f09aaaea2dc0"),
52+
std::make_pair("I915_UUID_L0_SBA_AREA", "ec45189d-97d3-58e2-80d1-ab52c72fdcc1"),
53+
std::make_pair("L0_ZEBIN_MODULE", "88d347c1-c79b-530a-b68f-e0db7d575e04")};
54+
55+
constexpr auto uuidL0CommandQueueName = "L0_COMMAND_QUEUE";
56+
constexpr auto uuidL0CommandQueueHash = "285208b2-c5e0-5fcb-90bb-7576ed7a9697"; // L0_UUID('L0_COMMAND_QUEUE')
57+
58+
struct DrmUuid {
59+
static bool getClassUuidIndex(std::string uuid, uint32_t &index) {
60+
for (uint32_t i = 0; i < uint32_t(Drm::ResourceClass::MaxSize); i++) {
61+
if (uuid == classNamesToUuid[i].second) {
62+
index = i;
63+
return true;
64+
}
65+
}
66+
return false;
67+
}
68+
};
69+
} // namespace NEO

shared/source/os_interface/linux/ioctl_helper.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,11 @@ struct VmBindParams {
6666
uint64_t extensions;
6767
};
6868

69+
struct UuidRegisterResult {
70+
uint32_t retVal;
71+
uint32_t handle;
72+
};
73+
6974
using MemRegionsVec = StackVec<MemoryClassInstance, 5>;
7075

7176
class IoctlHelper {
@@ -114,6 +119,11 @@ class IoctlHelper {
114119
virtual int vmUnbind(Drm *drm, const VmBindParams &vmBindParams) = 0;
115120
virtual bool getEuStallProperties(std::array<uint64_t, 10u> &properties, uint64_t dssBufferSize, uint64_t samplingRate, uint64_t pollPeriod, uint64_t engineInstance) = 0;
116121
virtual uint32_t getEuStallFdParameter() = 0;
122+
virtual UuidRegisterResult registerUuid(Drm *drm, const std::string &uuid, uint32_t uuidClass, uint64_t ptr, uint64_t size) = 0;
123+
virtual UuidRegisterResult registerStringClassUuid(Drm *drm, const std::string &uuid, uint64_t ptr, uint64_t size) = 0;
124+
virtual int unregisterUuid(Drm *drm, uint32_t handle) = 0;
125+
virtual bool isContextDebugSupported(Drm *drm) = 0;
126+
virtual int setContextDebugFlag(Drm *drm, uint32_t drmContextId) = 0;
117127
};
118128

119129
class IoctlHelperUpstream : public IoctlHelper {
@@ -159,6 +169,11 @@ class IoctlHelperUpstream : public IoctlHelper {
159169
int vmUnbind(Drm *drm, const VmBindParams &vmBindParams) override;
160170
bool getEuStallProperties(std::array<uint64_t, 10u> &properties, uint64_t dssBufferSize, uint64_t samplingRate, uint64_t pollPeriod, uint64_t engineInstance) override;
161171
uint32_t getEuStallFdParameter() override;
172+
UuidRegisterResult registerUuid(Drm *drm, const std::string &uuid, uint32_t uuidClass, uint64_t ptr, uint64_t size) override;
173+
UuidRegisterResult registerStringClassUuid(Drm *drm, const std::string &uuid, uint64_t ptr, uint64_t size) override;
174+
int unregisterUuid(Drm *drm, uint32_t handle) override;
175+
bool isContextDebugSupported(Drm *drm) override;
176+
int setContextDebugFlag(Drm *drm, uint32_t drmContextId) override;
162177
};
163178

164179
template <PRODUCT_FAMILY gfxProduct>
@@ -217,6 +232,11 @@ class IoctlHelperPrelim20 : public IoctlHelper {
217232
int vmUnbind(Drm *drm, const VmBindParams &vmBindParams) override;
218233
bool getEuStallProperties(std::array<uint64_t, 10u> &properties, uint64_t dssBufferSize, uint64_t samplingRate, uint64_t pollPeriod, uint64_t engineInstance) override;
219234
uint32_t getEuStallFdParameter() override;
235+
UuidRegisterResult registerUuid(Drm *drm, const std::string &uuid, uint32_t uuidClass, uint64_t ptr, uint64_t size) override;
236+
UuidRegisterResult registerStringClassUuid(Drm *drm, const std::string &uuid, uint64_t ptr, uint64_t size) override;
237+
int unregisterUuid(Drm *drm, uint32_t handle) override;
238+
bool isContextDebugSupported(Drm *drm) override;
239+
int setContextDebugFlag(Drm *drm, uint32_t drmContextId) override;
220240
};
221241

222242
} // namespace NEO

shared/source/os_interface/linux/ioctl_helper_prelim.cpp

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "shared/source/helpers/hw_helper.h"
1111
#include "shared/source/helpers/hw_info.h"
1212
#include "shared/source/helpers/ptr_math.h"
13+
#include "shared/source/helpers/string.h"
1314
#include "shared/source/os_interface/linux/cache_info.h"
1415
#include "shared/source/os_interface/linux/ioctl_helper.h"
1516

@@ -319,6 +320,7 @@ int32_t IoctlHelperPrelim20::getComputeEngineClass() {
319320
std::optional<int> IoctlHelperPrelim20::getHasPageFaultParamId() {
320321
return PRELIM_I915_PARAM_HAS_PAGE_FAULT;
321322
};
323+
322324
bool IoctlHelperPrelim20::getEuStallProperties(std::array<uint64_t, 10u> &properties, uint64_t dssBufferSize, uint64_t samplingRate, uint64_t pollPeriod, uint64_t engineInstance) {
323325
properties[0] = PRELIM_DRM_I915_EU_STALL_PROP_BUF_SZ;
324326
properties[1] = dssBufferSize;
@@ -472,4 +474,52 @@ int IoctlHelperPrelim20::vmUnbind(Drm *drm, const VmBindParams &vmBindParams) {
472474
auto prelimVmBind = translateVmBindParamsToPrelimStruct(vmBindParams);
473475
return IoctlHelper::ioctl(drm, PRELIM_DRM_IOCTL_I915_GEM_VM_UNBIND, &prelimVmBind);
474476
}
477+
478+
UuidRegisterResult IoctlHelperPrelim20::registerUuid(Drm *drm, const std::string &uuid, uint32_t uuidClass, uint64_t ptr, uint64_t size) {
479+
prelim_drm_i915_uuid_control uuidControl = {};
480+
memcpy_s(uuidControl.uuid, sizeof(uuidControl.uuid), uuid.c_str(), uuid.size());
481+
uuidControl.uuid_class = uuidClass;
482+
uuidControl.ptr = ptr;
483+
uuidControl.size = size;
484+
485+
const auto retVal = IoctlHelper::ioctl(drm, PRELIM_DRM_IOCTL_I915_UUID_REGISTER, &uuidControl);
486+
487+
return {
488+
retVal,
489+
uuidControl.handle,
490+
};
491+
}
492+
493+
UuidRegisterResult IoctlHelperPrelim20::registerStringClassUuid(Drm *drm, const std::string &uuid, uint64_t ptr, uint64_t size) {
494+
return registerUuid(drm, uuid, PRELIM_I915_UUID_CLASS_STRING, ptr, size);
495+
}
496+
497+
int IoctlHelperPrelim20::unregisterUuid(Drm *drm, uint32_t handle) {
498+
prelim_drm_i915_uuid_control uuidControl = {};
499+
uuidControl.handle = handle;
500+
501+
return IoctlHelper::ioctl(drm, PRELIM_DRM_IOCTL_I915_UUID_UNREGISTER, &uuidControl);
502+
}
503+
504+
bool IoctlHelperPrelim20::isContextDebugSupported(Drm *drm) {
505+
drm_i915_gem_context_param ctxParam = {};
506+
ctxParam.size = 0;
507+
ctxParam.param = PRELIM_I915_CONTEXT_PARAM_DEBUG_FLAGS;
508+
ctxParam.ctx_id = 0;
509+
ctxParam.value = 0;
510+
511+
const auto retVal = IoctlHelper::ioctl(drm, DRM_IOCTL_I915_GEM_CONTEXT_GETPARAM, &ctxParam);
512+
return retVal == 0 && ctxParam.value == (PRELIM_I915_CONTEXT_PARAM_DEBUG_FLAG_SIP << 32);
513+
}
514+
515+
int IoctlHelperPrelim20::setContextDebugFlag(Drm *drm, uint32_t drmContextId) {
516+
drm_i915_gem_context_param ctxParam = {};
517+
ctxParam.size = 0;
518+
ctxParam.param = PRELIM_I915_CONTEXT_PARAM_DEBUG_FLAGS;
519+
ctxParam.ctx_id = drmContextId;
520+
ctxParam.value = PRELIM_I915_CONTEXT_PARAM_DEBUG_FLAG_SIP << 32 | PRELIM_I915_CONTEXT_PARAM_DEBUG_FLAG_SIP;
521+
522+
return IoctlHelper::ioctl(drm, DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM, &ctxParam);
523+
}
524+
475525
} // namespace NEO

0 commit comments

Comments
 (0)