diff --git a/runtime/os_interface/linux/drm_memory_manager.cpp b/runtime/os_interface/linux/drm_memory_manager.cpp index 7aa2506a8f..e4f1195fb6 100644 --- a/runtime/os_interface/linux/drm_memory_manager.cpp +++ b/runtime/os_interface/linux/drm_memory_manager.cpp @@ -456,11 +456,12 @@ void DrmMemoryManager::freeGraphicsMemoryImpl(GraphicsAllocation *gfxAllocation) uint64_t DrmMemoryManager::getSystemSharedMemory() { uint64_t hostMemorySize = MemoryConstants::pageSize * (uint64_t)(sysconf(_SC_PHYS_PAGES)); - drm_i915_gem_get_aperture getAperture; - auto ret = drm->ioctl(DRM_IOCTL_I915_GEM_GET_APERTURE, &getAperture); + drm_i915_gem_context_param getContextParam = {}; + getContextParam.param = I915_CONTEXT_PARAM_GTT_SIZE; + auto ret = drm->ioctl(DRM_IOCTL_I915_GEM_CONTEXT_GETPARAM, &getContextParam); DEBUG_BREAK_IF(ret != 0); ((void)(ret)); - uint64_t gpuMemorySize = getAperture.aper_size; + uint64_t gpuMemorySize = getContextParam.value; return std::min(hostMemorySize, gpuMemorySize); } diff --git a/unit_tests/os_interface/linux/device_command_stream_fixture.h b/unit_tests/os_interface/linux/device_command_stream_fixture.h index 149baa1a83..73fcca3786 100644 --- a/unit_tests/os_interface/linux/device_command_stream_fixture.h +++ b/unit_tests/os_interface/linux/device_command_stream_fixture.h @@ -91,12 +91,12 @@ class DrmMockCustom : public Drm { gemCreate = 0; gemSetTiling = 0; primeFdToHandle = 0; - gemGetAperture = 0; gemMmap = 0; gemSetDomain = 0; gemWait = 0; gemClose = 0; regRead = 0; + contextGetParam = 0; } std::atomic total; @@ -105,12 +105,12 @@ class DrmMockCustom : public Drm { std::atomic gemCreate; std::atomic gemSetTiling; std::atomic primeFdToHandle; - std::atomic gemGetAperture; std::atomic gemMmap; std::atomic gemSetDomain; std::atomic gemWait; std::atomic gemClose; std::atomic regRead; + std::atomic contextGetParam; }; std::atomic ioctl_res; @@ -131,12 +131,12 @@ class DrmMockCustom : public Drm { NEO_IOCTL_EXPECT_EQ(gemCreate); NEO_IOCTL_EXPECT_EQ(gemSetTiling); NEO_IOCTL_EXPECT_EQ(primeFdToHandle); - NEO_IOCTL_EXPECT_EQ(gemGetAperture); NEO_IOCTL_EXPECT_EQ(gemMmap); NEO_IOCTL_EXPECT_EQ(gemSetDomain); NEO_IOCTL_EXPECT_EQ(gemWait); NEO_IOCTL_EXPECT_EQ(gemClose); NEO_IOCTL_EXPECT_EQ(regRead); + NEO_IOCTL_EXPECT_EQ(contextGetParam); #undef NEO_IOCTL_EXPECT_EQ } @@ -155,7 +155,6 @@ class DrmMockCustom : public Drm { __s32 inputFd = 0; //DRM_IOCTL_I915_GEM_USERPTR __u32 returnHandle = 0; - __u64 gpuMemSize = 3u * MemoryConstants::gigaByte; //DRM_IOCTL_I915_GEM_MMAP __u32 mmapHandle = 0; __u32 mmapPad = 0; @@ -167,6 +166,9 @@ class DrmMockCustom : public Drm { __u32 setDomainHandle = 0; __u32 setDomainReadDomains = 0; __u32 setDomainWriteDomain = 0; + //DRM_IOCTL_I915_GEM_CONTEXT_GETPARAM + drm_i915_gem_context_param recordedGetContextParam = {0}; + __u64 getContextParamRetValue = 0; int errnoValue = 0; @@ -208,12 +210,6 @@ class DrmMockCustom : public Drm { inputFd = primeToHandleParams->fd; ioctl_cnt.primeFdToHandle++; } break; - case DRM_IOCTL_I915_GEM_GET_APERTURE: { - auto aperture = (drm_i915_gem_get_aperture *)arg; - aperture->aper_available_size = gpuMemSize; - aperture->aper_size = gpuMemSize; - ioctl_cnt.gemGetAperture++; - } break; case DRM_IOCTL_I915_GEM_MMAP: { auto mmapParams = (drm_i915_gem_mmap *)arg; mmapHandle = mmapParams->handle; @@ -244,6 +240,13 @@ class DrmMockCustom : public Drm { ioctl_cnt.regRead++; break; + case DRM_IOCTL_I915_GEM_CONTEXT_GETPARAM: { + ioctl_cnt.contextGetParam++; + auto getContextParam = (drm_i915_gem_context_param *)arg; + recordedGetContextParam = *getContextParam; + getContextParam->value = getContextParamRetValue; + } break; + default: std::cout << std::hex << DRM_IOCTL_I915_GEM_WAIT << std::endl; std::cout << "unexpected IOCTL: " << std::hex << request << std::endl; diff --git a/unit_tests/os_interface/linux/drm_memory_manager_tests.cpp b/unit_tests/os_interface/linux/drm_memory_manager_tests.cpp index 08aa663d32..c6e8aa8f95 100644 --- a/unit_tests/os_interface/linux/drm_memory_manager_tests.cpp +++ b/unit_tests/os_interface/linux/drm_memory_manager_tests.cpp @@ -524,9 +524,11 @@ TEST_F(DrmMemoryManagerTest, Allocate_HostPtr_UserptrFail) { ::alignedFree(ptrT); } -TEST_F(DrmMemoryManagerTest, getSystemSharedMemory) { +TEST_F(DrmMemoryManagerTest, givenDrmMemoryManagerWhengetSystemSharedMemoryIsCalledThenContextGetParamIsCalled) { + mock->getContextParamRetValue = 16 * MemoryConstants::gigaByte; uint64_t mem = memoryManager->getSystemSharedMemory(); - mock->ioctl_expected.gemGetAperture = 1; + mock->ioctl_expected.contextGetParam = 1; + EXPECT_EQ(mock->recordedGetContextParam.param, static_cast<__u64>(I915_CONTEXT_PARAM_GTT_SIZE)); EXPECT_GT(mem, 0u); } @@ -543,17 +545,19 @@ TEST_F(DrmMemoryManagerTest, getMinimumSystemSharedMemory) { auto hostMemorySize = MemoryConstants::pageSize * (uint64_t)(sysconf(_SC_PHYS_PAGES)); // gpuMemSize < hostMemSize auto gpuMemorySize = hostMemorySize - 1u; - mock->gpuMemSize = gpuMemorySize; + mock->getContextParamRetValue = gpuMemorySize; + uint64_t systemSharedMemorySize = memoryManager->getSystemSharedMemory(); - mock->ioctl_expected.gemGetAperture = 1; + mock->ioctl_expected.contextGetParam = 1; + EXPECT_EQ(gpuMemorySize, systemSharedMemorySize); mock->testIoctls(); // gpuMemSize > hostMemSize gpuMemorySize = hostMemorySize + 1u; - mock->gpuMemSize = gpuMemorySize; + mock->getContextParamRetValue = gpuMemorySize; systemSharedMemorySize = memoryManager->getSystemSharedMemory(); - mock->ioctl_expected.gemGetAperture = 2; // get aperture again + mock->ioctl_expected.contextGetParam = 2; EXPECT_EQ(hostMemorySize, systemSharedMemorySize); mock->testIoctls(); }