
On Fri, Dec 14, 2018 at 09:13:51PM +0100, Simon Goldschmidt wrote:
lmb_add_region handles overlapping regions wrong: instead of merging or rejecting to add a new reserved region that overlaps an existing one, it just adds the new region.
Since internally the same function is used for lmb_alloc, change lmb_add_region to reject overlapping regions.
Also, to keep reserved memory correct after 'free', reserved entries created by allocating memory must not set their size to a multiple of alignment but to the original size. This ensures the reserved region is completely removed when the caller calls 'lmb_free', as this one takes the same size as passed to 'lmb_alloc' etc.
Add test to assert this.
Signed-off-by: Simon Goldschmidt simon.k.r.goldschmidt@gmail.com
[snip]
- if (alloc_size == alloc_size_aligned)
ASSERT_LMB(&lmb, ram, ram_size, 1, ram + ram_size -
(alloc_size_aligned * 2), alloc_size * 2, 0, 0, 0,
0);
- else
ASSERT_LMB(&lmb, ram, ram_size, 2, ram + ram_size -
(alloc_size_aligned * 2), alloc_size, ram + ram_size
- alloc_size_aligned, alloc_size, 0, 0);
I've fixed this inline for testing but, we need braces with this if/else as I guess due to all of the macro expansion it's more than one line and both gcc and clang fail.