u32 s = en->start, e = end; if (!highram_start) {
if (e > 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. At a high-level, it looks fine. However, I think the above might introduce a corner case where a fragmented e820 might fail to find any ZoneHigh.
Looking at the size instead of the end address should fix that, i.e.
if (e - s > BUILD_MAX_HIGHTABLE * 16)
(no difference for qemu because there is a single e820 ram region with start=0 below 4G)
take care, Gerd