diff --git a/level_zero/core/source/device/device_imp.cpp b/level_zero/core/source/device/device_imp.cpp index c0a666c870..ed1cb102c6 100644 --- a/level_zero/core/source/device/device_imp.cpp +++ b/level_zero/core/source/device/device_imp.cpp @@ -837,17 +837,13 @@ ze_result_t DeviceImp::getMemoryAccessProperties(ze_device_memory_access_propert static_cast(productHelper.getSingleDeviceSharedMemCapabilities(isKmdMigrationAvailable)); pMemAccessProperties->sharedCrossDeviceAllocCapabilities = {}; - if (this->getNEODevice()->getHardwareInfo().capabilityTable.p2pAccessSupported) { - pMemAccessProperties->sharedCrossDeviceAllocCapabilities = ZE_MEMORY_ACCESS_CAP_FLAG_RW; - - if (isKmdMigrationAvailable && - memoryManager->hasPageFaultsEnabled(*this->getNEODevice()) && - NEO::debugManager.flags.EnableConcurrentSharedCrossP2PDeviceAccess.get() == 1) { - pMemAccessProperties->sharedCrossDeviceAllocCapabilities |= ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT; - if (this->getNEODevice()->getHardwareInfo().capabilityTable.p2pAtomicAccessSupported) { - pMemAccessProperties->sharedCrossDeviceAllocCapabilities |= ZE_MEMORY_ACCESS_CAP_FLAG_ATOMIC | ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT_ATOMIC; - } - } + if (isKmdMigrationAvailable && + memoryManager->hasPageFaultsEnabled(*this->getNEODevice()) && + NEO::debugManager.flags.EnableConcurrentSharedCrossP2PDeviceAccess.get() == 1) { + pMemAccessProperties->sharedCrossDeviceAllocCapabilities = ZE_MEMORY_ACCESS_CAP_FLAG_RW | + ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT | + ZE_MEMORY_ACCESS_CAP_FLAG_ATOMIC | + ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT_ATOMIC; } pMemAccessProperties->sharedSystemAllocCapabilities = diff --git a/level_zero/core/test/unit_tests/sources/device/test_l0_device.cpp b/level_zero/core/test/unit_tests/sources/device/test_l0_device.cpp index 2dc0eb3ca4..ed600e356c 100644 --- a/level_zero/core/test/unit_tests/sources/device/test_l0_device.cpp +++ b/level_zero/core/test/unit_tests/sources/device/test_l0_device.cpp @@ -2914,8 +2914,12 @@ struct MultipleDevicesP2PFixture : public ::testing::Test { const uint32_t numSubDevices = 2u; }; -using MemoryAccessPropertieP2PAccess0Atomic0 = MultipleDevicesP2PFixture<0, 0>; -TEST_F(MemoryAccessPropertieP2PAccess0Atomic0, WhenCallingGetMemoryAccessPropertiesWithDevicesHavingNoAccessSupportThenNoSupportIsReturned) { +using MemoryAccessPropertiesSharedCrossDeviceCapsTest = Test; +TEST_F(MemoryAccessPropertiesSharedCrossDeviceCapsTest, + WhenCallingGetMemoryAccessPropertiesWithDevicesHavingKmdMigrationsSupportAndCrossP2PSharedAccessKeyNotSetThenNoSupportIsReturned) { + DebugManagerStateRestore restorer; + debugManager.flags.EnableRecoverablePageFaults.set(1); + debugManager.flags.UseKmdMigration.set(1); L0::Device *device = driverHandle->devices[0]; ze_device_memory_access_properties_t properties; auto result = device->getMemoryAccessProperties(&properties); @@ -2925,72 +2929,25 @@ TEST_F(MemoryAccessPropertieP2PAccess0Atomic0, WhenCallingGetMemoryAccessPropert EXPECT_EQ(expectedSharedCrossDeviceAllocCapabilities, properties.sharedCrossDeviceAllocCapabilities); } -using MemoryAccessPropertieP2PAccess1Atomic0 = MultipleDevicesP2PFixture<1, 0>; -TEST_F(MemoryAccessPropertieP2PAccess1Atomic0, WhenCallingGetMemoryAccessPropertiesWithDevicesHavingP2PAccessSupportThenSupportIsReturned) { - L0::Device *device = driverHandle->devices[0]; - ze_device_memory_access_properties_t properties; - auto result = device->getMemoryAccessProperties(&properties); - EXPECT_EQ(ZE_RESULT_SUCCESS, result); - - ze_memory_access_cap_flags_t expectedSharedCrossDeviceAllocCapabilities = - ZE_MEMORY_ACCESS_CAP_FLAG_RW; - EXPECT_EQ(expectedSharedCrossDeviceAllocCapabilities, properties.sharedCrossDeviceAllocCapabilities); -} - -using MemoryAccessPropertieP2PAccess1Atomic0 = MultipleDevicesP2PFixture<1, 0>; -TEST_F(MemoryAccessPropertieP2PAccess1Atomic0, WhenCallingGetMemoryAccessPropertiesWithDevicesHavingP2PWithoutRecoverablePageFaultsThenSupportIsReturned) { - DebugManagerStateRestore restorer; - debugManager.flags.EnableRecoverablePageFaults.set(0); - debugManager.flags.UseKmdMigration.set(1); - - L0::Device *device = driverHandle->devices[0]; - ze_device_memory_access_properties_t properties; - auto result = device->getMemoryAccessProperties(&properties); - EXPECT_EQ(ZE_RESULT_SUCCESS, result); - - ze_memory_access_cap_flags_t expectedSharedCrossDeviceAllocCapabilities = - ZE_MEMORY_ACCESS_CAP_FLAG_RW; - EXPECT_EQ(expectedSharedCrossDeviceAllocCapabilities, properties.sharedCrossDeviceAllocCapabilities); -} - -using MemoryAccessPropertieP2PAccess1Atomic0 = MultipleDevicesP2PFixture<1, 0>; -TEST_F(MemoryAccessPropertieP2PAccess1Atomic0, WhenCallingGetMemoryAccessPropertiesWithDevicesHavingP2PWithoutKmdMigrationThenSupportIsReturned) { +TEST_F(MemoryAccessPropertiesSharedCrossDeviceCapsTest, + WhenCallingGetMemoryAccessPropertiesWithDevicesHavingNoKmdMigrationsSupportAndEnableCrossP2PSharedAccessKeyThenNoSupportIsReturned) { DebugManagerStateRestore restorer; debugManager.flags.EnableRecoverablePageFaults.set(1); debugManager.flags.UseKmdMigration.set(0); + debugManager.flags.EnableConcurrentSharedCrossP2PDeviceAccess.set(1); L0::Device *device = driverHandle->devices[0]; ze_device_memory_access_properties_t properties; auto result = device->getMemoryAccessProperties(&properties); EXPECT_EQ(ZE_RESULT_SUCCESS, result); - ze_memory_access_cap_flags_t expectedSharedCrossDeviceAllocCapabilities = - ZE_MEMORY_ACCESS_CAP_FLAG_RW; + ze_memory_access_cap_flags_t expectedSharedCrossDeviceAllocCapabilities = {}; EXPECT_EQ(expectedSharedCrossDeviceAllocCapabilities, properties.sharedCrossDeviceAllocCapabilities); } - -using MemoryAccessPropertieP2PAccess1Atomic0 = MultipleDevicesP2PFixture<1, 0>; -TEST_F(MemoryAccessPropertieP2PAccess1Atomic0, - WhenCallingGetMemoryAccessPropertiesWithDevicesHavingP2PAndConcurrentAccessSupportThenBasicSupportIsReturned) { +TEST_F(MemoryAccessPropertiesSharedCrossDeviceCapsTest, + WhenCallingGetMemoryAccessPropertiesWithDevicesHavingNoRecoverablePageFaultSupportAndEnableCrossP2PSharedAccessKeyThenNoSupportIsReturned) { DebugManagerStateRestore restorer; - debugManager.flags.EnableRecoverablePageFaults.set(1); - debugManager.flags.UseKmdMigration.set(1); - - L0::Device *device = driverHandle->devices[0]; - ze_device_memory_access_properties_t properties; - auto result = device->getMemoryAccessProperties(&properties); - EXPECT_EQ(ZE_RESULT_SUCCESS, result); - - ze_memory_access_cap_flags_t expectedSharedCrossDeviceAllocCapabilities = - ZE_MEMORY_ACCESS_CAP_FLAG_RW; - EXPECT_EQ(expectedSharedCrossDeviceAllocCapabilities, properties.sharedCrossDeviceAllocCapabilities); -} - -using MemoryAccessPropertieP2PAccess1Atomic0 = MultipleDevicesP2PFixture<1, 0>; -TEST_F(MemoryAccessPropertieP2PAccess1Atomic0, - WhenCallingGetMemoryAccessPropertiesWithDevicesHavingP2PAndConcurrentAccessSupportAndEnableCrossP2PSharedAccessKeyThenSupportIsReturned) { - DebugManagerStateRestore restorer; - debugManager.flags.EnableRecoverablePageFaults.set(1); + debugManager.flags.EnableRecoverablePageFaults.set(0); debugManager.flags.UseKmdMigration.set(1); debugManager.flags.EnableConcurrentSharedCrossP2PDeviceAccess.set(1); @@ -2999,29 +2956,12 @@ TEST_F(MemoryAccessPropertieP2PAccess1Atomic0, auto result = device->getMemoryAccessProperties(&properties); EXPECT_EQ(ZE_RESULT_SUCCESS, result); - ze_memory_access_cap_flags_t expectedSharedCrossDeviceAllocCapabilities = - ZE_MEMORY_ACCESS_CAP_FLAG_RW | ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT; + ze_memory_access_cap_flags_t expectedSharedCrossDeviceAllocCapabilities = {}; EXPECT_EQ(expectedSharedCrossDeviceAllocCapabilities, properties.sharedCrossDeviceAllocCapabilities); } -using MemoryAccessPropertieP2PAccess1Atomic1 = MultipleDevicesP2PFixture<1, 1>; -TEST_F(MemoryAccessPropertieP2PAccess1Atomic1, - WhenCallingGetMemoryAccessPropertiesWithDevicesHavingP2PAndAtomicAccessSupportThenBasicSupportIsReturned) { - DebugManagerStateRestore restorer; - debugManager.flags.EnableRecoverablePageFaults.set(1); - debugManager.flags.UseKmdMigration.set(1); - - L0::Device *device = driverHandle->devices[0]; - ze_device_memory_access_properties_t properties; - auto result = device->getMemoryAccessProperties(&properties); - EXPECT_EQ(ZE_RESULT_SUCCESS, result); - - ze_memory_access_cap_flags_t expectedSharedCrossDeviceAllocCapabilities = ZE_MEMORY_ACCESS_CAP_FLAG_RW; - EXPECT_EQ(expectedSharedCrossDeviceAllocCapabilities, properties.sharedCrossDeviceAllocCapabilities); -} - -TEST_F(MemoryAccessPropertieP2PAccess1Atomic1, - WhenCallingGetMemoryAccessPropertiesWithDevicesHavingP2PAndAtomicAccessSupportAndEnableCrossP2PSharedAccessKeyThenSupportIsReturned) { +TEST_F(MemoryAccessPropertiesSharedCrossDeviceCapsTest, + WhenCallingGetMemoryAccessPropertiesWithDevicesHavingKmdMigrationsAndRecoverablePageFaultSupportAndEnableCrossP2PSharedAccessKeyThenSupportIsReturned) { DebugManagerStateRestore restorer; debugManager.flags.EnableRecoverablePageFaults.set(1); debugManager.flags.UseKmdMigration.set(1);