arena: fix xalloc minaddr|maxaddr
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 24 Sep 2019 16:23:27 +0000 (12:23 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 8 Oct 2019 21:11:11 +0000 (17:11 -0400)
commit297a5ff74809119736ced0303cf380303dd88554
tree8a1e4ff021b550f2e91b7c72d5279f7ea1004505
parent39cfb33943319d5b5e83e08c4fef07bfef716f4d
arena: fix xalloc minaddr|maxaddr

Two problems:
- if you had a single segment that contained minaddr, we'd skip that
segment and start with the *next* one.  Not only did this mean we
skipped a perfectly good segment that could have had the fix, but we
might not have a *next* segment, causing an OOM / failure.

The fix was to find the BT that contained minaddr, not just the strict
upper bound.  This means we need to handle the case where BT contains
minaddr: hence try_start and try_size.

- We'd scan the list of all nodes starting from the upper bound (and now
equality), regardless of whether or not they are free.  Yikes!

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/src/arena.c