On Wed, Apr 27, 2022 at 08:26:35AM +0200, Gerd Hoffmann wrote:
if (!highram_start) {
if (e - s > BUILD_MAX_HIGHTABLE * 16)
highram_size = BUILD_MAX_HIGHTABLE; u32 newe = ALIGN_DOWN(e - highram_size, MALLOC_MIN_ALIGN); if (newe <= e && newe >= s) { highram_start = newe;
Thanks, but I'm still seeing a corner case where this fails - if ALIGN_DOWN() falls below s.
Given that the code requires the memory block being 16x the size of the zonehigh allocation (i.e. use 16M in case the block is 256M or larger) I fail to see how any reasonable alignment requirement can make that fail ...
My mistake.
I do think your new v4 version of the code is easier to understand though.
Cheers, -Kevin