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 5ccef16ee5..1fb3c59e0c 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..cb7c59f308 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 @@ -490,7 +490,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); @@ -513,7 +513,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); 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 d7697214df..722758e8bd 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 @@ -128,7 +128,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); @@ -151,7 +151,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); 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 59a77d8fde..8d32b48962 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 @@ -327,7 +327,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..880b0a7dc1 100644 --- a/opencl/test/unit_test/device/device_caps_tests.cpp +++ b/opencl/test/unit_test/device/device_caps_tests.cpp @@ -1315,11 +1315,10 @@ TEST_F(DeviceGetCapsTest, givenUnifiedMemorySharedSystemFlagWhenDeviceIsCreatedT 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_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 8ffc14a19a..48b3f115d5 100644 --- a/shared/source/device/device.cpp +++ b/shared/source/device/device.cpp @@ -727,8 +727,8 @@ bool Device::areSharedSystemAllocationsAllowed() const { if ((debugManager.flags.EnableRecoverablePageFaults.get() == 0) || (debugManager.flags.EnableSharedSystemUsmSupport.get() == 0)) { 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/linux/xe/ioctl_helper_xe.cpp b/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp index 1b8522bdde..fb2a85ff1d 100644 --- a/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp +++ b/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp @@ -160,7 +160,7 @@ bool IoctlHelperXe::queryDeviceIdAndRevision(Drm &drm) { hwInfo->platform.usDeviceID = config->info[DRM_XE_QUERY_CONFIG_REV_AND_DEVICE_ID] & 0xffff; hwInfo->platform.usRevId = static_cast((config->info[DRM_XE_QUERY_CONFIG_REV_AND_DEVICE_ID] >> 16) & 0xff); - if ((debugManager.flags.EnableRecoverablePageFaults.get() != 0) && (debugManager.flags.EnableSharedSystemUsmSupport.get() != 0) && (config->info[DRM_XE_QUERY_CONFIG_FLAGS] & DRM_XE_QUERY_CONFIG_FLAG_HAS_CPU_ADDR_MIRROR)) { + if ((debugManager.flags.EnableRecoverablePageFaults.get() != 0) && (debugManager.flags.EnableSharedSystemUsmSupport.get() == 1) && (config->info[DRM_XE_QUERY_CONFIG_FLAGS] & DRM_XE_QUERY_CONFIG_FLAG_HAS_CPU_ADDR_MIRROR)) { drm.setSharedSystemAllocEnable(true); drm.setPageFaultSupported(true); } diff --git a/shared/source/os_interface/product_helper.inl b/shared/source/os_interface/product_helper.inl index ab5e78e98f..707fa0bf11 100644 --- a/shared/source/os_interface/product_helper.inl +++ b/shared/source/os_interface/product_helper.inl @@ -180,13 +180,11 @@ 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() == 0)) { + 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 03d89f3835..5e7edfb098 100644 --- a/shared/test/unit_test/memory_manager/prefetch_manager_tests.cpp +++ b/shared/test/unit_test/memory_manager/prefetch_manager_tests.cpp @@ -37,7 +37,7 @@ 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); 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 23ecc79408..f5471786a2 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,7 +336,7 @@ 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); 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 41fab10525..e740920f78 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" @@ -2783,6 +2784,7 @@ TEST_F(IoctlHelperXeTest, whenQueryDeviceIdAndRevisionConfigFlagHasGpuAddrMirror MockExecutionEnvironment executionEnvironment{}; std::unique_ptr drm{Drm::create(std::make_unique(0, ""), *executionEnvironment.rootDeviceEnvironments[0])}; DebugManagerStateRestore restore; + debugManager.flags.EnableSharedSystemUsmSupport.set(1); mockIoctl = [](int fileDescriptor, unsigned long int request, void *arg) -> int { if (request == DRM_IOCTL_XE_DEVICE_QUERY) { struct drm_xe_device_query *deviceQuery = static_cast(arg); @@ -2802,6 +2804,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()); } @@ -2828,6 +2834,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) { @@ -2854,6 +2864,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 0edbdd7db0..03f3459b97 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,27 @@ 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; + EXPECT_EQ(caps, productHelper->getSharedSystemMemCapabilities(&pInHwInfo)); for (auto enable : {-1, 0, 1}) { debugManager.flags.EnableSharedSystemUsmSupport.set(enable); - - if (enable > 0) { - auto caps = UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::atomicAccess | UnifiedSharedMemoryFlags::concurrentAccess | UnifiedSharedMemoryFlags::concurrentAtomicAccess; + if (enable != 0) { EXPECT_EQ(caps, productHelper->getSharedSystemMemCapabilities(&pInHwInfo)); } else { EXPECT_EQ(0u, productHelper->getSharedSystemMemCapabilities(&pInHwInfo)); } } + for (auto enable : {-1, 0, 1}) { + debugManager.flags.EnableRecoverablePageFaults.set(enable); + if (enable != 0) { + EXPECT_EQ(caps, productHelper->getSharedSystemMemCapabilities(&pInHwInfo)); + } else { + EXPECT_EQ(0u, productHelper->getSharedSystemMemCapabilities(&pInHwInfo)); + } + } + pInHwInfo.capabilityTable.sharedSystemMemCapabilities = caps; } HWTEST_F(ProductHelperTest, givenProductHelperWhenAskedIfIsBlitSplitEnqueueWARequiredThenReturnFalse) { @@ -95,7 +104,7 @@ HWTEST_F(ProductHelperTest, givenProductHelperWhenGettingMemoryCapabilitiesThenC for (auto capabilityBitmask : {0, 0b0001, 0b0010, 0b0100, 0b1000, 0b1111}) { debugManager.flags.EnableUsmConcurrentAccessSupport.set(capabilityBitmask); - std::bitset<4> capabilityBitset(capabilityBitmask); + std::bitset<5> capabilityBitset(capabilityBitmask); auto hostMemCapabilities = productHelper->getHostMemCapabilities(&pInHwInfo); if (hostMemCapabilities > 0) {