Skip to content

Commit 86f8150

Browse files
Revert "Stop using CONTEXT_SET_PARAM"
This reverts commit e9f56e7. Signed-off-by: Compute-Runtime-Validation <[email protected]>
1 parent a203cd2 commit 86f8150

File tree

8 files changed

+141
-172
lines changed

8 files changed

+141
-172
lines changed

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ set(IGDRCL_SRCS_tests_os_interface_linux
3131
${CMAKE_CURRENT_SOURCE_DIR}/drm_residency_handler_tests.cpp
3232
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/drm_system_info_tests.cpp
3333
${CMAKE_CURRENT_SOURCE_DIR}/drm_tests.cpp
34-
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/drm_context_tests.cpp
3534
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/drm_uuid_tests.cpp
3635
${CMAKE_CURRENT_SOURCE_DIR}/file_logger_linux_tests.cpp
3736
${CMAKE_CURRENT_SOURCE_DIR}/hw_info_config_linux_tests.cpp

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

Lines changed: 0 additions & 129 deletions
This file was deleted.

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ int DrmMock::ioctl(unsigned long request, void *arg) {
7474
auto create = static_cast<drm_i915_gem_context_create_ext *>(arg);
7575
this->receivedCreateContextId = create->ctx_id;
7676
this->receivedContextCreateFlags = create->flags;
77-
this->receivedContextCreateExtensions = create->extensions;
7877
return this->storedRetVal;
7978
}
8079

opencl/test/unit_test/os_interface/linux/drm_mock.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,6 @@ class DrmMock : public Drm {
150150
bool allowDebugAttachCallBase = false;
151151
uint32_t passedContextDebugId = std::numeric_limits<uint32_t>::max();
152152

153-
uint64_t receivedContextCreateExtensions = 0;
154153
uint32_t receivedContextCreateFlags = 0;
155154
uint32_t receivedCreateContextId = 0;
156155
uint32_t receivedDestroyContextId = 0;

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

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,24 @@
55
*
66
*/
77

8+
#include "shared/source/helpers/file_io.h"
9+
#include "shared/source/helpers/hw_info.h"
10+
#include "shared/source/os_interface/device_factory.h"
811
#include "shared/source/os_interface/linux/os_context_linux.h"
12+
#include "shared/source/os_interface/os_interface.h"
913
#include "shared/test/common/helpers/debug_manager_state_restore.h"
1014
#include "shared/test/common/helpers/default_hw_info.h"
1115
#include "shared/test/common/helpers/engine_descriptor_helper.h"
1216

17+
#include "opencl/test/unit_test/fixtures/memory_management_fixture.h"
1318
#include "opencl/test/unit_test/mocks/mock_platform.h"
1419
#include "opencl/test/unit_test/os_interface/linux/drm_mock.h"
1520

1621
#include "gtest/gtest.h"
1722

23+
#include <fstream>
24+
#include <memory>
25+
1826
using namespace NEO;
1927

2028
TEST(DrmTest, WhenGettingDeviceIdThenCorrectIdReturned) {
@@ -178,6 +186,46 @@ TEST(DrmTest, GivenDrmWhenAskedForContextThatFailsThenFalseIsReturned) {
178186
delete pDrm;
179187
}
180188

189+
TEST(DrmTest, givenDrmWhenOsContextIsCreatedThenCreateAndDestroyNewDrmOsContext) {
190+
auto executionEnvironment = std::make_unique<ExecutionEnvironment>();
191+
executionEnvironment->prepareRootDeviceEnvironments(1);
192+
DrmMock drmMock(*executionEnvironment->rootDeviceEnvironments[0]);
193+
executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(defaultHwInfo.get());
194+
195+
{
196+
OsContextLinux osContext1(drmMock, 0u, EngineDescriptorHelper::getDefaultDescriptor());
197+
osContext1.ensureContextInitialized();
198+
199+
EXPECT_EQ(1u, osContext1.getDrmContextIds().size());
200+
EXPECT_EQ(drmMock.receivedCreateContextId, osContext1.getDrmContextIds()[0]);
201+
EXPECT_EQ(0u, drmMock.receivedDestroyContextId);
202+
203+
{
204+
OsContextLinux osContext2(drmMock, 0u, EngineDescriptorHelper::getDefaultDescriptor());
205+
osContext2.ensureContextInitialized();
206+
EXPECT_EQ(1u, osContext2.getDrmContextIds().size());
207+
EXPECT_EQ(drmMock.receivedCreateContextId, osContext2.getDrmContextIds()[0]);
208+
EXPECT_EQ(0u, drmMock.receivedDestroyContextId);
209+
}
210+
}
211+
212+
EXPECT_EQ(2u, drmMock.receivedContextParamRequestCount);
213+
}
214+
215+
TEST(DrmTest, whenCreatingDrmContextWithVirtualMemoryAddressSpaceThenProperVmIdIsSet) {
216+
auto executionEnvironment = std::make_unique<ExecutionEnvironment>();
217+
executionEnvironment->prepareRootDeviceEnvironments(1);
218+
executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(defaultHwInfo.get());
219+
DrmMock drmMock(*executionEnvironment->rootDeviceEnvironments[0]);
220+
221+
ASSERT_EQ(1u, drmMock.virtualMemoryIds.size());
222+
223+
OsContextLinux osContext(drmMock, 0u, EngineDescriptorHelper::getDefaultDescriptor());
224+
osContext.ensureContextInitialized();
225+
226+
EXPECT_EQ(drmMock.receivedContextParamRequest.value, drmMock.getVirtualMemoryAddressSpace(0u));
227+
}
228+
181229
TEST(DrmTest, whenCreatingDrmContextWithNoVirtualMemoryAddressSpaceThenProperContextIdIsSet) {
182230
auto executionEnvironment = std::make_unique<ExecutionEnvironment>();
183231
executionEnvironment->prepareRootDeviceEnvironments(1);
@@ -194,6 +242,61 @@ TEST(DrmTest, whenCreatingDrmContextWithNoVirtualMemoryAddressSpaceThenProperCon
194242
EXPECT_EQ(0u, drmMock.receivedContextParamRequestCount);
195243
}
196244

245+
TEST(DrmTest, givenDrmAndNegativeCheckNonPersistentContextsSupportWhenOsContextIsCreatedThenReceivedContextParamRequestCountReturnsCorrectValue) {
246+
auto executionEnvironment = std::make_unique<ExecutionEnvironment>();
247+
executionEnvironment->prepareRootDeviceEnvironments(1);
248+
executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(defaultHwInfo.get());
249+
DrmMock drmMock(*executionEnvironment->rootDeviceEnvironments[0]);
250+
auto expectedCount = 0u;
251+
252+
{
253+
drmMock.storedRetValForPersistant = -1;
254+
drmMock.checkNonPersistentContextsSupport();
255+
expectedCount += 2;
256+
OsContextLinux osContext(drmMock, 0u, EngineDescriptorHelper::getDefaultDescriptor());
257+
osContext.ensureContextInitialized();
258+
EXPECT_EQ(expectedCount, drmMock.receivedContextParamRequestCount);
259+
}
260+
{
261+
drmMock.storedRetValForPersistant = 0;
262+
drmMock.checkNonPersistentContextsSupport();
263+
++expectedCount;
264+
OsContextLinux osContext(drmMock, 0u, EngineDescriptorHelper::getDefaultDescriptor());
265+
osContext.ensureContextInitialized();
266+
expectedCount += 2;
267+
EXPECT_EQ(expectedCount, drmMock.receivedContextParamRequestCount);
268+
}
269+
}
270+
271+
TEST(DrmTest, givenDrmPreemptionEnabledAndLowPriorityEngineWhenCreatingOsContextThenCallSetContextPriorityIoctl) {
272+
auto executionEnvironment = std::make_unique<ExecutionEnvironment>();
273+
executionEnvironment->prepareRootDeviceEnvironments(1);
274+
executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(defaultHwInfo.get());
275+
DrmMock drmMock(*executionEnvironment->rootDeviceEnvironments[0]);
276+
drmMock.preemptionSupported = false;
277+
278+
OsContextLinux osContext1(drmMock, 0u, EngineDescriptorHelper::getDefaultDescriptor());
279+
osContext1.ensureContextInitialized();
280+
OsContextLinux osContext2(drmMock, 0u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::LowPriority}));
281+
osContext2.ensureContextInitialized();
282+
283+
EXPECT_EQ(2u, drmMock.receivedContextParamRequestCount);
284+
285+
drmMock.preemptionSupported = true;
286+
287+
OsContextLinux osContext3(drmMock, 0u, EngineDescriptorHelper::getDefaultDescriptor());
288+
osContext3.ensureContextInitialized();
289+
EXPECT_EQ(3u, drmMock.receivedContextParamRequestCount);
290+
291+
OsContextLinux osContext4(drmMock, 0u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::LowPriority}));
292+
osContext4.ensureContextInitialized();
293+
EXPECT_EQ(5u, drmMock.receivedContextParamRequestCount);
294+
EXPECT_EQ(drmMock.receivedCreateContextId, drmMock.receivedContextParamRequest.ctx_id);
295+
EXPECT_EQ(static_cast<uint64_t>(I915_CONTEXT_PARAM_PRIORITY), drmMock.receivedContextParamRequest.param);
296+
EXPECT_EQ(static_cast<uint64_t>(-1023), drmMock.receivedContextParamRequest.value);
297+
EXPECT_EQ(0u, drmMock.receivedContextParamRequest.size);
298+
}
299+
197300
TEST(DrmTest, WhenGettingExecSoftPinThenCorrectValueIsReturned) {
198301
auto executionEnvironment = std::make_unique<ExecutionEnvironment>();
199302
executionEnvironment->prepareRootDeviceEnvironments(1);
@@ -474,6 +577,24 @@ TEST(DrmTest, givenPerContextVMRequiredWhenCreatingOsContextsForRootDeviceThenIm
474577
EXPECT_EQ(0u, drmVmIds[31]);
475578
}
476579

580+
TEST(DrmTest, givenNoPerContextVmsDrmWhenCreatingOsContextsThenVmIdIsNotQueriedAndStored) {
581+
auto executionEnvironment = std::make_unique<ExecutionEnvironment>();
582+
executionEnvironment->prepareRootDeviceEnvironments(1);
583+
executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(defaultHwInfo.get());
584+
DrmMock drmMock(*executionEnvironment->rootDeviceEnvironments[0]);
585+
EXPECT_FALSE(drmMock.requirePerContextVM);
586+
587+
drmMock.storedRetValForVmId = 1;
588+
589+
OsContextLinux osContext(drmMock, 0u, EngineDescriptorHelper::getDefaultDescriptor());
590+
osContext.ensureContextInitialized();
591+
EXPECT_EQ(0u, drmMock.receivedCreateContextId);
592+
EXPECT_EQ(1u, drmMock.receivedContextParamRequestCount);
593+
594+
auto &drmVmIds = osContext.getDrmVmIds();
595+
EXPECT_EQ(0u, drmVmIds.size());
596+
}
597+
477598
TEST(DrmTest, givenProgramDebuggingAndContextDebugAvailableWhenCreatingContextThenSetContextDebugFlagIsCalled) {
478599
auto executionEnvironment = std::make_unique<ExecutionEnvironment>();
479600
executionEnvironment->setDebuggingEnabled();

shared/source/os_interface/linux/drm_neo.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,26 @@ void Drm::setNonPersistentContext(uint32_t drmContextId) {
377377
ioctl(DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM, &contextParam);
378378
}
379379

380+
uint32_t Drm::createDrmContext(uint32_t drmVmId, bool isSpecialContextRequested) {
381+
drm_i915_gem_context_create_ext gcc = {};
382+
383+
this->appendDrmContextFlags(gcc, isSpecialContextRequested);
384+
385+
auto retVal = ioctl(DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT, &gcc);
386+
UNRECOVERABLE_IF(retVal != 0);
387+
388+
if (drmVmId > 0) {
389+
drm_i915_gem_context_param param{};
390+
param.ctx_id = gcc.ctx_id;
391+
param.value = drmVmId;
392+
param.param = I915_CONTEXT_PARAM_VM;
393+
retVal = ioctl(DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM, &param);
394+
UNRECOVERABLE_IF(retVal != 0);
395+
}
396+
397+
return gcc.ctx_id;
398+
}
399+
380400
void Drm::destroyDrmContext(uint32_t drmContextId) {
381401
drm_i915_gem_context_destroy destroy = {};
382402
destroy.ctx_id = drmContextId;

shared/source/os_interface/linux/drm_query.cpp

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -117,24 +117,4 @@ int Drm::createDrmVirtualMemory(uint32_t &drmVmId) {
117117
return ret;
118118
}
119119

120-
uint32_t Drm::createDrmContext(uint32_t drmVmId, bool isSpecialContextRequested) {
121-
drm_i915_gem_context_create_ext gcc = {};
122-
123-
this->appendDrmContextFlags(gcc, isSpecialContextRequested);
124-
125-
auto retVal = ioctl(DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT, &gcc);
126-
UNRECOVERABLE_IF(retVal != 0);
127-
128-
if (drmVmId > 0) {
129-
drm_i915_gem_context_param param{};
130-
param.ctx_id = gcc.ctx_id;
131-
param.value = drmVmId;
132-
param.param = I915_CONTEXT_PARAM_VM;
133-
retVal = ioctl(DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM, &param);
134-
UNRECOVERABLE_IF(retVal != 0);
135-
}
136-
137-
return gcc.ctx_id;
138-
}
139-
140120
} // namespace NEO

shared/source/os_interface/linux/drm_query_dg1.cpp

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -126,24 +126,4 @@ int Drm::createDrmVirtualMemory(uint32_t &drmVmId) {
126126
return ret;
127127
}
128128

129-
uint32_t Drm::createDrmContext(uint32_t drmVmId, bool isSpecialContextRequested) {
130-
drm_i915_gem_context_create_ext gcc = {};
131-
132-
this->appendDrmContextFlags(gcc, isSpecialContextRequested);
133-
134-
auto retVal = ioctl(DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT, &gcc);
135-
UNRECOVERABLE_IF(retVal != 0);
136-
137-
if (drmVmId > 0) {
138-
drm_i915_gem_context_param param{};
139-
param.ctx_id = gcc.ctx_id;
140-
param.value = drmVmId;
141-
param.param = I915_CONTEXT_PARAM_VM;
142-
retVal = ioctl(DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM, &param);
143-
UNRECOVERABLE_IF(retVal != 0);
144-
}
145-
146-
return gcc.ctx_id;
147-
}
148-
149129
} // namespace NEO

0 commit comments

Comments
 (0)