SWDEV-470703 - Avoids a potential segfault caused by nullptr dereferencing

Change-Id: If80b00b41869076c18651995c46f89095e7266f9
Esse commit está contido em:
Sourabh Betigeri
2024-06-28 00:06:20 -07:00
commit de Sourabh Betigeri
commit 9d628a4a3d
+16 -15
Ver Arquivo
@@ -3110,33 +3110,34 @@ bool VirtualGPU::submitKernelInternal(const amd::NDRangeContainer& sizes,
break;
}
case amd::KernelParameterDescriptor::HiddenMultiGridSync: {
uint64_t gridSync = coopGroups ? 1 : 0;
bool multiGrid = (vcmd != nullptr) ? vcmd->cooperativeMultiDeviceGroups() : false;
bool multiGridSync = (vcmd != nullptr) ? vcmd->cooperativeMultiDeviceGroups() : false;
bool singleGridSync = (vcmd != nullptr) ? vcmd->cooperativeGroups() : false;
Device::MGSyncInfo* syncInfo = nullptr;
if (multiGrid) {
if (multiGridSync) {
// Find CPU pointer to the right sync info structure. It should be after MGSyncData
syncInfo = reinterpret_cast<Device::MGSyncInfo*>(
dev().MGSync() + Device::kMGInfoSizePerDevice * dev().index() + Device::kMGSyncDataSize);
// Update sync data address. Use the offset adjustment to the right location
syncInfo->mgs = reinterpret_cast<Device::MGSyncData*>(dev().MGSync() +
Device::kMGInfoSizePerDevice * vcmd->firstDevice());
}
else {
} else if (singleGridSync) {
syncInfo = reinterpret_cast<Device::MGSyncInfo*>(allocKernArg(Device::kSGInfoSize, 64));
syncInfo->mgs = nullptr;
}
// Update sync data address.
syncInfo->sgs = {0};
// Fill all sync info fields
syncInfo->grid_id = vcmd->gridId();
syncInfo->num_grids = vcmd->numGrids();
syncInfo->prev_sum = vcmd->prevGridSum();
syncInfo->all_sum = vcmd->allGridSum();
syncInfo->num_wg = vcmd->numWorkgroups();
if (multiGridSync || singleGridSync) {
// Update sync data address.
syncInfo->sgs = {0};
// Fill rest of sync info fields
syncInfo->grid_id = vcmd->gridId();
syncInfo->num_grids = vcmd->numGrids();
syncInfo->prev_sum = vcmd->prevGridSum();
syncInfo->all_sum = vcmd->allGridSum();
syncInfo->num_wg = vcmd->numWorkgroups();
}
// Update GPU address for grid sync info. Use the offset adjustment for the right
// location
gridSync = reinterpret_cast<uint64_t>(syncInfo);
WriteAqlArgAt(hidden_arguments, gridSync, it.size_, it.offset_);
WriteAqlArgAt(hidden_arguments, reinterpret_cast<uint64_t>(syncInfo), it.size_,
it.offset_);
break;
}
case amd::KernelParameterDescriptor::HiddenHeap: