diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_1.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_1.cpp index 6bea81e67c..449ffacf21 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_1.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_1.cpp @@ -319,7 +319,7 @@ TEST_F(CommandListCreateTests, givenValidSystemAlloctedPtrAndSharedSystemAllocat auto &hwInfo = *device->getNEODevice()->getRootDeviceEnvironment().getMutableHardwareInfo(); VariableBackup sharedSystemMemCapabilities{&hwInfo.capabilityTable.sharedSystemMemCapabilities}; - sharedSystemMemCapabilities = UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::sharedSystemPageFaultEnabled; + sharedSystemMemCapabilities = (UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::atomicAccess | UnifiedSharedMemoryFlags::concurrentAccess | UnifiedSharedMemoryFlags::concurrentAtomicAccess); auto res = commandList->appendMemAdvise(device, ptr, size, ZE_MEMORY_ADVICE_SET_PREFERRED_LOCATION); EXPECT_EQ(1u, commandList->getMemAdviseOperations().size()); @@ -354,7 +354,7 @@ TEST_P(SupportedMemAdviceSystemAllocatorTests, givenValidSystemAlloctedPtrWhenEx auto &hwInfo = *device->getNEODevice()->getRootDeviceEnvironment().getMutableHardwareInfo(); VariableBackup sharedSystemMemCapabilities{&hwInfo.capabilityTable.sharedSystemMemCapabilities}; - sharedSystemMemCapabilities = UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::sharedSystemPageFaultEnabled; + sharedSystemMemCapabilities = (UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::atomicAccess | UnifiedSharedMemoryFlags::concurrentAccess | UnifiedSharedMemoryFlags::concurrentAtomicAccess); auto res = commandList->executeMemAdvise(device, ptr, size, GetParam()); EXPECT_EQ(1u, memoryManager->setSharedSystemMemAdviseCalledCount); @@ -396,7 +396,7 @@ TEST_P(UnSupportedMemAdviceSystemAllocatorTests, givenValidSystemAlloctedPtrWhen auto &hwInfo = *device->getNEODevice()->getRootDeviceEnvironment().getMutableHardwareInfo(); VariableBackup sharedSystemMemCapabilities{&hwInfo.capabilityTable.sharedSystemMemCapabilities}; - sharedSystemMemCapabilities = UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::sharedSystemPageFaultEnabled; + sharedSystemMemCapabilities = (UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::atomicAccess | UnifiedSharedMemoryFlags::concurrentAccess | UnifiedSharedMemoryFlags::concurrentAtomicAccess); auto res = commandList->executeMemAdvise(device, ptr, size, GetParam()); EXPECT_EQ(0u, memoryManager->setSharedSystemMemAdviseCalledCount); diff --git a/level_zero/core/test/unit_tests/xe2_hpg_core/test_cmdlist_xe2_hpg_core.cpp b/level_zero/core/test/unit_tests/xe2_hpg_core/test_cmdlist_xe2_hpg_core.cpp index 8433a4dc4d..31beff69d9 100644 --- a/level_zero/core/test/unit_tests/xe2_hpg_core/test_cmdlist_xe2_hpg_core.cpp +++ b/level_zero/core/test/unit_tests/xe2_hpg_core/test_cmdlist_xe2_hpg_core.cpp @@ -481,6 +481,8 @@ HWTEST2_F(CommandListStatePrefetchXe2HpgCore, givenUnifiedSharedMemoryWhenPrefet } HWTEST2_F(CommandListStatePrefetchXe2HpgCore, givenSharedSystemAllocationOnSupportedDeviceWhenPrefetchApiIsCalledThenRequestMemoryPrefetchCalled, IsXe2HpgCore) { + DebugManagerStateRestore restore; + debugManager.flags.EnableSharedSystemUsmSupport.set(1); auto memoryManager = static_cast(device->getDriverHandle()->getMemoryManager()); memoryManager->prefetchManager.reset(new MockPrefetchManager()); auto pCommandList = std::make_unique>>(); @@ -490,7 +492,7 @@ HWTEST2_F(CommandListStatePrefetchXe2HpgCore, givenSharedSystemAllocationOnSuppo auto &hwInfo = *device->getNEODevice()->getRootDeviceEnvironment().getMutableHardwareInfo(); VariableBackup sharedSystemMemCapabilities{&hwInfo.capabilityTable.sharedSystemMemCapabilities}; - sharedSystemMemCapabilities = UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::sharedSystemPageFaultEnabled; + sharedSystemMemCapabilities = (UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::atomicAccess | UnifiedSharedMemoryFlags::concurrentAccess | UnifiedSharedMemoryFlags::concurrentAtomicAccess); size_t size = 10; void *ptr = malloc(size); @@ -510,10 +512,13 @@ HWTEST2_F(CommandListStatePrefetchXe2HpgCore, givenSharedSystemAllocationOnSuppo auto result = pCommandList->initialize(device, NEO::EngineGroupType::compute, 0u); ASSERT_EQ(ZE_RESULT_SUCCESS, result); + DebugManagerStateRestore restore; + debugManager.flags.EnableSharedSystemUsmSupport.set(1); + auto &hwInfo = *device->getNEODevice()->getRootDeviceEnvironment().getMutableHardwareInfo(); VariableBackup sharedSystemMemCapabilities{&hwInfo.capabilityTable.sharedSystemMemCapabilities}; - sharedSystemMemCapabilities = UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::sharedSystemPageFaultEnabled; + sharedSystemMemCapabilities = (UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::atomicAccess | UnifiedSharedMemoryFlags::concurrentAccess | UnifiedSharedMemoryFlags::concurrentAtomicAccess); size_t size = 10; void *ptr = malloc(size); diff --git a/level_zero/core/test/unit_tests/xe_hpc_core/test_cmdlist_xe_hpc_core.cpp b/level_zero/core/test/unit_tests/xe_hpc_core/test_cmdlist_xe_hpc_core.cpp index 66ff2da3f7..daea9ea24b 100644 --- a/level_zero/core/test/unit_tests/xe_hpc_core/test_cmdlist_xe_hpc_core.cpp +++ b/level_zero/core/test/unit_tests/xe_hpc_core/test_cmdlist_xe_hpc_core.cpp @@ -119,6 +119,8 @@ HWTEST2_F(CommandListStatePrefetchXeHpcCore, givenUnifiedSharedMemoryWhenPrefetc } HWTEST2_F(CommandListStatePrefetchXeHpcCore, givenSharedSystemAllocationOnSupportedDeviceWhenPrefetchApiIsCalledThenRequestMemoryPrefetchCalled, IsXeHpcCore) { + DebugManagerStateRestore restore; + debugManager.flags.EnableSharedSystemUsmSupport.set(1); auto memoryManager = static_cast(device->getDriverHandle()->getMemoryManager()); memoryManager->prefetchManager.reset(new MockPrefetchManager()); auto pCommandList = std::make_unique>>(); @@ -128,7 +130,7 @@ HWTEST2_F(CommandListStatePrefetchXeHpcCore, givenSharedSystemAllocationOnSuppor auto &hwInfo = *device->getNEODevice()->getRootDeviceEnvironment().getMutableHardwareInfo(); VariableBackup sharedSystemMemCapabilities{&hwInfo.capabilityTable.sharedSystemMemCapabilities}; - sharedSystemMemCapabilities = UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::sharedSystemPageFaultEnabled; + sharedSystemMemCapabilities = (UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::atomicAccess | UnifiedSharedMemoryFlags::concurrentAccess | UnifiedSharedMemoryFlags::concurrentAtomicAccess); size_t size = 10; void *ptr = malloc(size); @@ -148,10 +150,13 @@ HWTEST2_F(CommandListStatePrefetchXeHpcCore, givenSharedSystemAllocationOnSuppor auto result = pCommandList->initialize(device, NEO::EngineGroupType::compute, 0u); ASSERT_EQ(ZE_RESULT_SUCCESS, result); + DebugManagerStateRestore restore; + debugManager.flags.EnableSharedSystemUsmSupport.set(1); + auto &hwInfo = *device->getNEODevice()->getRootDeviceEnvironment().getMutableHardwareInfo(); VariableBackup sharedSystemMemCapabilities{&hwInfo.capabilityTable.sharedSystemMemCapabilities}; - sharedSystemMemCapabilities = UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::sharedSystemPageFaultEnabled; + sharedSystemMemCapabilities = (UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::atomicAccess | UnifiedSharedMemoryFlags::concurrentAccess | UnifiedSharedMemoryFlags::concurrentAtomicAccess); size_t size = 10; void *ptr = malloc(size); diff --git a/opencl/test/unit_test/api/cl_set_kernel_arg_svm_pointer_tests.inl b/opencl/test/unit_test/api/cl_set_kernel_arg_svm_pointer_tests.inl index bfa5f387cd..ec2c7937d0 100644 --- a/opencl/test/unit_test/api/cl_set_kernel_arg_svm_pointer_tests.inl +++ b/opencl/test/unit_test/api/cl_set_kernel_arg_svm_pointer_tests.inl @@ -310,7 +310,7 @@ TEST_F(clSetKernelArgSVMPointerTests, givenSvmAndValidArgValueWhenSettingSameKer EXPECT_EQ(++callCounter, pMockKernel->setArgSvmAllocCalls); ++mockSvmManager->allocationsCounter; - pDevice->getRootDeviceEnvironment().getMutableHardwareInfo()->capabilityTable.sharedSystemMemCapabilities = UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::sharedSystemPageFaultEnabled; + pDevice->getRootDeviceEnvironment().getMutableHardwareInfo()->capabilityTable.sharedSystemMemCapabilities = (UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::atomicAccess | UnifiedSharedMemoryFlags::concurrentAccess | UnifiedSharedMemoryFlags::concurrentAtomicAccess); mockSvmManager->freeSVMAlloc(nextPtrSvm); // same values but no svmData - called retVal = clSetKernelArgSVMPointer( diff --git a/opencl/test/unit_test/api/cl_unified_shared_memory_tests.inl b/opencl/test/unit_test/api/cl_unified_shared_memory_tests.inl index a91f387a74..dc996ec493 100644 --- a/opencl/test/unit_test/api/cl_unified_shared_memory_tests.inl +++ b/opencl/test/unit_test/api/cl_unified_shared_memory_tests.inl @@ -858,7 +858,7 @@ TEST(clUnifiedSharedMemoryTests, whenClSetKernelArgMemPointerINTELisCalledWithIn TEST(clUnifiedSharedMemoryTests, whenDeviceSupportSharedMemoryAllocationsAndSystemPointerIsPassedThenItIsProperlySetInKernel) { auto mockContext = std::make_unique(); auto device = mockContext->getDevice(0u); - device->getRootDeviceEnvironment().getMutableHardwareInfo()->capabilityTable.sharedSystemMemCapabilities = UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::sharedSystemPageFaultEnabled; + device->getRootDeviceEnvironment().getMutableHardwareInfo()->capabilityTable.sharedSystemMemCapabilities = (UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::atomicAccess | UnifiedSharedMemoryFlags::concurrentAccess | UnifiedSharedMemoryFlags::concurrentAtomicAccess); REQUIRE_SVM_OR_SKIP(device); MockKernelWithInternals mockKernel(*device, mockContext.get(), true); diff --git a/opencl/test/unit_test/device/device_caps_tests.cpp b/opencl/test/unit_test/device/device_caps_tests.cpp index 88d82d01ef..6055c14442 100644 --- a/opencl/test/unit_test/device/device_caps_tests.cpp +++ b/opencl/test/unit_test/device/device_caps_tests.cpp @@ -1312,14 +1312,19 @@ TEST_F(DeviceGetCapsTest, whenDeviceIsCreatedThenMaxParameterSizeIsSetCorrectly) } TEST_F(DeviceGetCapsTest, givenUnifiedMemorySharedSystemFlagWhenDeviceIsCreatedThenSystemMemoryIsSetCorrectly) { - + DebugManagerStateRestore dbgRestore; + debugManager.flags.EnableSharedSystemUsmSupport.set(-1); auto device = std::make_unique(MockDevice::createWithNewExecutionEnvironment(defaultHwInfo.get())); device->getRootDeviceEnvironment().getMutableHardwareInfo()->capabilityTable.sharedSystemMemCapabilities = 0; - EXPECT_EQ(0u, device->getDeviceInfo().sharedSystemMemCapabilities); EXPECT_FALSE(device->areSharedSystemAllocationsAllowed()); device.reset(new MockClDevice{MockDevice::createWithNewExecutionEnvironment(defaultHwInfo.get())}); - device->getRootDeviceEnvironment().getMutableHardwareInfo()->capabilityTable.sharedSystemMemCapabilities = UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::sharedSystemPageFaultEnabled; + device->getRootDeviceEnvironment().getMutableHardwareInfo()->capabilityTable.sharedSystemMemCapabilities = (UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::atomicAccess | UnifiedSharedMemoryFlags::concurrentAccess | UnifiedSharedMemoryFlags::concurrentAtomicAccess); + EXPECT_FALSE(device->areSharedSystemAllocationsAllowed()); + + debugManager.flags.EnableSharedSystemUsmSupport.set(1); + device.reset(new MockClDevice{MockDevice::createWithNewExecutionEnvironment(defaultHwInfo.get())}); + device->getRootDeviceEnvironment().getMutableHardwareInfo()->capabilityTable.sharedSystemMemCapabilities = (UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::atomicAccess | UnifiedSharedMemoryFlags::concurrentAccess | UnifiedSharedMemoryFlags::concurrentAtomicAccess); EXPECT_TRUE(device->areSharedSystemAllocationsAllowed()); } diff --git a/opencl/test/unit_test/fixtures/device_info_fixture.h b/opencl/test/unit_test/fixtures/device_info_fixture.h index 021e617ec9..409129a07e 100644 --- a/opencl/test/unit_test/fixtures/device_info_fixture.h +++ b/opencl/test/unit_test/fixtures/device_info_fixture.h @@ -7,6 +7,7 @@ #pragma once #include "shared/source/memory_manager/memory_manager.h" +#include "shared/test/common/helpers/debug_manager_state_restore.h" #include "shared/test/common/mocks/mock_device.h" #include "opencl/test/unit_test/mocks/mock_cl_device.h" @@ -22,6 +23,8 @@ struct GetDeviceInfoMemCapabilitiesTest : ::testing::Test { }; void check(std::vector ¶ms) { + DebugManagerStateRestore restore; + debugManager.flags.EnableSharedSystemUsmSupport.set(0); auto device = std::make_unique(MockDevice::createWithNewExecutionEnvironment(nullptr)); const bool isKmdMigrationAvailable{device->getMemoryManager()->isKmdMigrationAvailable(device->getRootDeviceIndex())}; diff --git a/shared/source/device/device.cpp b/shared/source/device/device.cpp index 292c2a2cea..d1d0db048b 100644 --- a/shared/source/device/device.cpp +++ b/shared/source/device/device.cpp @@ -724,11 +724,11 @@ Debugger *Device::getDebugger() const { } bool Device::areSharedSystemAllocationsAllowed() const { - if ((debugManager.flags.EnableRecoverablePageFaults.get() == 0) || (debugManager.flags.EnableSharedSystemUsmSupport.get() == 0)) { + if ((debugManager.flags.EnableRecoverablePageFaults.get() == 0) || (debugManager.flags.EnableSharedSystemUsmSupport.get() != 1)) { return false; } - uint64_t mask = UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::sharedSystemPageFaultEnabled; - if (((getHardwareInfo().capabilityTable.sharedSystemMemCapabilities) & mask) == mask) { + uint64_t mask = (UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::atomicAccess | UnifiedSharedMemoryFlags::concurrentAccess | UnifiedSharedMemoryFlags::concurrentAtomicAccess); + if (getHardwareInfo().capabilityTable.sharedSystemMemCapabilities & mask) { return true; } return false; diff --git a/shared/source/dll/linux/drm_neo_create.cpp b/shared/source/dll/linux/drm_neo_create.cpp index ac8f166a2c..9f5d608bfe 100644 --- a/shared/source/dll/linux/drm_neo_create.cpp +++ b/shared/source/dll/linux/drm_neo_create.cpp @@ -63,11 +63,6 @@ Drm *Drm::create(std::unique_ptr &&hwDeviceId, RootDeviceEnvironm return nullptr; } - if (drm->isSharedSystemAllocEnabled()) { - auto hwInfo = drm->getRootDeviceEnvironment().getMutableHardwareInfo(); - hwInfo->capabilityTable.sharedSystemMemCapabilities |= UnifiedSharedMemoryFlags::sharedSystemPageFaultEnabled; - } - if (drm->enableTurboBoost()) { printDebugString(debugManager.flags.PrintDebugMessages.get(), stderr, "%s", "WARNING: Failed to request OCL Turbo Boost\n"); } diff --git a/shared/source/os_interface/linux/drm_neo.cpp b/shared/source/os_interface/linux/drm_neo.cpp index 49f6a3cbd5..44d3e9216c 100644 --- a/shared/source/os_interface/linux/drm_neo.cpp +++ b/shared/source/os_interface/linux/drm_neo.cpp @@ -496,6 +496,7 @@ int Drm::setupHardwareInfo(const DeviceDescriptor *device, bool setupFeatureTabl auto releaseHelper = rootDeviceEnvironment.getReleaseHelper(); device->setupHardwareInfo(hwInfo, setupFeatureTableAndWorkaroundTable, releaseHelper); + this->adjustSharedSystemMemCapabilities(); querySystemInfo(); @@ -1861,6 +1862,12 @@ bool Drm::queryDeviceIdAndRevision() { return IoctlHelperI915::queryDeviceIdAndRevision(*this); } +void Drm::adjustSharedSystemMemCapabilities() { + if (!this->isSharedSystemAllocEnabled()) { + this->getRootDeviceEnvironment().getMutableHardwareInfo()->capabilityTable.sharedSystemMemCapabilities = 0; + } +} + uint32_t Drm::getAggregatedProcessCount() const { return ioctlHelper->getNumProcesses(); } diff --git a/shared/source/os_interface/linux/drm_neo.h b/shared/source/os_interface/linux/drm_neo.h index 19ef7e9651..d84e6812e2 100644 --- a/shared/source/os_interface/linux/drm_neo.h +++ b/shared/source/os_interface/linux/drm_neo.h @@ -153,6 +153,7 @@ class Drm : public DriverModel { bool isDirectSubmissionActive() const { return this->directSubmissionActive; } MOCKABLE_VIRTUAL void setSharedSystemAllocEnable(bool value) { this->sharedSystemAllocEnable = value; } MOCKABLE_VIRTUAL bool isSharedSystemAllocEnabled() const { return this->sharedSystemAllocEnable; } + void adjustSharedSystemMemCapabilities(); MOCKABLE_VIRTUAL bool isSetPairAvailable(); MOCKABLE_VIRTUAL bool getSetPairAvailable() { return setPairAvailable; } diff --git a/shared/source/os_interface/product_helper.inl b/shared/source/os_interface/product_helper.inl index e67ba456d9..c19d089d8a 100644 --- a/shared/source/os_interface/product_helper.inl +++ b/shared/source/os_interface/product_helper.inl @@ -180,13 +180,12 @@ uint64_t ProductHelperHw::getHostMemCapabilities(const HardwareInfo template uint64_t ProductHelperHw::getSharedSystemMemCapabilities(const HardwareInfo *hwInfo) const { - bool supported = false; - if (debugManager.flags.EnableSharedSystemUsmSupport.get() != -1) { - supported = !!debugManager.flags.EnableSharedSystemUsmSupport.get(); + if ((debugManager.flags.EnableRecoverablePageFaults.get() == 0) || (debugManager.flags.EnableSharedSystemUsmSupport.get() != 1)) { + return 0; } - return (supported ? (UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::atomicAccess | UnifiedSharedMemoryFlags::concurrentAccess | UnifiedSharedMemoryFlags::concurrentAtomicAccess) : 0); + return (hwInfo->capabilityTable.sharedSystemMemCapabilities); } template diff --git a/shared/source/unified_memory/usm_memory_support.h b/shared/source/unified_memory/usm_memory_support.h index 892c17ba3d..cda030f462 100644 --- a/shared/source/unified_memory/usm_memory_support.h +++ b/shared/source/unified_memory/usm_memory_support.h @@ -15,5 +15,4 @@ inline constexpr uint64_t access = 1 << 0; inline constexpr uint64_t atomicAccess = 1 << 1; inline constexpr uint64_t concurrentAccess = 1 << 2; inline constexpr uint64_t concurrentAtomicAccess = 1 << 3; -inline constexpr uint64_t sharedSystemPageFaultEnabled = 1 << 4; } // namespace UnifiedSharedMemoryFlags diff --git a/shared/test/unit_test/memory_manager/prefetch_manager_tests.cpp b/shared/test/unit_test/memory_manager/prefetch_manager_tests.cpp index 394efb2933..f1f329d5a6 100644 --- a/shared/test/unit_test/memory_manager/prefetch_manager_tests.cpp +++ b/shared/test/unit_test/memory_manager/prefetch_manager_tests.cpp @@ -37,13 +37,15 @@ TEST(PrefetchManagerTests, givenPrefetchManagerWhenCallingInterfaceFunctionsThen auto &hwInfo = *device->getRootDeviceEnvironment().getMutableHardwareInfo(); VariableBackup sharedSystemMemCapabilities{&hwInfo.capabilityTable.sharedSystemMemCapabilities}; - sharedSystemMemCapabilities = UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::sharedSystemPageFaultEnabled; + sharedSystemMemCapabilities = (UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::atomicAccess | UnifiedSharedMemoryFlags::concurrentAccess | UnifiedSharedMemoryFlags::concurrentAtomicAccess); auto svmData = svmManager->getSVMAlloc(ptr); ASSERT_NE(nullptr, svmData); auto ptr2 = malloc(1024); + debugManager.flags.EnableSharedSystemUsmSupport.set(1); + EXPECT_EQ(0u, prefetchContext.allocations.size()); prefetchManager->insertAllocation(prefetchContext, *svmManager.get(), *device, ptr, 4096); diff --git a/shared/test/unit_test/memory_manager/unified_memory_manager_tests.cpp b/shared/test/unit_test/memory_manager/unified_memory_manager_tests.cpp index 4baaa70e65..e499882111 100644 --- a/shared/test/unit_test/memory_manager/unified_memory_manager_tests.cpp +++ b/shared/test/unit_test/memory_manager/unified_memory_manager_tests.cpp @@ -336,10 +336,12 @@ TEST_F(SVMLocalMemoryAllocatorTest, givenSharedSystemAllocationWhenPrefetchMemor auto &hwInfo = *device->getRootDeviceEnvironment().getMutableHardwareInfo(); VariableBackup sharedSystemMemCapabilities{&hwInfo.capabilityTable.sharedSystemMemCapabilities}; - sharedSystemMemCapabilities = UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::sharedSystemPageFaultEnabled; + sharedSystemMemCapabilities = (UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::atomicAccess | UnifiedSharedMemoryFlags::concurrentAccess | UnifiedSharedMemoryFlags::concurrentAtomicAccess); csr->setupContext(*device->getDefaultEngine().osContext); + debugManager.flags.EnableSharedSystemUsmSupport.set(1); + auto ptr = malloc(4096); EXPECT_NE(nullptr, ptr); 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 e1f016bafa..83ec024c17 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 @@ -9,6 +9,7 @@ #include "shared/source/os_interface/linux/memory_info.h" #include "shared/source/os_interface/linux/os_context_linux.h" #include "shared/source/os_interface/product_helper.h" +#include "shared/source/unified_memory/usm_memory_support.h" #include "shared/test/common/helpers/debug_manager_state_restore.h" #include "shared/test/common/helpers/engine_descriptor_helper.h" #include "shared/test/common/mocks/linux/mock_drm_memory_manager.h" @@ -2805,6 +2806,10 @@ TEST_F(IoctlHelperXeTest, whenQueryDeviceIdAndRevisionConfigFlagHasGpuAddrMirror EXPECT_TRUE(IoctlHelperXe::queryDeviceIdAndRevision(*drm)); EXPECT_TRUE(drm->isSharedSystemAllocEnabled()); + uint64_t caps = (UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::atomicAccess | UnifiedSharedMemoryFlags::concurrentAccess | UnifiedSharedMemoryFlags::concurrentAtomicAccess); + drm->getRootDeviceEnvironment().getMutableHardwareInfo()->capabilityTable.sharedSystemMemCapabilities = caps; + drm->adjustSharedSystemMemCapabilities(); + EXPECT_EQ(caps, drm->getRootDeviceEnvironment().getMutableHardwareInfo()->capabilityTable.sharedSystemMemCapabilities); EXPECT_TRUE(drm->hasPageFaultSupport()); } @@ -2858,6 +2863,10 @@ TEST_F(IoctlHelperXeTest, whenQueryDeviceIdAndRevisionAndConfigFlagHasGpuAddrMir EXPECT_TRUE(IoctlHelperXe::queryDeviceIdAndRevision(*drm)); EXPECT_FALSE(drm->isSharedSystemAllocEnabled()); + uint64_t caps = (UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::atomicAccess | UnifiedSharedMemoryFlags::concurrentAccess | UnifiedSharedMemoryFlags::concurrentAtomicAccess); + drm->getRootDeviceEnvironment().getMutableHardwareInfo()->capabilityTable.sharedSystemMemCapabilities = caps; + drm->adjustSharedSystemMemCapabilities(); + EXPECT_EQ(0lu, drm->getRootDeviceEnvironment().getMutableHardwareInfo()->capabilityTable.sharedSystemMemCapabilities); } TEST_F(IoctlHelperXeTest, whenQueryDeviceIdAndRevisionAndSharedSystemUsmSupportDebugFlagClearThenSharedSystemAllocEnableFalse) { @@ -2884,6 +2893,10 @@ TEST_F(IoctlHelperXeTest, whenQueryDeviceIdAndRevisionAndSharedSystemUsmSupportD EXPECT_TRUE(IoctlHelperXe::queryDeviceIdAndRevision(*drm)); EXPECT_FALSE(drm->isSharedSystemAllocEnabled()); + uint64_t caps = (UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::atomicAccess | UnifiedSharedMemoryFlags::concurrentAccess | UnifiedSharedMemoryFlags::concurrentAtomicAccess); + drm->getRootDeviceEnvironment().getMutableHardwareInfo()->capabilityTable.sharedSystemMemCapabilities = caps; + drm->adjustSharedSystemMemCapabilities(); + EXPECT_EQ(0lu, drm->getRootDeviceEnvironment().getMutableHardwareInfo()->capabilityTable.sharedSystemMemCapabilities); EXPECT_FALSE(drm->hasPageFaultSupport()); } diff --git a/shared/test/unit_test/os_interface/product_helper_tests.cpp b/shared/test/unit_test/os_interface/product_helper_tests.cpp index aed485a51f..46c91f8092 100644 --- a/shared/test/unit_test/os_interface/product_helper_tests.cpp +++ b/shared/test/unit_test/os_interface/product_helper_tests.cpp @@ -71,18 +71,26 @@ HWTEST_F(ProductHelperTest, givenDebugFlagSetWhenAskingForHostMemCapabilitesThen HWTEST_F(ProductHelperTest, givenProductHelperWhenGettingSharedSystemMemCapabilitiesThenCorrectValueIsReturned) { DebugManagerStateRestore restore; - EXPECT_EQ(0u, productHelper->getSharedSystemMemCapabilities(&pInHwInfo)); + uint64_t caps = (UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::atomicAccess | UnifiedSharedMemoryFlags::concurrentAccess | UnifiedSharedMemoryFlags::concurrentAtomicAccess); + pInHwInfo.capabilityTable.sharedSystemMemCapabilities = caps; for (auto enable : {-1, 0, 1}) { debugManager.flags.EnableSharedSystemUsmSupport.set(enable); - - if (enable > 0) { - auto caps = UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::atomicAccess | UnifiedSharedMemoryFlags::concurrentAccess | UnifiedSharedMemoryFlags::concurrentAtomicAccess; - EXPECT_EQ(caps, productHelper->getSharedSystemMemCapabilities(&pInHwInfo)); - } else { + if (enable != 1) { EXPECT_EQ(0u, productHelper->getSharedSystemMemCapabilities(&pInHwInfo)); + } else { + for (auto pf_enable : {-1, 0, 1}) { + debugManager.flags.EnableRecoverablePageFaults.set(pf_enable); + if (pf_enable != 0) { + EXPECT_EQ(caps, productHelper->getSharedSystemMemCapabilities(&pInHwInfo)); + } else { + EXPECT_EQ(0u, productHelper->getSharedSystemMemCapabilities(&pInHwInfo)); + } + } } } + + pInHwInfo.capabilityTable.sharedSystemMemCapabilities = caps; } HWTEST_F(ProductHelperTest, givenProductHelperWhenAskedIfIsBlitSplitEnqueueWARequiredThenReturnFalse) {