fix(psram): correct heap vaddr calculation (IDFGH-14775) #15513
+21
−11
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.
Description
In case both
.ext_ram_bss
and.ext_ram_noinit
segments exist, the heap start calculation may be incorrect when there is a gap between two sections. This is because the heap start calculation only considers segment sizes and not a possible gap between them. This gap may be introduced when using__attribute__((aligned(...)))
on the first buffer in.ext_ram_noinit
segment, i.e.:In this case,
s_psram_ctx.regions_to_heap[PSRAM_MEM_8BIT_ALIGNED].vaddr_start
is incorrectly calculated to be0x3c20b8e8
, while this address obviously resides inside the allocated buffer.Correct address would be:
0x3c203900 + 0x8000 = 0x3c20b900
This PR changes the calculation so that the beginning of the first segment and the end of the last segment is used to calculate the true allocated size of the both regions. It keeps the (theoretical?) possibility of these segments being in random order (don't know if this was the intention of the previous implementation).
Related
Fixes #15496