Skip to content

Commit d0fdeb0

Browse files
fix: correct shared cross device alloc caps for sub devices
in case of single exposed device, if there are subdevice, then subdevices may access between each other Related-To: HSD-18042639532 Signed-off-by: Mateusz Jablonski <[email protected]> Source: 10dc8a5
1 parent 90eb1af commit d0fdeb0

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

level_zero/core/source/device/device_imp.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -838,7 +838,7 @@ ze_result_t DeviceImp::getMemoryAccessProperties(ze_device_memory_access_propert
838838
static_cast<ze_memory_access_cap_flags_t>(productHelper.getSingleDeviceSharedMemCapabilities(isKmdMigrationAvailable));
839839

840840
auto defaultContext = static_cast<ContextImp *>(getDriverHandle()->getDefaultContext());
841-
auto multiDeviceWithSingleRoot = defaultContext->getNumDevices() > 1 && defaultContext->rootDeviceIndices.size() == 1;
841+
auto multiDeviceWithSingleRoot = defaultContext->rootDeviceIndices.size() == 1 && (defaultContext->getNumDevices() > 1 || isSubdevice);
842842

843843
pMemAccessProperties->sharedCrossDeviceAllocCapabilities = {};
844844
if (multiDeviceWithSingleRoot || (isKmdMigrationAvailable &&

level_zero/core/test/unit_tests/sources/device/test_l0_device.cpp

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3081,8 +3081,9 @@ struct MemoryAccessPropertiesSingleExposedDeviceTest : public Test<MultiDeviceFi
30813081
MultiDeviceFixtureHierarchy::setUp();
30823082
}
30833083
};
3084+
30843085
TEST_F(MemoryAccessPropertiesSingleExposedDeviceTest,
3085-
givenSingleExposedDevicesWhenCallingGetMemoryAccessPropertiesThenSharedCrossDeviceAccessSupportIsNotExposed) {
3086+
givenSingleExposedDevicesWhenCallingGetMemoryAccessPropertiesForRootDeviceThenSharedCrossDeviceAccessSupportIsNotExposed) {
30863087
L0::Device *device = driverHandle->devices[0];
30873088
ze_device_memory_access_properties_t properties;
30883089
auto result = device->getMemoryAccessProperties(&properties);
@@ -3092,6 +3093,20 @@ TEST_F(MemoryAccessPropertiesSingleExposedDeviceTest,
30923093
EXPECT_EQ(expectedSharedCrossDeviceAllocCapabilities, properties.sharedCrossDeviceAllocCapabilities);
30933094
}
30943095

3096+
TEST_F(MemoryAccessPropertiesSingleExposedDeviceTest,
3097+
givenSingleExposedDevicesWhenCallingGetMemoryAccessPropertiesForSubDeviceThenSharedCrossDeviceAccessSupportIsExposed) {
3098+
L0::Device *rootDevice = driverHandle->devices[0];
3099+
auto device = static_cast<L0::DeviceImp *>(rootDevice)->subDevices[0];
3100+
ze_device_memory_access_properties_t properties;
3101+
auto result = device->getMemoryAccessProperties(&properties);
3102+
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
3103+
3104+
ze_memory_access_cap_flags_t expectedSharedCrossDeviceAllocCapabilities =
3105+
ZE_MEMORY_ACCESS_CAP_FLAG_RW | ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT |
3106+
ZE_MEMORY_ACCESS_CAP_FLAG_ATOMIC | ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT_ATOMIC;
3107+
EXPECT_EQ(expectedSharedCrossDeviceAllocCapabilities, properties.sharedCrossDeviceAllocCapabilities);
3108+
}
3109+
30953110
using MultipleDevicesP2PDevice0Access0Atomic0Device1Access0Atomic0Test = MultipleDevicesP2PFixture<0, 0>;
30963111
TEST_F(MultipleDevicesP2PDevice0Access0Atomic0Device1Access0Atomic0Test, WhenCallingGetP2PPropertiesWithBothDevicesHavingNoAccessSupportThenNoSupportIsReturned) {
30973112
L0::Device *device0 = driverHandle->devices[0];

0 commit comments

Comments
 (0)