diff --git a/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp b/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp index 205c66db95..9b683986db 100644 --- a/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp +++ b/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp @@ -489,6 +489,10 @@ uint32_t IoctlHelperXe::createGem(uint64_t size, uint32_t memoryBanks) { } currentBank++; } + if (memoryBanks == 0) { + auto regionClassAndInstance = memoryInfo->getMemoryRegionClassAndInstance(memoryBanks, *pHwInfo); + memoryInstances.set(regionClassAndInstance.memoryInstance); + } create.flags = static_cast(memoryInstances.to_ulong()); [[maybe_unused]] auto ret = ioctl(DrmIoctl::GemCreate, &create); DEBUG_BREAK_IF(ret != 0); diff --git a/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp b/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp index 5e1a835386..10f87b116f 100644 --- a/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp @@ -348,6 +348,31 @@ TEST(IoctlHelperXeTest, givenIoctlHelperXeWhenCallGemCreateAndNoLocalMemoryThenP EXPECT_EQ(handle, testValueGemCreate); } +TEST(IoctlHelperXeTest, givenIoctlHelperXeWhenCallGemCreateWhenMemoryBanksZeroThenProperValuesSet) { + DebugManagerStateRestore restorer; + DebugManager.flags.EnableLocalMemory.set(0); + auto executionEnvironment = std::make_unique(); + DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]}; + + auto xeIoctlHelper = std::make_unique(drm); + drm.memoryInfo.reset(xeIoctlHelper->createMemoryInfo().release()); + ASSERT_NE(nullptr, xeIoctlHelper); + + uint64_t size = 1234; + uint32_t memoryBanks = 0u; + + EXPECT_EQ(0, drm.ioctlCnt.gemCreate); + uint32_t handle = xeIoctlHelper->createGem(size, memoryBanks); + EXPECT_EQ(1, drm.ioctlCnt.gemCreate); + + EXPECT_EQ(size, drm.createParamsSize); + EXPECT_EQ(1u, drm.createParamsFlags); + + // dummy mock handle + EXPECT_EQ(handle, drm.createParamsHandle); + EXPECT_EQ(handle, testValueGemCreate); +} + TEST(IoctlHelperXeTest, givenIoctlHelperXeWhenCallGemCreateAndLocalMemoryThenProperValuesSet) { DebugManagerStateRestore restorer; DebugManager.flags.EnableLocalMemory.set(1);