On 5/27/20 3:05 AM, Alex Bennée wrote: > +static uintptr_t pgd_find_hole_fallback(uintptr_t guest_size, uintptr_t brk, > long align) > +{ > + uintptr_t base; > + > + /* Start at the bottom and work our way up */ > + base = mmap_min_addr; > + > + while (true) { > + uintptr_t align_start, end; > + align_start = ROUND_UP(base, align); > + end = align_start + guest_size; > + > + /* if brk is anywhere in the range give ourselves some room to grow. > */ > + if (align_start <= brk && brk < end) { > + base += 16 * MiB;
You should skip the entire brk region with base = brk + 16 * MiB. > + base += qemu_host_page_size; If align < qemu_host_page_size, then we'll try the same page multiple times. Better as base = align_start + qemu_host_page_size. Or even base = ROUND_UP(base, align) right at the beginning. r~