Skip to content

Commit 5330c9c

Browse files
Fix to proper init gmm page table on linux
Signed-off-by: Katarzyna Cencelewska <[email protected]>
1 parent bbfbf19 commit 5330c9c

File tree

6 files changed

+29
-2
lines changed

6 files changed

+29
-2
lines changed

opencl/source/os_interface/linux/drm_command_stream.inl

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include "shared/source/command_stream/linear_stream.h"
99
#include "shared/source/direct_submission/linux/drm_direct_submission.h"
1010
#include "shared/source/execution_environment/execution_environment.h"
11+
#include "shared/source/gmm_helper/client_context/gmm_client_context.h"
1112
#include "shared/source/gmm_helper/gmm_helper.h"
1213
#include "shared/source/gmm_helper/page_table_mngr.h"
1314
#include "shared/source/helpers/aligned_memory.h"
@@ -211,9 +212,19 @@ DrmMemoryManager *DrmCommandStreamReceiver<GfxFamily>::getMemoryManager() const
211212

212213
template <typename GfxFamily>
213214
GmmPageTableMngr *DrmCommandStreamReceiver<GfxFamily>::createPageTableManager() {
214-
GmmPageTableMngr *gmmPageTableMngr = GmmPageTableMngr::create(this->executionEnvironment.rootDeviceEnvironments[this->rootDeviceIndex]->getGmmClientContext(), TT_TYPE::AUXTT, nullptr);
215+
auto rootDeviceEnvironment = this->executionEnvironment.rootDeviceEnvironments[this->rootDeviceIndex].get();
216+
auto gmmClientContext = rootDeviceEnvironment->getGmmClientContext();
217+
218+
GMM_DEVICE_INFO deviceInfo{};
219+
GMM_DEVICE_CALLBACKS_INT deviceCallbacks{};
220+
deviceInfo.pDeviceCb = &deviceCallbacks;
221+
gmmClientContext->setGmmDeviceInfo(&deviceInfo);
222+
223+
auto gmmPageTableMngr = GmmPageTableMngr::create(gmmClientContext, TT_TYPE::AUXTT, nullptr);
215224
gmmPageTableMngr->setCsrHandle(this);
216-
this->executionEnvironment.rootDeviceEnvironments[this->rootDeviceIndex]->pageTableManager.reset(gmmPageTableMngr);
225+
226+
rootDeviceEnvironment->pageTableManager.reset(gmmPageTableMngr);
227+
217228
return gmmPageTableMngr;
218229
}
219230

shared/source/gmm_helper/client_context/gmm_client_context.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,8 @@ uint8_t GmmClientContext::getMediaSurfaceStateCompressionFormat(GMM_RESOURCE_FOR
7575
return clientContext->GetMediaSurfaceStateCompressionFormat(format);
7676
}
7777

78+
void GmmClientContext::setGmmDeviceInfo(GMM_DEVICE_INFO *deviceInfo) {
79+
clientContext->GmmSetDeviceInfo(deviceInfo);
80+
}
81+
7882
} // namespace NEO

shared/source/gmm_helper/client_context/gmm_client_context.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ class GmmClientContext {
4242
this->handleAllocator = std::move(allocator);
4343
}
4444

45+
MOCKABLE_VIRTUAL void setGmmDeviceInfo(GMM_DEVICE_INFO *deviceInfo);
46+
4547
GmmHandleAllocator *getHandleAllocator() {
4648
return handleAllocator.get();
4749
}

shared/source/os_interface/linux/page_table_manager_functions.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
namespace NEO {
1515
GmmPageTableMngr::GmmPageTableMngr(GmmClientContext *gmmClientContext, unsigned int translationTableFlags, GMM_TRANSLATIONTABLE_CALLBACKS *translationTableCb) : clientContext(gmmClientContext->getHandle()) {
1616
pageTableManager = clientContext->CreatePageTblMgrObject(translationTableFlags);
17+
DEBUG_BREAK_IF(pageTableManager == nullptr);
1718
}
1819

1920
void GmmPageTableMngr::setCsrHandle(void *csrHandle) {}

shared/test/common/mocks/mock_gmm_client_context_base.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
#include "shared/test/common/mocks/mock_gmm_client_context_base.h"
99

10+
#include "gtest/gtest.h"
11+
1012
namespace NEO {
1113

1214
GMM_RESOURCE_INFO *MockGmmClientContextBase::createResInfoObject(GMM_RESCREATE_PARAMS *pCreateParams) {
@@ -33,4 +35,10 @@ uint8_t MockGmmClientContextBase::getMediaSurfaceStateCompressionFormat(GMM_RESO
3335
return compressionFormatToReturn;
3436
}
3537

38+
void MockGmmClientContextBase::setGmmDeviceInfo(GMM_DEVICE_INFO *deviceInfo) {
39+
EXPECT_NE(deviceInfo, nullptr);
40+
41+
GMM_DEVICE_CALLBACKS_INT emptyStruct{};
42+
EXPECT_EQ(0, memcmp(deviceInfo->pDeviceCb, &emptyStruct, sizeof(GMM_DEVICE_CALLBACKS_INT)));
43+
}
3644
} // namespace NEO

shared/test/common/mocks/mock_gmm_client_context_base.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ class MockGmmClientContextBase : public GmmClientContext {
1717
void destroyResInfoObject(GMM_RESOURCE_INFO *pResInfo) override;
1818
uint8_t getSurfaceStateCompressionFormat(GMM_RESOURCE_FORMAT format) override;
1919
uint8_t getMediaSurfaceStateCompressionFormat(GMM_RESOURCE_FORMAT format) override;
20+
void setGmmDeviceInfo(GMM_DEVICE_INFO *deviceInfo) override;
2021

2122
GMM_RESOURCE_FORMAT capturedFormat = GMM_FORMAT_INVALID;
2223
uint8_t compressionFormatToReturn = 1;

0 commit comments

Comments
 (0)