Remove possible infinite loops related to pNext
Two code parts contained invalid logic related to traversing opaque list of pNexts. This has been fixed. Signed-off-by: Patryk Wrobel <patryk.wrobel@intel.com>
This commit is contained in:
parent
d75eccc026
commit
5793e200e4
|
@ -643,7 +643,7 @@ ze_result_t DeviceImp::getKernelProperties(ze_device_module_properties_t *pKerne
|
|||
|
||||
void *pNext = pKernelProperties->pNext;
|
||||
while (pNext) {
|
||||
ze_base_desc_t *extendedProperties = reinterpret_cast<ze_base_desc_t *>(pKernelProperties->pNext);
|
||||
ze_base_desc_t *extendedProperties = reinterpret_cast<ze_base_desc_t *>(pNext);
|
||||
if (extendedProperties->stype == ZE_STRUCTURE_TYPE_FLOAT_ATOMIC_EXT_PROPERTIES) {
|
||||
ze_float_atomic_ext_properties_t *floatProperties =
|
||||
reinterpret_cast<ze_float_atomic_ext_properties_t *>(extendedProperties);
|
||||
|
|
|
@ -730,7 +730,7 @@ ze_result_t KernelImp::getProperties(ze_kernel_properties_t *pKernelProperties)
|
|||
|
||||
void *pNext = pKernelProperties->pNext;
|
||||
while (pNext) {
|
||||
ze_base_desc_t *extendedProperties = reinterpret_cast<ze_base_desc_t *>(pKernelProperties->pNext);
|
||||
ze_base_desc_t *extendedProperties = reinterpret_cast<ze_base_desc_t *>(pNext);
|
||||
if (extendedProperties->stype == ZE_STRUCTURE_TYPE_KERNEL_PREFERRED_GROUP_SIZE_PROPERTIES) {
|
||||
ze_kernel_preferred_group_size_properties_t *preferredGroupSizeProperties =
|
||||
reinterpret_cast<ze_kernel_preferred_group_size_properties_t *>(extendedProperties);
|
||||
|
|
|
@ -823,6 +823,35 @@ TEST_F(DeviceHostPointerTest, givenHostPointerNotAcceptedByKernelAndHostPointerC
|
|||
delete[] buffer;
|
||||
}
|
||||
|
||||
TEST_F(DeviceTest, givenMoreThanOneExtendedPropertiesStructuresWhenKernelPropertiesCalledThenSuccessIsReturnedAndPropertiesAreSet) {
|
||||
ze_scheduling_hint_exp_properties_t schedulingHintProperties = {};
|
||||
schedulingHintProperties.stype = ZE_STRUCTURE_TYPE_SCHEDULING_HINT_EXP_PROPERTIES;
|
||||
schedulingHintProperties.schedulingHintFlags = ZE_SCHEDULING_HINT_EXP_FLAG_FORCE_UINT32;
|
||||
schedulingHintProperties.pNext = nullptr;
|
||||
|
||||
ze_float_atomic_ext_properties_t floatAtomicExtendedProperties = {};
|
||||
floatAtomicExtendedProperties.stype = ZE_STRUCTURE_TYPE_FLOAT_ATOMIC_EXT_PROPERTIES;
|
||||
floatAtomicExtendedProperties.pNext = &schedulingHintProperties;
|
||||
|
||||
const ze_device_fp_flags_t maxValue{std::numeric_limits<uint32_t>::max()};
|
||||
floatAtomicExtendedProperties.fp16Flags = maxValue;
|
||||
floatAtomicExtendedProperties.fp32Flags = maxValue;
|
||||
floatAtomicExtendedProperties.fp64Flags = maxValue;
|
||||
|
||||
ze_device_module_properties_t kernelProperties = {};
|
||||
kernelProperties.stype = ZE_STRUCTURE_TYPE_DEVICE_MODULE_PROPERTIES;
|
||||
kernelProperties.pNext = &floatAtomicExtendedProperties;
|
||||
|
||||
ze_result_t res = device->getKernelProperties(&kernelProperties);
|
||||
EXPECT_EQ(res, ZE_RESULT_SUCCESS);
|
||||
|
||||
EXPECT_NE(maxValue, floatAtomicExtendedProperties.fp16Flags);
|
||||
EXPECT_NE(maxValue, floatAtomicExtendedProperties.fp32Flags);
|
||||
EXPECT_NE(maxValue, floatAtomicExtendedProperties.fp64Flags);
|
||||
|
||||
EXPECT_NE(ZE_SCHEDULING_HINT_EXP_FLAG_FORCE_UINT32, schedulingHintProperties.schedulingHintFlags);
|
||||
}
|
||||
|
||||
TEST_F(DeviceTest, givenKernelExtendedPropertiesStructureWhenKernelPropertiesCalledThenSuccessIsReturnedAndPropertiesAreSet) {
|
||||
ze_device_module_properties_t kernelProperties = {};
|
||||
|
||||
|
|
Loading…
Reference in New Issue