This repository was archived by the owner on Jan 26, 2024. It is now read-only.
[rocm] Fix segfault with -O0-compiled kernels#45
Closed
ldrumm wants to merge 1 commit intoROCm:rocm-5.5.xfrom
Closed
[rocm] Fix segfault with -O0-compiled kernels#45ldrumm wants to merge 1 commit intoROCm:rocm-5.5.xfrom
ldrumm wants to merge 1 commit intoROCm:rocm-5.5.xfrom
Conversation
`kernels_[blitType]` yields a null function pointer in `KernelBlitManager::initHeap` due to `KernelBlitManager::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 in `KernelBlitManager::createProgram` to initialize the `kernels_` array. It correctly initializes `[0, NumBlitKernels())`, but `InitHeap` is > `NumBlitKernels`, so the `InitHeap` kernel is not loaded. Thus, when images are disabled, and a kernel has an `hidden_heap_v1` entry, the `InitHeap` blitkernel is not loaded, and `kernelBlitManager::initHeap` subsequently gets a null pointer. The kernel always has such `hidden_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 than* `BlitLinearTotal`. n.b. This bug does not exist on the 5.7 release, but it looks like that's by chance.
Author
|
Wrong repo. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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::initHeapdue toKernelBlitManager::createProgramnot initializing all the kernels because of broken layout invariants.KernBlitManager::NumBlitKernelshas two possible return values:BlitTotal, and BlitLinearTotalwhich are sentinels. These sentinels are used inKernelBlitManager::createProgramto initialize thekernels_array. It correctly initializes[0, NumBlitKernels()), butInitHeapis >NumBlitKernels, so theInitHeapkernel is not loaded.Thus, when images are disabled, and a kernel has an
hidden_heap_v1entry, theInitHeapblitkernel is not loaded, andkernelBlitManager::initHeapsubsequently gets a null pointer. The kernel always has suchhidden_heap_v1descriptor 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
InitHeapenumeration 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.