This repository has been archived by the owner on Jan 26, 2024. It is now read-only.
[rocm] Fix segfault with -O0-compiled kernels #45
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
kernels_[blitType]
yields a null function pointer inKernelBlitManager::initHeap
due toKernelBlitManager::createProgram
not initializing all the kernels because of broken layout invariants.KernBlitManager::NumBlitKernels
has two possible return values:BlitTotal, and BlitLinearTotal
which are sentinels. These sentinels are used inKernelBlitManager::createProgram
to initialize thekernels_
array. It correctly initializes[0, NumBlitKernels())
, butInitHeap
is >NumBlitKernels
, so theInitHeap
kernel is not loaded.Thus, when images are disabled, and a kernel has an
hidden_heap_v1
entry, theInitHeap
blitkernel is not loaded, andkernelBlitManager::initHeap
subsequently gets a null pointer. The kernel always has suchhidden_heap_v1
descriptor entry at -O0, but I believe it's possible (unconfirmed) for this situation to occur in other circumstances.The fix is simply to ensure the
InitHeap
enumeration has a numeric value less thanBlitLinearTotal
.n.b. This bug does not exist on the 5.7 release, but it looks like that's by chance.