@@ -527,5 +527,85 @@ INSTANTIATE_TEST_SUITE_P(DriverTestMultipleDeviceWithAffinityMaskTests,
527527 ::testing::Combine (
528528 ::testing::ValuesIn (maskArray.masks),
529529 ::testing::ValuesIn(maskArray.masks)));
530+
531+ TEST_F (DriverTestMultipleDeviceWithAffinityMask,
532+ whenSettingAffinityMaskWithDeviceLargerThanAvailableDevicesThenRootDeviceValueIsIgnored) {
533+ L0::DriverHandleImp *driverHandle = new DriverHandleImp;
534+
535+ constexpr uint32_t totalRootDevices = 2 ;
536+ uint32_t subDevice1Index = 0 ;
537+ driverHandle->affinityMaskString = " 0,23,1." + std::to_string (subDevice1Index);
538+
539+ ze_result_t res = driverHandle->initialize (std::move (devices));
540+ EXPECT_EQ (ZE_RESULT_SUCCESS, res);
541+
542+ uint32_t deviceCount = 0 ;
543+ res = zeDeviceGet (driverHandle->toHandle (), &deviceCount, nullptr );
544+
545+ EXPECT_EQ (ZE_RESULT_SUCCESS, res);
546+ EXPECT_EQ (deviceCount, totalRootDevices);
547+
548+ std::vector<ze_device_handle_t > phDevices (deviceCount);
549+ res = zeDeviceGet (driverHandle->toHandle (), &deviceCount, phDevices.data ());
550+ EXPECT_EQ (ZE_RESULT_SUCCESS, res);
551+
552+ for (uint32_t i = 0 ; i < deviceCount; i++) {
553+ ze_device_handle_t hDevice = phDevices[i];
554+ EXPECT_NE (nullptr , hDevice);
555+
556+ DeviceImp *device = reinterpret_cast <DeviceImp *>(L0::Device::fromHandle (hDevice));
557+
558+ uint32_t subDeviceCount = 0 ;
559+ res = zeDeviceGetSubDevices (hDevice, &subDeviceCount, nullptr );
560+ EXPECT_EQ (ZE_RESULT_SUCCESS, res);
561+ if (i == 0 ) {
562+ EXPECT_EQ (4u , subDeviceCount);
563+ } else {
564+ ze_device_handle_t hSubDevice;
565+ res = zeDeviceGetSubDevices (hDevice, &subDeviceCount, &hSubDevice);
566+ EXPECT_EQ (ZE_RESULT_SUCCESS, res);
567+
568+ DeviceImp *subDevice = reinterpret_cast <DeviceImp *>(L0::Device::fromHandle (hSubDevice));
569+
570+ EXPECT_EQ (1u , subDeviceCount);
571+ EXPECT_EQ (subDevice->neoDevice , device->neoDevice ->getDeviceById (subDevice1Index));
572+ }
573+ }
574+
575+ delete driverHandle;
576+ L0::GlobalDriver = nullptr ;
577+ }
578+
579+ TEST_F (DriverTestMultipleDeviceWithAffinityMask,
580+ whenSettingAffinityMaskWithSubDeviceLargerThanAvailableSubDevicesThenSubDeviceValueIsIgnored) {
581+ L0::DriverHandleImp *driverHandle = new DriverHandleImp;
582+
583+ driverHandle->affinityMaskString = " 0,1.77" ;
584+
585+ ze_result_t res = driverHandle->initialize (std::move (devices));
586+ EXPECT_EQ (ZE_RESULT_SUCCESS, res);
587+
588+ uint32_t deviceCount = 0 ;
589+ res = zeDeviceGet (driverHandle->toHandle (), &deviceCount, nullptr );
590+
591+ EXPECT_EQ (ZE_RESULT_SUCCESS, res);
592+ EXPECT_EQ (deviceCount, 1u );
593+
594+ std::vector<ze_device_handle_t > phDevices (deviceCount);
595+ res = zeDeviceGet (driverHandle->toHandle (), &deviceCount, phDevices.data ());
596+ EXPECT_EQ (ZE_RESULT_SUCCESS, res);
597+
598+ ze_device_handle_t hDevice = phDevices[0 ];
599+ EXPECT_NE (nullptr , hDevice);
600+
601+ uint32_t subDeviceCount = 0 ;
602+ res = zeDeviceGetSubDevices (hDevice, &subDeviceCount, nullptr );
603+ EXPECT_EQ (ZE_RESULT_SUCCESS, res);
604+ EXPECT_EQ (4u , subDeviceCount);
605+
606+ delete driverHandle;
607+ L0::GlobalDriver = nullptr ;
608+ }
609+
530610} // namespace ult
531611} // namespace L0
0 commit comments